Accueil

iptables : Configurer un Pare-feu sur Linux

Security
Difficulte: Intermediate
4 min de lecture

Tutoriel détaillé pour configurer iptables, le pare-feu du noyau Linux, afin de sécuriser votre système.

Retour aux tutoriels

L'essentiel

  • La stratégie sûre inverse la logique : iptables -P INPUT DROP et -P FORWARD DROP bloquent tout par défaut, -P OUTPUT ACCEPT laisse sortir, puis on rouvre explicitement les seuls ports utiles (22, 80, 443).
  • Avant de basculer INPUT en DROP, autorisez la boucle locale et les connexions déjà ouvertes : iptables -A INPUT -i lo -j ACCEPT puis iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT. Sans ces deux règles, vous coupez votre propre session SSH.
  • DROP contre REJECT : DROP jette le paquet sans réponse et laisse l'émetteur attendre son timeout, REJECT renvoie un ICMP port unreachable. DROP est préféré en sécurité parce qu'il ne révèle pas la présence du pare-feu.
  • Les règles ne survivent pas au redémarrage : sur Debian/Ubuntu, apt install iptables-persistent puis netfilter-persistent save ; sur CentOS/RHEL, iptables-save > /etc/sysconfig/iptables. Sauvegardez l'existant avec iptables-save > ~/iptables.bak avant tout flush.
  • L'ordre des règles décide du verdict : iptables -L -v -n --line-numbers affiche les numéros, iptables -D INPUT 5 supprime la cinquième, iptables -I INPUT 1 insère en tête. Gardez une seconde session ouverte pendant les tests et ne rendez les règles persistantes qu'une fois validées.
Qu'est-ce qu'iptables ?
iptables est un outil en ligne de commande qui permet à un administrateur système de configurer les tables de filtrage de paquets du noyau Linux, implémentées par le framework Netfilter. En d'autres termes, c'est l'interface pour gérer le pare-feu de votre machine Linux.

Pourquoi utiliser iptables ?

Même si des outils plus simples comme UFW ou firewalld existent, comprendre iptables est fondamental pour une maîtrise fine de la sécurité réseau sous Linux.

  • Contrôle granulaire : Permet de créer des règles très spécifiques basées sur les adresses IP, les ports, les protocoles, l'état de la connexion, etc.
  • Puissance : Offre des fonctionnalités avancées comme la traduction d'adresses réseau (NAT) et la modification de paquets (mangle).
  • Universel : Présent sur quasiment tous les systèmes Linux.

Les concepts de base : Chaînes et Tables

  • Tables : Un ensemble de chaînes. Les plus communes sont filter (par défaut, pour filtrer les paquets), nat (pour la traduction d'adresses) et mangle (pour la modification de paquets).
  • Chaînes (Chains) : Une liste de règles. Les paquets traversent les chaînes dans l'ordre. Les chaînes par défaut de la table `filter` sont :
    • INPUT : Pour les paquets destinés au serveur lui-même.
    • OUTPUT : Pour les paquets générés par le serveur.
    • FORWARD : Pour les paquets qui ne font que traverser le serveur (routage).
  • Règles (Rules) : Une condition (ex: "le paquet vient de l'IP 1.2.3.4") et une cible (ex: "DROP" - jeter le paquet).
  • Cibles (Targets) : L'action à effectuer si un paquet correspond à une règle. Les plus courantes sont ACCEPT (accepter), DROP (jeter silencieusement), REJECT (refuser avec une notification) et LOG (enregistrer l'événement).

Configuration de base sécurisée

La stratégie la plus sûre est de tout bloquer par défaut, puis d'autoriser explicitement ce qui est nécessaire.

Étape 1 : Sauvegarder les règles actuelles (si elles existent)

sudo iptables-save > ~/iptables.bak

Étape 2 : Vider toutes les règles existantes

sudo iptables -F  # Flush all rules
sudo iptables -X  # Delete all non-default chains
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Étape 3 : Définir les politiques par défaut (tout bloquer)

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # On fait confiance à ce qui sort de notre machine

Étape 4 : Autoriser les connexions déjà établies et le trafic local

Ceci est crucial pour ne pas couper votre propre session SSH et pour que les services puissent communiquer entre eux.

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Étape 5 : Autoriser les services nécessaires

N'ouvrez que ce dont vous avez besoin. Voici quelques exemples :

# Autoriser SSH (port 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Autoriser HTTP (port 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Autoriser HTTPS (port 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Votre pare-feu est actif !
À ce stade, votre serveur est protégé. Les connexions entrantes ne sont autorisées que sur les ports que vous avez explicitement ouverts.

Rendre les règles persistantes

Les règles iptables sont perdues au redémarrage. Pour les sauvegarder, la méthode dépend de votre distribution.

# Sur Debian / Ubuntu
sudo apt-get install -y iptables-persistent
# Le paquet vous demandera de sauvegarder les règles actuelles.
# Pour sauvegarder manuellement plus tard :
sudo netfilter-persistent save

# Sur CentOS / RHEL
sudo service iptables save
# ou
sudo /sbin/iptables-save > /etc/sysconfig/iptables

Commandes utiles

# Lister les règles de la table filter
sudo iptables -L -v -n --line-numbers

# Supprimer une règle de la chaîne INPUT par son numéro (ex: numéro 5)
sudo iptables -D INPUT 5

# Insérer une règle au début de la chaîne INPUT
sudo iptables -I INPUT 1 -p tcp --dport 2222 -j ACCEPT
Testez avant de sauvegarder !
Lorsque vous modifiez des règles, surtout pour SSH, assurez-vous de ne pas vous couper l'accès. Gardez une autre session ouverte ou ayez un accès console au cas où. Ne sauvegardez les règles que lorsque vous êtes sûr qu'elles fonctionnent.

Conclusion

iptables est un outil incroyablement puissant et flexible. Bien que sa syntaxe puisse paraître intimidante au premier abord, la compréhension de sa logique de chaînes, de règles et de cibles vous donne un contrôle total sur le trafic réseau de votre machine. Maîtriser les bases d'iptables est une compétence essentielle pour tout administrateur système soucieux de la sécurité.

MR

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Questions fréquentes

Qu'est-ce qu'iptables sous Linux ?
iptables est l'outil en ligne de commande qui permet de configurer les règles de filtrage de paquets du noyau Linux via le framework Netfilter. Il sert de pare-feu pour controler le trafic réseau entrant, sortant et en transit sur un serveur.
Comment bloquer une adresse IP avec iptables ?
Pour bloquer une IP, utilisez la commande : sudo iptables -A INPUT -s ADRESSE_IP -j DROP. Cette règle ajoute un blocage dans la chaine INPUT pour rejeter silencieusement tout trafic provenant de cette adresse.
Comment rendre les règles iptables persistantes après un redémarrage ?
Les règles iptables sont perdues au redémarrage par défaut. Installez le paquet iptables-persistent avec sudo apt install iptables-persistent, puis sauvegardez vos règles avec sudo netfilter-persistent save.
Quelle est la différence entre DROP et REJECT dans iptables ?
DROP jette silencieusement le paquet sans réponse, ce qui laisse l'expediteur en attente. REJECT refuse le paquet mais envoie une notification a l'expediteur (ICMP port unreachable). DROP est généralement prefere pour la sécurité car il ne revele pas la presence du pare-feu.

Partager ce tutoriel

Cet article vous a plu ?

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Commentaires

Recommandé pour vous

Article de fond sur le sujet

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.