Le pare-feu est la première ligne de défense de ton système. Sous Linux, iptables est l'outil historique pour filtrer le trafic réseau. Même si des outils plus récents comme nftables ou ufw existent, comprendre iptables reste essentiel pour maîtriser le fonctionnement des pare-feu sous Linux.
iptables organise les règles en chaînes. Chaque paquet réseau traverse ces chaînes et est examiné par les règles.
Quand un paquet correspond à une règle, une cible est appliquée :
ACCEPT : autoriser le paquetDROP : ignorer le paquet (sans réponse)REJECT : rejeter le paquet (avec message d'erreur)LOG : enregistrer le paquet dans les logssudo iptables -L -v -nExplication des options :
-L : afficher les règles-v : mode verbeux (afficher les compteurs)-n : ne pas résoudre les noms (afficher les IP, pas les noms de domaine)sudo iptables -L INPUT -v -n --line-numbersAffiche les règles de la chaîne INPUT avec les numéros de ligne.
sudo iptables -A INPUT -i lo -j ACCEPT-A INPUT ajoute une règle à la chaîne INPUT, -i lo targets l'interface loopback, -j ACCEPT accepte les paquets.
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-m state charge le module state, --state ESTABLISHED,RELATED cible les connexions déjà établies ou liées.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT-p tcp targets le protocole TCP, --dport 22 cible le port destination 22.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTsudo iptables -A INPUT -s 192.168.1.100 -j DROP-s spécifie l'adresse source.
sudo iptables -A INPUT -p tcp --dport 8080 -j REJECTsudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROPCette règle limite à 100 connexions simultanées sur le port 80.
sudo iptables -D INPUT 3Supprime la règle numéro 3 de la chaîne INPUT.
sudo iptables -F INPUT-F vide la chaîne INPUT.
sudo iptables -Fsudo iptables -R INPUT 5 -p tcp --dport 22 -j ACCEPTRemplace la règle 5 dans INPUT.
sudo iptables -I INPUT 1 -s 10.0.0.0/8 -j DROP-I INPUT 1 insère la règle en position 1 (au début).
Par défaut, toutes les chaînes acceptent tout. Pour changer :
sudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT ACCEPTAttention : si tu changes la politique INPUT en DROP sans avoir autorisé le trafic localhost et les connexions établies, tu risques de te retrouver bloqué hors de ta machine !
sudo iptables-save > /etc/iptables/rules.v4Sur Debian/Ubuntu, utilise plutôt :
sudo sh -c "iptables-save > /etc/iptables/rules.v4"sudo iptables-restore < /etc/iptables/rules.v4sudo service iptables saveCela sauvegarde automatiquement dans /etc/sysconfig/iptables.
#!/bin/bash# Flush existing rulessudo iptables -F# Default policiessudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT ACCEPT# Allow loopbacksudo iptables -A INPUT -i lo -j ACCEPT# Allow established connectionssudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# Allow SSHsudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT# Allow HTTP/HTTPSsudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTsudo iptables -L INPUT --line-numbers -nsudo iptables -A INPUT -j LOG --log-prefix "IPTables-DROP: " --log-level 4Les logs apparaîtront dans /var/log/syslog ou /var/log/messages selon ta distribution.
# Compteurs de règlessudo iptables -L -Z# Z = zero (remet les compteurs à zéro)# Voir les règles dans la chaîne OUTPUTsudo iptables -L OUTPUT -v -n| Option | Description |
|---|---|
-A | Ajouter une règle à la fin de la chaîne |
-I | Insérer une règle au début (ou à une position) |
-D | Supprimer une règle |
-R | Remplacer une règle |
-F | Vider toutes les règles d'une chaîne |
-L | Afficher les règles |
-P | Définir la politique par défaut |
-Z | Remettre les compteurs à zéro |
-N | Créer une nouvelle chaîne |
-X | Supprimer une chaîne vide |
-v | Mode verbeux |
-n | Ne pas résoudre les noms |
| Target | Comportement | Quand l'utiliser |
|---|---|---|
ACCEPT | Autorise le paquet | Pour le trafic voulu |
DROP | Ignore silencieusement | Pour bloquer sans révéler que le port est actif |
REJECT | Rejette avec un message (ICMP) | Pour informer explicitement |
LOG | Enregistre dans les logs | Pour le débogage |
-P INPUT DROP)-i lo -j ACCEPT)sudo iptables -L -v -n.