Linux

iptables — Pare-feu avancé Linux

Comprendre et configurer iptables : tables, chaînes, règles de filtrage, NAT, logging et persistance des règles.

← Retour aux tutoriels Linux
📚 C'est quoi iptables ? 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.
ⓘ Prérequis Un serveur Debian/Ubuntu avec accès root — Connexion SSH active (attention à ne pas se bloquer !).

Comprendre l'architecture

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

Logique de traitement

  • INPUT — Paquets entrants destinés au serveur
  • OUTPUT — Paquets sortants générés par le serveur
  • FORWARD — Paquets traversant le serveur (routage)

Commandes de base

Voir les règles actuelles

# 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

Vider toutes les règles (remise à zéro)

# Supprimer toutes les règles
sudo iptables -F

# Supprimer les chaînes personnalisées
sudo iptables -X

# Réinitialiser les compteurs
sudo iptables -Z

Configurer un pare-feu sécurisé

⚠ Ordre important Ajoutez toujours la règle SSH avant de changer la politique par défaut à DROP, sinon vous perdez l'accès !
# 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

Règles avancées : NAT et redirection

Activer le routage IP

# 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

SNAT / Masquerade (partage de connexion)

# Partager la connexion Internet de eth0 vers le réseau interne
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

DNAT (redirection de port)

# 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

Logging et débogage

# 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

Rendre les règles persistantes

Par défaut, les règles iptables sont perdues au redémarrage. Pour les rendre permanentes :

Avec iptables-persistent (Debian/Ubuntu)

# 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)

Restaurer manuellement

# Exporter les règles
sudo iptables-save > /etc/iptables/rules.v4

# Importer les règles
sudo iptables-restore < /etc/iptables/rules.v4
✔ Résultat Votre serveur est protégé par un pare-feu iptables configuré avec les bonnes pratiques : politique DROP par défaut, seuls les ports nécessaires autorisés, et les règles persistent au redémarrage.