Petit guide du filtrage paquets sous Linux

Qu'est-ce qu'un filtre de paquets ?

A. C'est un programme qui regarde l'en-tête des paquets qui passent et décide du sort qui les attend.

B. Pour quoi faire ?

i. Contrôle des ports ouverts ii. Sécurité par la limitation et la manipulation des informations dans le paquet iii. Prévention de l'envoi de paquets indésirables

C. Cas du filtrage sous linux

Entrée --> [Décision de routage] -------> [Foward] -------> Sortie
                 |                           ^
                 v                           |
              INPUT -- Processus local --> OUTPUT

ii cibles ACCEPT DROP

D. Chaînes et et chaînes par défaut INPUT OUTPUT FORWARD On peut créer ses propres chaînes

E. Règles

Chaque chaîne contient des règles qui sont testées successivement pour chaque paquet, dès qu'une règle envoi le paquet sur la cible ACCEPT, celui-ci est envoyé, sinon il continue de se comparer aux règles. Si aucune ne convient, il utilise la décision par défaut de la chaîne (généralement DROP).

Manipulation des chaînes

  • Créer une nouvelle chaîne : iptables -N chaine
  • effacer une chaîne vide : iptables -X chaine
  • Changer la règle par défaut pour une chaîne de départ : iptables -P chaine police exemple : iptables -P INPUT DROP --> par défaut DROP tous les paquets qui arrivent sur la machine
  • Lister toutes les règles: iptables -L chaine
  • Retirer les règles d'une chaîne : iptables -F chaine

Manipulation des règles dans les chaînes

  • Ajout d'une règle dans une chaîne : iptables -A chaine règle Supprimer une règle dans une chaîne : iptables -D chaine règle

exemple : `iptables -A INPUT -i eth0 -p tcp -dport 135 -j DROP Détruit tous les paquets arrivant de l'interface eth0 à destination du port 135 du firewall lui-même.

Contenu d'une règle

  • Source et Destination : (-s et -d)
    exemple: iptables -A FOWARD -s 172.16.23.6 -j DROP détruit tous les paquets que voit le firewall dont l'adresse source est 172.16.23.6.
  • Protocole (p proto)
  • Inversion : (ex: -p ! proto, -i ! eth0, -s ! 172.16.0.0/16)
  • Interface (-i eth0, -o eth0)
  • Extensions:
    • --tcp-flags [list] [flags] ex: --tcp-flags ALL SYN,ACL (SYN, ACK, FIN, RST, URG, PSH, NONE)
    • --syn
    • --sport xx << port source du packet
    • -dport xx << Port de destination du paquet
  • Autres Extensions, les modules On les charge avec : -m module extensions_module
    • mac (--mac-source) exemple : iptables -A -i eth0 -o eth1 -s 172.16.23.6 -m mac -mac-source 00:50:bacffc:dd -j DROP Coupe tous les paquets provenant de l'interface eth0 à destination de eth1 provenant de l'IP de peck et dont l'adresse MAC est aussi celle de peck (NDR: peck est surement un ancien admin ResEl).
    • limit (--limit 5/s /m /h)
    • state (Connection Tracking, ou suivi des connexions) -m state --state NEW / ESTABLISHED / RELATED /INVALID) exempleiptables -A FORWARD -i eth1 -o eth0 -d 172.16.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT` Accepte tous les paquets provenant de eth1 à destination de l'interface eth0, dont l'ip de destination fait partie du sous réseau 172.16.0.0 et qui correspond à une réponse sur une connexion déjà établie ou bien une connexion liée à une connexion déjà établie.

ATTENTION ! Le fowarding sous linux ne fonctionne que si le sysctl correspondant prend la valeur 1 :

echo 1 > /proc/sys/net/ipv4/ip_forward

Network Address Translation (NAT)

Permet d'altérer le header du paquet : ip/port source/destination

SNAT : altère la source du paquet

S'effectue généralement après le routage.

Chaine pour le SNAT : POSTROUTING

Pour la création des règles : utiliser explicitement de la table NAT t nat

Exemple SNAT

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.44.76.8

Cas particulier du MASQUERADING

  • Détection automatique de l'ip externe (utile si dynamique)
  • coupe toutes les connexions lors d'une coupure de l'ip externe (dynamique), au lieu de les laisser en timeout.

NNAT : altère la destination du paquet

S'effectue généralement avant le routage

Chaines pour le DNAT :

PREROUTING
OUTPUT

Exemple DNAT :

iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 172.16.23.45
Change l'adresse de destination de tous les paquets arrivants sur l'interface de eth1 pour l'adresse 172.16.23.45 (adresse du rédacteur initial)

Exemple DNAT avec PortForwarding

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 172.16.23.45:8080
Change l'adresse destination ainsi que le port de destination.

Pour plus de détails

N'hésitez pas à consulter :

Milton YATES pour le ResEl milton.yates@enst-bretagne.fr Octobre 2013

Mis à jour par Loïc CARR en Février 2017