User Tools

Site Tools


informatique:linux:netfilter

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:netfilter [2013/10/14 20:44] – modification externe 127.0.0.1informatique:linux:netfilter [2021/03/18 13:16] (current) – [multiport] pteu
Line 1: Line 1:
-{{tag>sécurité firewall iptables}} 
  
-======Netfilter======+======Netfilter / iptables======
  
 Netfilter est le firewall intégré au noyau Linux. Il s'utilise avec la commande ''iptables'' (ex ''ipchains''). Netfilter est le firewall intégré au noyau Linux. Il s'utilise avec la commande ''iptables'' (ex ''ipchains'').
Line 8: Line 7:
 =====Principe===== =====Principe=====
  
-{{http://upload.wikimedia.org/wikipedia/fr/thumb/3/3e/Netfilter_schema.png/411px-Netfilter_schema.png}}+{{ :informatique:linux:netfilter-packet-flow.svg.png?direct |}}
  
  
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'adresses
   * 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'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/masque de source (ex: 192.168.0.0/24)
 +-d Adresse/masque de destination
 +-i Interface réseau d'entrée (nom ethernet)
 +-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'adresses
 +-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'après
 +-V Version du paquet
 +--line-numbers Affiche les numéros de ligne
 +</code>
  
-  Option : Description : +''-j [ACCEPT | DROP | LOG | REJECT]''
-  -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/masque de source (ex: 192.168.0.0/24) +
-  -d Adresse/masque de destination +
-  -i Interface réseau d'entrée (nom ethernet) +
-  -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'adresses +
-  -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'après +
-  -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-with tcp-reset'' en TCP.   * 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-with tcp-reset'' en TCP.
  
-Il est conseillé de faire du DROP sur la patte publique et du REJECT coté LAN utilisateurs pour les prévenir di filtrage.+Il est conseillé de faire du DROP sur la patte publique et du REJECT coté LAN utilisateurs pour les prévenir du filtrage.
  
--t filter : option par défaut si aucune table n'est spécifiée.+''-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)
 +</code>
  
-  --sport port source 
-  --dport port destination 
-  --icmp-type identifie un paquet ICMP (echo-reply echo-request) 
  
 +=====Les extensions=====
  
 +<code bash>
 +Module  Description  Options étendues
 +mac Vérifie que l'extension correspond pour les paquets entrants sur une adresse mac. --mac-source
 +state Active l'inspection des états --state (les états sont ESTABLISHED,RELATED, INVALID, NEW)
 +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
 +</code>
  
-=====Les extensions=====+Pour lister les extensions chargées : ''cat /proc/net/ip_tables_matches'' 
 +====cstate / conntrack====
  
-  Module  Description  Options étendues +  * Remplace l'extension state 
-  mac Vérifie que l'extension correspond pour les paquets entrants sur une adresse mac. --mac-source +  * On peut voir l'état des connexions avec : ''cat /proc/net/ip_conntrack'' 
-  state Active l'inspection des états --state (les états sont ESTABLISHED,RELATED, INVALID, NEW) +  * il existe un outil en CLI qui permet de manipuler les tables de session : **conntrack** 
-  limit Définit une limite sur le flux --limit, --limit-burst +<code bash> 
-  owner Essaie de trouver des correspondances dans le créateur du paquet --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner sessionid +# afficher les connexions SSH ouvertes 
-  unclean Plusieurs tests de vérification aléatoires du bon état des paquets+conntrack --p tcp --dport 22 
 + 
 +# lister les événements de conntrack en temps réel 
 +conntrack -E 
 + 
 +# supprimer une session ouverte : 
 +conntrack -D -s 82.134.19.16 -d 192.168.2.1 -p tcp --orig-port-src 22 --orig-port-dst 55098 
 +</code> 
 +   
 +====multiport==== 
 + 
 +Permet de spécifier une liste de ports non-contigüs et donc de limiter le nombre de ligne de conf. 
 +<code bash> 
 +# Ouverture des ports web/HTTPx 
 +$IPTABLES -A INPUT -p tcp --match multiport --dports 80,443,8080,8443 -j ACCEPT 
 +# ex2: ouverture des ports 80 et 8080 à 8099 
 +$IPTABLES -A INPUT -p tcp -m multiport --dports 80,8080-8099 -j ACCEPT 
 +</code>
  
  
 =====Redirection (SNAT, MASQUERADE, DNAT)===== =====Redirection (SNAT, MASQUERADE, DNAT)=====
  
-**SNAT** : mis en place dans la chaine POSTROUTINGsert à masquer un réseau privé (par exemple mis en place sur les *box). Il remplace les IPs sources des paquets sortants.+Le *NAT est un mécanisme qui permet de modifier à la volée les adresses et/ou numéros de ports sur un routeurqui conservera l'état des translations dans une table de sessions.
  
-Exemple de SNAT :+Pour les exemples qui suivent, voici un réseau privé (LAN) connecté à internet par une passerelle (ROUTEUR) : 
 +<code bash> 
 +( INTERNET )----(eth0     ROUTEUR    eth1)----( LAN ) 
 +                \_1.2.3.4    192.168.0.9_/    192.168.0.0/24 
 +                                              \____serveur1 192.168.0.1 /24 
 +                                              \____serveur2 192.168.0.2 /24 
 +                                              \____PCs clients 192.168.0.*/24 
 +</code> 
 + 
 +**SNAT** mis en place dans la chaine POSTROUTING, sert à masquer un réseau privé (c'est le cas de toutes les *box internet). Il remplace les IPs sources des paquets sortants. 
 + 
 +Cela va être utile dans notre exemple pour permettre à tous les équipements d'aller sur internet en remplaçant leurs IPs sources locales (192.168.0.*) par l'IP publique (1.2.3.4) du routeur.
 <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
 </code> </code>
  
-**MASQUERADE** : permet à iptables d'aller chercher seul l'IP de l'interface réseau spécifiée.+**MASQUERADE** : permet à iptables d'aller chercher seul l'IP de l'interface réseau spécifiée. C'est l'équivalent du SNAT sans avoir besoin de spécifier, en dur, l'IP translatée.
  
-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
 </code> </code>
  
-**DNAT** : permet de modifier les IPs destinations, par exemple en partageant une IPs publique pour différents services hébergés sur des serveurs adressés en IPs privées. Ca peut être utilisé aussi pour du partage de charge, en faisant du RR sur plusieurs serveurs qui hébergent le même service.+**DNAT** : permet de modifier les IPs destinations, par exemple en partageant une IP publique pour différents services hébergés sur des serveurs adressés en IPs privées. Ça peut être utilisé aussi pour du partage de charge, en faisant du RR sur plusieurs serveurs qui hébergent le même service.
  
-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 serveur1 --to-dest serveur2+iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT --to-dest 192.168.0.1 --to-dest 192.168.0.2
 </code> </code>
  
 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:3128 +iptables -t nat -A PREROUTING -p tcp --dport 80  -j DNAT --to-dest proxyhost:3128 
-  iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost:3128 +iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost:3128 
 +</code>
  
 =====Exemples===== =====Exemples=====
Line 171: Line 210:
 service iptables save service iptables save
 # sous d'autres systèmes (e.g. Debian) # sous d'autres systèmes (e.g. Debian)
-iptables-save+iptables-save > /etc/iptables-dump 
 +# NB : pour les recharger ensuite 
 +iptables-restore < /etc/iptables-dump
 </code> </code>
  
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'espace utilisateur. 
- 
-Pour récupérer la table des sessions ouvertes : 
-  cat /proc/net/ip_conntrack 
-   
-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://wiki.rsyslog.com/index.php/Configuration_Samples|wiki rsyslog]]   * [[http://wiki.rsyslog.com/index.php/Configuration_Samples|wiki rsyslog]]
  
 +
 +====Rotation des logs====
 +
 +Pour archiver les logs d'iptables régulèrement, créer le fichier ''/etc/logrotate.d/iptables'' :
 +<code bash>
 +/var/log/iptables.log {
 +# tourner tous les jours
 +daily
 +missingok
 +notifempty
 +# compresser les archives
 +compress
 +# ne pas archiver l'archive la plus récente
 +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
 +    #/etc/rc.d/init.d/rsyslog restart ; sleep 5
 +    # ou
 +    /usr/lib/rsyslog/rsyslog-rotate
 +endscript
 +}
 +</code>
 =====Liens===== =====Liens=====
  
   * [[http://www.netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO.txt|Documentation officielle : HOWTO]]   * [[http://www.netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO.txt|Documentation officielle : HOWTO]]
 +  * [[https://help.ubuntu.com/community/IptablesHowTo|Ubuntu's iptables HOWTO]]
informatique/linux/netfilter.1381783498.txt.gz · Last modified: 2016/10/08 12:41 (external edit)