Le filtrage réseau — iptables et nftables
Netfilter, iptables, nftables
Sous Linux, le filtrage est assuré par le framework Netfilter dans le noyau. On le pilote historiquement avec iptables, aujourd'hui remplacé par nftables (plus simple et unifié). Des surcouches comme ufw (Ubuntu) ou firewalld (RHEL) simplifient encore la configuration.
Les chaînes
Le trafic traverse des chaînes selon sa direction :
| Chaîne | Trafic concerné |
|---|---|
| INPUT | destiné à la machine elle-même |
| OUTPUT | émis par la machine |
| FORWARD | qui traverse la machine (routage entre interfaces) |
Politique par défaut : tout interdire
La bonne pratique est le deny by default : on bloque tout, puis on autorise explicitement le nécessaire.
iptables -P INPUT DROP # politique par défaut : rejeter
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT # autoriser la boucle locale
Le filtrage à état (conntrack)
Netfilter suit l'état des connexions (module conntrack). On autorise ainsi
d'un coup tous les paquets retour d'une session déjà établie :
# Autoriser les connexions déjà établies et leurs paquets liés
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Ouvrir uniquement le SSH entrant
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Sans le suivi d'état, il faudrait ouvrir manuellement les ports de retour — bien plus fragile.
La syntaxe nftables
nftables regroupe tout dans des tables et chaînes typées :
nft add rule inet filter input tcp dport 22 accept
nft add rule inet filter input ct state established,related accept
💡 Ordre des règles = priorité : elles sont évaluées de haut en bas, la première qui correspond s'applique. Place les règles les plus spécifiques avant les règles générales, et n'oublie jamais d'autoriser
loet l'étatESTABLISHEDsous peine de te couper toi-même.