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)