informatique:linux:netfilter
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| informatique:linux:netfilter [2012/12/20 17:38] – exemple de script pteu | informatique:linux:netfilter [2021/03/18 13:16] (current) – [multiport] pteu | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | {{tag> | ||
| - | ======Netfilter====== | + | ======Netfilter |
| Netfilter est le firewall intégré au noyau Linux. Il s' | Netfilter est le firewall intégré au noyau Linux. Il s' | ||
| Line 8: | Line 7: | ||
| =====Principe===== | =====Principe===== | ||
| - | {{http:// | + | {{ :informatique: |
| Line 14: | Line 13: | ||
| * FILTER : contient les règles de filtrage | * FILTER : contient les règles de filtrage | ||
| - | * NAT | + | * NAT : contient les règles de translation d' |
| * MANGLE | * MANGLE | ||
| * RAW | * RAW | ||
| Line 31: | Line 30: | ||
| * Standarts | * Standarts | ||
| + | <code bash> | ||
| + | Option : Description : | ||
| + | -A Append (ajoute) | ||
| + | -D Delete (efface) | ||
| + | -I Insert (insère) | ||
| + | -R Replace (remplace) | ||
| + | -L List (liste) | ||
| + | -F Efface toutes les règles dans la ou les chaînes | ||
| + | -Z Remet les compteurs à zéro dans une ou plusieurs chaînes | ||
| + | -C Teste ce paquet sur une chaîne | ||
| + | -N Crée une chaîne définie par l' | ||
| + | -X Efface une chaîne définie par l' | ||
| + | -P Change le comportement d'une chaîne sur une cible | ||
| + | -E Change le nom d'une chaîne | ||
| + | -p Protocole (tcp, udp, ...) | ||
| + | -s Adresse/ | ||
| + | -d Adresse/ | ||
| + | -i Interface réseau d' | ||
| + | -o Interface réseau de sortie (nom ethernet) | ||
| + | -j Jump - Saute (cible de règle) | ||
| + | -m Correspondance étendue (peut utiliser des extensions) | ||
| + | -n Sortie numérique de ports et d' | ||
| + | -t Table à manipuler | ||
| + | -v Mode bavard | ||
| + | -x Vérifications étendues (affiche les valeurs exactes) | ||
| + | -f Prends uniquement en compte le second fragment ou ceux d' | ||
| + | -V Version du paquet | ||
| + | --line-numbers Affiche les numéros de ligne | ||
| + | </ | ||
| - | Option : Description : | + | '' |
| - | -A Append (ajoute) | + | |
| - | -D Delete (efface) | + | |
| - | -I Insert (insère) | + | |
| - | -R Replace (remplace) | + | |
| - | -L List (liste) | + | |
| - | -F Efface toutes les règles dans la ou les chaînes | + | |
| - | -Z Remet les compteurs à zéro dans une ou plusieurs chaînes | + | |
| - | -C Teste ce paquet sur une chaîne | + | |
| - | -N Crée une chaîne définie par l'utilisateur | + | |
| - | -X Efface une chaîne définie par l'utilisateur | + | |
| - | -P Change le comportement d'une chaîne sur une cible | + | |
| - | -E Change le nom d'une chaîne | + | |
| - | -p Protocole (tcp, udp, ...) | + | |
| - | -s Adresse/ | + | |
| - | -d Adresse/ | + | |
| - | -i Interface réseau d' | + | |
| - | -o Interface réseau de sortie (nom ethernet) | + | |
| - | -j Jump - Saute (cible de règle) | + | |
| - | -m Correspondance étendue (peut utiliser des extensions) | + | |
| - | -n Sortie numérique de ports et d' | + | |
| - | -t Table à manipuler | + | |
| - | -v Mode bavard | + | |
| - | -x Vérifications étendues (affiche les valeurs exactes) | + | |
| - | -f Prends uniquement en compte le second fragment ou ceux d' | + | |
| - | -V Version du paquet | + | |
| - | --line-numbers Affiche les numéros de ligne | + | |
| - | + | ||
| - | -j [ACCEPT | DROP | LOG | REJECT] | + | |
| * ACCEPT : laisse passer le paquet et sort | * ACCEPT : laisse passer le paquet et sort | ||
| * DROP : jette le paquet et sort | * DROP : jette le paquet et sort | ||
| Line 66: | Line 66: | ||
| * REJECT : jette le paquet en prévenant la machine source avec une paquet ICMP Port unreachable par défaut ; cela peut être modifié avec la directive '' | * REJECT : jette le paquet en prévenant la machine source avec une paquet ICMP Port unreachable par défaut ; cela peut être modifié avec la directive '' | ||
| - | Il est conseillé de faire du DROP sur la patte publique et du REJECT coté LAN utilisateurs pour les prévenir | + | Il est conseillé de faire du DROP sur la patte publique et du REJECT coté LAN utilisateurs pour les prévenir |
| - | -t filter : option par défaut si aucune table n'est spécifiée. | + | '' |
| * Liées aux modules | * Liées aux modules | ||
| + | <code bash> | ||
| + | --sport port source | ||
| + | --dport port destination | ||
| + | --icmp-type identifie un paquet ICMP (echo-reply echo-request) | ||
| + | </ | ||
| - | --sport port source | ||
| - | --dport port destination | ||
| - | --icmp-type identifie un paquet ICMP (echo-reply echo-request) | ||
| + | =====Les extensions===== | ||
| + | <code bash> | ||
| + | Module | ||
| + | mac Vérifie que l' | ||
| + | state Active l' | ||
| + | limit Définit une limite sur le flux --limit, --limit-burst | ||
| + | owner Essaie de trouver des correspondances dans le créateur du paquet --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner sessionid | ||
| + | unclean Plusieurs tests de vérification aléatoires du bon état des paquets | ||
| + | </ | ||
| - | =====Les extensions===== | + | Pour lister les extensions chargées : '' |
| + | ====cstate / conntrack==== | ||
| - | | + | |
| - | mac Vérifie que l' | + | |
| - | | + | * il existe un outil en CLI qui permet de manipuler les tables de session : **conntrack** |
| - | limit Définit | + | <code bash> |
| - | | + | # afficher les connexions SSH ouvertes |
| - | | + | conntrack |
| + | |||
| + | # lister | ||
| + | conntrack -E | ||
| + | |||
| + | # supprimer | ||
| + | conntrack | ||
| + | </ | ||
| + | | ||
| + | ====multiport==== | ||
| + | |||
| + | Permet | ||
| + | <code bash> | ||
| + | # Ouverture des ports web/HTTPx | ||
| + | $IPTABLES | ||
| + | # ex2: ouverture des ports 80 et 8080 à 8099 | ||
| + | $IPTABLES | ||
| + | </ | ||
| =====Redirection (SNAT, MASQUERADE, DNAT)===== | =====Redirection (SNAT, MASQUERADE, DNAT)===== | ||
| - | **SNAT** : mis en place dans la chaine POSTROUTING, sert à masquer un réseau privé (par exemple mis en place sur les *box). Il remplace les IPs sources | + | Le *NAT est un mécanisme qui permet de modifier à la volée les adresses et/ou numéros de ports sur un routeur, qui conservera l' |
| - | Exemple de SNAT : | + | Pour les exemples qui suivent, voici un réseau privé (LAN) connecté à internet par une passerelle (ROUTEUR) : |
| + | <code bash> | ||
| + | ( INTERNET )----(eth0 | ||
| + | \_1.2.3.4 | ||
| + | \____serveur1 192.168.0.1 /24 | ||
| + | \____serveur2 192.168.0.2 /24 | ||
| + | \____PCs clients 192.168.0.*/ | ||
| + | </ | ||
| + | |||
| + | **SNAT** : mis en place dans la chaine POSTROUTING, | ||
| + | |||
| + | Cela va être utile dans notre exemple pour permettre à tous les équipements d' | ||
| <code bash> | <code bash> | ||
| iptables -t NAT -A POSTROUTING -j SNAT --to-source 1.2.3.4 | iptables -t NAT -A POSTROUTING -j SNAT --to-source 1.2.3.4 | ||
| </ | </ | ||
| - | **MASQUERADE** : permet à iptables d' | + | **MASQUERADE** : permet à iptables d' |
| - | Exemple de MASQUERADE : | ||
| <code bash> | <code bash> | ||
| iptables -t NAT -A POSTROUTING -o eth0 -j MASQUERADE | iptables -t NAT -A POSTROUTING -o eth0 -j MASQUERADE | ||
| </ | </ | ||
| - | **DNAT** : permet de modifier les IPs destinations, | + | **DNAT** : permet de modifier les IPs destinations, |
| - | Exemple de DNAT avec répartition de charge sur 2 serveurs : | + | Exemple de DNAT avec répartition de charge sur nos 2 serveurs : |
| <code bash> | <code bash> | ||
| - | iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT --to-dest | + | iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT --to-dest |
| </ | </ | ||
| Exemple de redirection du trafic HTTP et HTTPS vers un serveur mandataire (port 3128) : | Exemple de redirection du trafic HTTP et HTTPS vers un serveur mandataire (port 3128) : | ||
| - | + | <code bash> | |
| - | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest proxyhost: | + | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest proxyhost: |
| - | iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost: | + | iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost: |
| + | </ | ||
| =====Exemples===== | =====Exemples===== | ||
| Line 171: | Line 210: | ||
| service iptables save | service iptables save | ||
| # sous d' | # sous d' | ||
| - | iptables-save | + | iptables-save |
| + | # NB : pour les recharger ensuite | ||
| + | iptables-restore < / | ||
| </ | </ | ||
| Line 445: | Line 486: | ||
| =====Divers===== | =====Divers===== | ||
| - | ====conntrack==== | ||
| - | |||
| - | Conntrack est un logiciel qui permet de récupérer et modifier la table de sessions ouvertes depuis l' | ||
| - | |||
| - | Pour récupérer la table des sessions ouvertes : | ||
| - | cat / | ||
| - | | ||
| - | Pour supprimer une session : | ||
| - | conntrack -D -s 82.134.19.16 -d 192.168.2.1 -p tcp --orig-port-src 22 --orig-port-dst 55098 | ||
| ====Classer les logs iptables dans un seul fichier==== | ====Classer les logs iptables dans un seul fichier==== | ||
| Line 476: | Line 508: | ||
| * [[http:// | * [[http:// | ||
| + | |||
| + | ====Rotation des logs==== | ||
| + | |||
| + | Pour archiver les logs d' | ||
| + | <code bash> | ||
| + | / | ||
| + | # tourner tous les jours | ||
| + | daily | ||
| + | missingok | ||
| + | notifempty | ||
| + | # compresser les archives | ||
| + | compress | ||
| + | # ne pas archiver l' | ||
| + | delaycompress | ||
| + | # suffixer par la date | ||
| + | dateext | ||
| + | create 0600 root root | ||
| + | # redémarrer le syslog pour qu'il écrire dans le nouveau fichier après la rotation | ||
| + | postrotate | ||
| + | #/ | ||
| + | # ou | ||
| + | / | ||
| + | endscript | ||
| + | } | ||
| + | </ | ||
| =====Liens===== | =====Liens===== | ||
| * [[http:// | * [[http:// | ||
| + | * [[https:// | ||
informatique/linux/netfilter.1356025122.txt.gz · Last modified: 2013/10/14 20:54 (external edit)