Aller au contenu

Configuration du pare-feu Linux de base avec iptables

Dans cet article

iptables— est le cadre intégré pour filtrer et gérer le trafic réseau dans le noyau Linux. Il permet un contrôle flexible des connexions entrantes, sortantes et transitaires en fonction des règles.

Note

iptables est préinstallé sur presque toutes les distributions Linux.
Dans les systèmes plus récents (RHEL 8+, Ubuntu 20.04+), le défaut peut être *****nftables****** (la commande nft), mais iptables reste compatible via l'interface legacy iptables-legacy.
Pour les serveurs cloud ou VPS — configurer iptables est d'une importance critique pour la sécurité.

Concepts de base

Trois chaînes (chains)

Chaîne Objectif
INPUT Trafic entrant vers le serveur (SSH, HTTP, etc.)
OUTPUT Trafic sortant du serveur (mises à jour, requêtes API)
FORWARD Trafic qui passe à travers le serveur (uniquement lorsqu'on route/NAT)

Note

iptables est préinstallé sur presque toutes les distributions Linux.
Dans les systèmes plus récents (RHEL 8+, Ubuntu 20.04+), le défaut peut être nftables (la commande nft), mais iptables reste compatible via l'interface legacy iptables-legacy.

Pour les serveurs cloud ou VPS —configurer iptables est d'une importance critique pour la sécurité.

Comment ça fonctionne

  1. Un paquet entre dans la chaîne appropriée INPUT, OUTPUT, FORWARD.
  2. Les règles sont évaluées dans l'ordre — dès qu'une correspondance est trouvée, l'action spécifiée est exécutée.
  3. Si aucune correspondance n'est trouvée, la politique par défaut est appliquée.

Actions (cibles)

Action Comportement Recommandation
ACCEPT Autoriser le paquet Pour les services de confiance (SSH, HTTP)
DROP Supprimer silencieusement le paquet (sans réponse) Meilleure option pour la sécurité — masque l'existence du port
REJECT Rejeter avec une erreur ICMP (ex. port-unreachable) Utilisez si vous avez besoin de retour (ex. pour le débogage)

Note

Règle de sécurité
Par défaut — refuser tout, puis autoriser uniquement ce qui est nécessaire.

Syntaxe de base des commandes

iptables [options] CHAIN [criteria] -j ACTION

Options principales:

Option Objectif
-A Ajouter une règle à la fin de la chaîne
-I Insérer une règle au début (ou à un numéro spécifique : -I INPUT 1)
-D Supprimer une règle (par numéro ou en copiant la ligne)
-L Lister les règles
-F Vider toutes les règles de la chaîne
-P Définir la politique par défaut (ACCEPT, DROP)

Critères fréquemment utilisés:

Option Exemple Description
-p tcp/udp/icmp -p tcp Protocole
--dport N --dport 22 Port de destination
-s IP/MASK -s 192.168.1.5<b-s 203.0.113.0/24 Source (IP ou sous‑réseau)
-i interface -i eth0 Interface d’entrée
-m state --state NEW,ESTABLISHED -m state --state NEW État de la connexion
-m connlimit --connlimit-above 5 Limite de connexion

Affichage et dépannage

Afficher toutes les règles (lisibles):

sudo iptables -L -n -v --line-numbers
- -n — ne pas résoudre les noms (plus rapide); - -v — sortie détaillée; - --line-numbers — afficher les numéros de règle (utile pour la suppression).

Voir les politiques par défaut:

sudo iptables -S | grep '^:'
# Ou :
sudo iptables -L | head -3

Exemples de règles pratiques

1. Configuration de base sécurisée (recommandée !)

# 1. Autoriser tout le trafic sur loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# 2. Autoriser les connexions déjà établies (important !)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 3. Autoriser SSH (remplacez 22 par votre port si changé !)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 4. Autoriser HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 5. Supprimer tout le reste par défaut
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT   # ← généralement autoriser les sorties

2. Restriction d'accès

# Autoriser MySQL (3306) uniquement depuis une IP
sudo iptables -A INPUT -s 203.0.113.15 -p tcp --dport 3306 -j ACCEPT

# Bloquer tout le trafic d'une IP suspecte
sudo iptables -A INPUT -s 198.51.100.77 -j DROP

3. Protection contre les attaques

# Bloquer les paquets malformés/invalides
sudo iptables -A INPUT -m state --state INVALID -j DROP

# Protéger contre les SYN‑flood
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

# Limiter les connexions HTTP (pas plus de 20 simultanées d'une même IP)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP

4. Journalisation

# Journaliser les tentatives de connexion aux ports fermés (5 premières par minute)
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 \
  -m limit --limit 5/min -j LOG --log-prefix "PORT-SCAN: " --log-level 4
# Puis bloquer
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 -j DROP

Sauvegarde des règles après redémarrage

Les règles iptables ne sont pas enregistrées automatiquement — elles ne résident que dans la mémoire du noyau.

Pour RHEL / CentOS 7 et versions antérieures:

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

Pour Debian / Ubuntu:

Installez le paquet de persistance:

sudo apt update && sudo apt install iptables-persistent
Pendant l’installation, le système vous proposera d’enregistrer les règles actuelles — choisissez "Oui".

Mettez à jour les règles enregistrées plus tard:

sudo netfilter-persistent save
# ou directement:
sudo iptables-save > /etc/iptables/rules.v4

Note

Avant de redémarrer, vérifiez les règles:

sudo iptables-restore -t < /etc/iptables/rules.v4
Le drapeau -t ne fait qu’un contrôle syntaxique, pas d’application.

Suppression des règles

Supprimer par numéro (voir** --line-numbers**):

sudo iptables -D INPUT 3   # supprimer la règle #3 dans la chaîne INPUT

Supprimer par correspondance exacte:

sudo iptables -D INPUT -s 198.51.100.77 -j DROP

Vider une chaîne:

sudo iptables -F INPUT      # uniquement INPUT
sudo iptables -F            # toutes les chaînes

Réinitialiser les politiques par défaut:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Information

  1. Testez les règles localement ou via console (pas SSH !), surtout lors de la modification de INPUT.
  2. Utilisez screen ou tmux afin de ne pas perdre la session en cas d'erreur.
  3. Envisagez de passer à des outils plus modernes :
  4. ufw — interface simplifiée pour iptables (Ubuntu/Debian);
  5. firewalld — pare‑feu dynamique pour RHEL/CentOS;
  6. nftables — l'avenir du noyau Linux (syntaxe plus efficace et concise).