Liens conseillés

4- Les commandes de Netfilter

4.1- Liste des principales commandes de Netfilter

4.1.1- -A

Permet d'ajoutter une règle à une chaine. Les règles sont appliquées aux paquets dans l'ordre ou elle sont ajoutées. Ex : iptables -A INPUT -j DROP On ajoute la règle à la chaine INPUT (donc pour tous les paquet arrivant de l'extérieur sur le firewall) avec la cible DROP (ignorer le paquet). Comme on a pas spécifié de condition, cette règle sera vraie pour chaque paquet qui la rencontrera.

4.1.2) -D

Supprimer une règle. On donne soit sont numero dans la chaine (commence à 1), soit on donne l'expression qui a permit de l'ajouter. Ex : iptables -D INPUT -s 192.168.0.1 -j DROP Ex : iptables -D INPUT 1

4.1.3) -R

Remplace une regle d'une chaine par une autre. On spécifié le numéro de la chaine à remplacer. Ex : iptables -R INPUT 1 -dport 80 -j ACCEPT

4.1.4) -I

Insere une regle dans une chaine à l'endroit spécifié. Ex : iptables -I FORWARD 2 -s 172.16.1.1 -j DROP

4.1.5) -L

Permet de lister une chaine ou toutes. Ex : iptables -L OUTPUT

4.1.6) -F

Permet de vider une chaine des ses regles. Ex : iptables -F INPUT

4.1.7) -N

Pour créer ses propres chaines. Ex : iptables -N verif_flags

4.1.8) -X

Supprime une chaine qu'on a crée. Elle ne doit plus comporter de regles. Ex : iptables -X verif_flags

4.1.9) -P

Permet de regler le comportement par defaut des règles INPUT, OUTPUT et FORWARD.

4.1.10) -E

Pour renommer une chaine.

4.2) Les conditions (matches)

Il y en a beaucoup. La majorité des modules supplémentaires qu'on a compilé on rajouté leur condition en plus des conditions dejà existantes. La majorité de ces conditions peuvent etre précedées du signe !p our spécifier l'opposé. Les plus courantes sont:

4.2.1) -p

Pour spécifier le protocole. Ex : iptables -A INPUT -p tcp (que tcp) Ex : iptables -A INPUT -p ! icmp (tout sauf icmp)

4.2.2) -s

Ip source

4.2.3) -d

Ip de destination

4.2.4) -i

Interface réseau sur laquelle arrive le paquet (a utiliser avec INPUT, FORWARD et PREROUTING)

4.2.5) -o

Interface réseau par laquelle le paquet sort (a utiliser avec OUTPUT, FORWARD et POSTROUTING)

4.2.6) -f

Pour les fragment (a partir du second). Peut utile quand on utilisera le connection tracking car il réassemble les packets.

4.3- Conditions implicites

Quand on utilise certaines conditions comme le protocole, il y a d'autres conditions dépendantes de la prémier qui peuvent etre vérifiées.

Conditions pour TCP

4.3.1) -sport

Port source. Ex : iptables -A INPUT -p tcp -sport 22 -j ACCEPT

4.3.2) -dport

Port destination.

4.3.3) -tcp-flags

Permet de vérifier les flag SYN, ACK, FIN, RST, URG, PSH et definit les raccourcits NONE et ALL. Ex : iptables -p tcp -tcp-flags SYN,ACK,FIN,RST SYN On regarde les flags SYN, ACK, FIN et RST et on veut uniquement le flag SYN à 1.

Conditions pour UDP

4.3.4) -sport

Port source.

4.3.5) -dport

Port destination.

Conditions pour ICMP

4.3.6) -icmp-type

Permet de vérifier le type de message icmp.

5- Autres conditions

Ce sont des conditions définies dans les modules supplémentaires. On les charge souvent avec le paramètre -m suivit du nom de la condition.

5.0.1) -mac-source

Permet de verifier l'adresse MAC. Ex : iptables -A INPUT -mac-source 00:00:EF:6A:42:42 -j ACCEPT

La condition limit :D

5.0.2) -limit

Permet de spécifier un taux à la seconde, a la minute, a l'heure ou meme par jour. Ex : iptables -A INPUT -m limit 5/second -j ACCEPT

5.0.3) -limit-burst

Permet de verifier un nombre initial de packets avant que la limit ne s'applique. Si il est dépassé et que la limite à etes dépassée, il sera rechargé des que la limite n'est plus dépassé. Parfait pour eviter les floods.

La condition state

5.0.4) -state

Permet de verifier l'état d'une connexion (si elle est nouvelle, déjà établie, non valide ou en relation avec une autre). Les différents états sont INVALID, ESTABLISHED, NEW et RELATED. Attention, NEW ne verifie pas le flag SYN ... Ex : iptables -A INPUT -m state -state RELATED, ESTABLISHED -j ACCEPT

5.1- Les cibles

5.1.1) La cible ACCEPT

Laisse passer le paquet vers sa destination.

5.1.2) La cible DROP

Ignore un paquet (il est détruit et aucun message icmp d'erreur n'est généré)

5.1.3) La cible RETURN

Si cette cible est dans une sous chaine, le paquet sort de celle-ci et remonte dans la chaine suppérieure comme si il avait passé la chaine qui l'a envoyé dans la sous chaine. Cela permet d'optimiser les regles. Si cette cible est spécifié dans une chaine principale, la décision par défaut de la chaine est prise sur ce paquet.

5.1.4) La cible LOG

Permet de journaliser les paquets qui atteignent cette cible. Pratique pour surveiller et pour tester les regles.

5.1.5) La cible REJECT

Detruit le paquet et envoie un message d'erreur ICMP Host Unreachable à la source.

5.1.6) La cible SNAT

Permet de remplacer l'adresse source par l'une (au hasard) des adresse routables spécifiées. Ex : iptables -t nat -A POSTROUTING -o eth0 -j SNAT -to-source 194.236.50.155-194.236.50.160:1024-32000

5.1.7) La cible MASQUERADE

Meme principe que pour le SNAT mais on a pas à spécifier d'adresses. Ex : iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE

5.1.8) La cible DNAT

Permet de faire du port forwarding et une forme de load balancing Ex : iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 -dport 80 -j DNAT -to-destination 192.168.1.1-192.168.1.10

5.1.9) La cible REDIRECT

Pour rediriger un port vers un autre en local Ex : iptables -t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT -to-ports 8080
Il existe beaucoup d'autres cibles, nous les découvrirons un peu plus tard.