Comprendre et configurer iptables : tables, chaînes, règles de filtrage, NAT, logging et persistance des règles.
iptables est l'outil historique de filtrage de paquets sous Linux. Il permet de contrôler précisément le trafic réseau en définissant des règles dans des chaînes (INPUT, OUTPUT, FORWARD) organisées en tables (filter, nat, mangle). C'est le pare-feu le plus puissant et flexible disponible sur Linux.
| Table | Rôle | Chaînes |
|---|---|---|
| filter | Filtrage de paquets (par défaut) | INPUT, FORWARD, OUTPUT |
| nat | Translation d'adresses (NAT/PAT) | PREROUTING, OUTPUT, POSTROUTING |
| mangle | Modification des paquets (QoS, TTL) | Toutes les chaînes |
# Afficher les règles avec numéros de ligne
sudo iptables -L -n -v --line-numbers
# Afficher les règles NAT
sudo iptables -t nat -L -n -v
# Supprimer toutes les règles
sudo iptables -F
# Supprimer les chaînes personnalisées
sudo iptables -X
# Réinitialiser les compteurs
sudo iptables -Z
# 1. Autoriser le loopback (localhost)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# 2. Autoriser les connexions établies et associées
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. Autoriser SSH (port 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 4. Autoriser HTTP et HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 5. Autoriser le ping (ICMP)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 6. Autoriser DNS sortant
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# 7. Politique par défaut : bloquer tout le reste
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Activer temporairement
sudo sysctl -w net.ipv4.ip_forward=1
# Activer de façon permanente
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Partager la connexion Internet de eth0 vers le réseau interne
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Rediriger le port 8080 externe vers le port 80 d'un serveur interne
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
# Journaliser les paquets rejetés (avant la règle DROP)
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: " --log-level 4
# Voir les logs
sudo tail -f /var/log/syslog | grep "IPTABLES-DROP"
# Supprimer une règle par son numéro
sudo iptables -D INPUT 5
Par défaut, les règles iptables sont perdues au redémarrage. Pour les rendre permanentes :
# Installer le paquet
sudo apt install iptables-persistent -y
# Sauvegarder les règles actuelles
sudo netfilter-persistent save
# Les règles sont stockées dans :
# /etc/iptables/rules.v4 (IPv4)
# /etc/iptables/rules.v6 (IPv6)
# Exporter les règles
sudo iptables-save > /etc/iptables/rules.v4
# Importer les règles
sudo iptables-restore < /etc/iptables/rules.v4