Prise en main de NetFilter

Les principales commandes

Note

Il faut préciser que lorsque l'on n'indique pas explicitement la table sur laquelle on veut travailler, avec l'option -t <nom de la table>, les commandes s'appliquent par défaut sur la table Filter.

  • -L ou --list : permet d'afficher les règles.

    # Affiche toutes les règles de toutes les chaînes de FILTER.
    #iptables -L
    # Affiche toutes les règles de la chaîne INPUT.
    #iptables -L INPUT
    
  • -A ou --append : ajoute une règle à la fin de la chaîne spécifiée.

    #iptables -A INPUT <règle à ajouter>.
    
  • -D ou --delete : permet de supprimer les règles d'une chaîne. Si l'on n'indique pas la règle à supprimer, toutes les règles de la chaîne seront enlevées. Dans le cas contraire, on peut soit spécifier la position de la règle à supprimer, soit indiquer directement la règle.

    # On supprime les règles appliquées a la chaîne INPUT.
    #iptables -D INPUT
    
    # On supprime la règle n°1 de la chaîne INPUT.
    #iptables -D INPUT 1
    # On supprime la règle --dport 80 -j DROP de la chaîne INPUT.
    #iptables -D INPUT --dport 80 -j DROP
    
  • -I ou --insert : permet d'ajouter une règle dans à une position spécifiée de la chaîne. Si la position n'est pas spécifiée, la règle sera ajoutée à la fin de la chaîne.

    # La règle --dport 80 -j ACCEPT sera la deuxième règle de la
    # chaîne INPUT.
    #iptables -I INPUT 2 --dport 80 -j ACCEPT
    # La règle --dport 80 -j ACCEPT sera ajoutée à la fin de la
    # chaîne INPUT.
    #iptables -I INPUT --dport 80 -j ACCEPT
    
  • -R ou --replace : permet de remplacer une règle dans une chaîne, à la position spécifiée.

    # remplace la première règle de la chaîne INPUT
    # par -s 192.168.0.1 -j DROP.
    #iptables -R INPUT 1 -s 192.168.0.1 -j DROP
    
  • -F ou --flush : permet de vider toutes les règles d'une chaîne, ou de supprimer toutes les chaînes.

    # supprime toutes les règles d'une chaîne.
    #iptables -F INPUT
    # supprime toutes les chaînes et les règles associées.
    #iptables -F
    
  • -N ou --new : permet de créer une nouvelle chaîne utilisateur.

    # LOG_DROP est le nom de la nouvelle chaîne utilisateur.
    #iptables -N LOG_DROP
    
  • -X ou --delete-chain : Permet d'effacer une chaîne utilisateur, ou toutes les chaînes utilisateur.

    # supprime la chaîne LOG_DROP.
    #iptables -X LOG_DROP
    # supprime toutes les chaînes utilisateur.
    #iptables -X
    
  • -P ou --policy : permet de spécifier au noyau la cible par défaut d'une chaîne : DENY, ACCEPT, REJECT, DROP, etc.

    # par défaut, on supprimera tous les paquets passant par INPUT.
    #iptables -P INPUT DROP
    

Les principales options

  • -j ou --jump : passe directement à la cible spécifiée (DROP, ACCEPT, RESET, ...) lorsqu'un paquet correspond à une règle.

    #iptables -A INPUT <règle> -j DROP
    
  • -p ou --protocol : spécifie un protocole : tcp, udp, icmp, all (tous).

    # les paquets utilisant le protocole ICMP seront supprimés.
    #iptables -A INPUT -p icmp -j DROP
    
  • -s ou --source : spécifie une adresse source.

    # si le paquet utilise TCP et que son adresse IP source
    # est 192.168.22.42 alors on l'accepte.
    #iptables -A INPUT -p tcp -s 192.168.22.42 -j ACCEPT
    
  • -d ou --destination : spécifie une adresse destination.

    # les paquets UDP traversant l'ordinateur
    # vers 10.1.0.1 sont acceptés.
    #iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT
    
  • -i ou --in-interface : spécifie une interface d'entrée.

    # les paquets icmp arrivant sur eth0 seront supprimés.
    #iptables -A INPUT -p icmp -i eth0 -j DROP
    
  • -o ou --out-interface : spécifie une interface de sortie.

    # les paquets icmp sortant par eth0 seront supprimés.
    #iptables -A OUTPUT -p icmp -o eth0 -j DROP
    
  • -f ou --fragment : spécifie si le paquet est fragmenté.

    # si le paquet est fragmenté alors il sera supprimé.
    #iptables -A INPUT -p icmp -f -j DROP
    
  • --sport ou --source-ports : spécifie le port source ou une plage de ports. Fonctionne en TCP et UDP.

    # accepte les paquets en provenance du port 80 en TCP.
    #iptables -A INPUT -p tcp --sport 80 -j ACCEPT
    # droppe les paquets en provenance du port 80 en UDP.
    #iptables -A INPUT -p udp --sport 80 -j DROP
    

    -m multiport permet de spécifier une liste de ports.

    # supprime les paquets en provenance des ports spécifiés.
    #iptables -A OUTPUT -p tcp -m multiport --sport 21,1000 -j DROP
    # accepte les paquets en provenance des ports compris entre
    # 1024 et 2042.
    #iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT
    
  • --dport ou --destination--ports : spécifie le port destination ou une plage de ports. Fonctionne en TCP/UDP.

    #iptables -A INPUT -p tcp --dport 110 -j DROP
    #iptables -A INPUT -p udp --dport 110 -j DROP
    

    -m multiport permet de spécifier plusieurs ports.

    #iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 \
    -j DROP
    #iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT
    
  • --tcp-flags : spécifie les flags TCP : SYN ACK FIN RST URG PSH ALL NONE.

    # accepte les paquets qui ont les flags SYN et ACK.
    #iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK \
    -j ACCEPT
    
  • --icmp-type : spécifie un type de paquet icmp (la liste des types est accessible avec la commande : iptables -p icmp -h).

    # ici le type any permettra de supprimer tous les paquets ICMP.
    #iptables -A INPUT -p icmp --icmp-type any -j DROP
    
  • --mac-source : spécifie l'adresse MAC.

    #iptables -A INPUT --mac-source 00.DE.AD.BE.EF.00 -j DROP
    
  • --state : permet de spécifier l'état du paquet, parmi les suivants :

    • ESTABLISHED : paquet associé à une connexion déjà établie.

    • NEW : paquet demandant une nouvelle connexion.

    • INVALID : paquet associé à une connexion inconnue.

    • RELATED : nouvelle connexion mais liée, idéal pour les connexions FTP.

    #iptables -A INPUT -i eth0 -p tcp --dport 80 -m state \
    --state NEW,ESTABLISHED -j ACCEPT
    #iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state \
    --state ESTABLISHED -j ACCEPT