Security
Difficulte: Intermediate
5 min de lecture

iptables : Configurer un Pare-feu sur Linux

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

Retour aux tutoriels
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é.