Aperçu d'iptables

Un guide de référence pratique pour la gestion du pare-feu Linux avec iptables.

iptables est l'interface en ligne de commande standard pour gérer le pare-feu netfilter intégré au noyau Linux. Toutes les commandes iptables nécessitent les privilèges root.

Obtenez un accès root avant d'exécuter ces commandes : sudo -i sur les systèmes basés sur Debian, ou su sur les autres.

Afficher les règles et le statut

Afficher toutes les règles avec une sortie détaillée :

iptables -L -n -v

Afficher les règles avec les numéros de ligne :

iptables -n -L -v --line-numbers

Afficher uniquement la chaîne INPUT ou OUTPUT :

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

Options :

  • -L — lister les règles
  • -v — sortie détaillée (interface, options, suffixes K/M/G)
  • -n — afficher les IP et ports sous forme numérique, sans résolution DNS

Démarrer et arrêter le pare-feu

Via le service système :

service ufw stop
service ufw start

Vider toutes les règles manuellement :

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Options :

  • -F — vider (supprimer) toutes les règles
  • -X — supprimer une chaîne
  • -t — sélectionner une table (nat, mangle)
  • -P — définir la politique par défaut

Ajouter et supprimer des règles

Supprimer une règle par numéro de ligne :

iptables -L INPUT -n --line-numbers    # trouver le numéro de ligne
iptables -D INPUT 3                    # supprimer la ligne 3

Supprimer une règle par IP source :

iptables -D INPUT -s 202.54.1.1 -j DROP

Insérer une règle entre les lignes 1 et 2 :

iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Sauvegarder et restaurer les règles

iptables-save > /etc/iptables.rules      # sauvegarder
iptables-restore < /etc/iptables.rules  # restaurer

Politiques par défaut

Bloquer tout le trafic (tout refuser) :

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Bloquer le trafic entrant non sollicité, autoriser le trafic sortant :

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

Bloquer des adresses IP et des réseaux

Bloquer une adresse IP spécifique :

iptables -A INPUT -s 1.2.3.4 -j DROP

Bloquer les plages d'adresses privées sur une interface publique :

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Plages d'adresses privées :

  • 10.0.0.0/8 (classe A)
  • 172.16.0.0/12 (classe B)
  • 192.168.0.0/16 (classe C)
  • 224.0.0.0/4 (Multicast D)
  • 240.0.0.0/5 (classe E)
  • 127.0.0.0/8 (Loopback)

Bloquer des ports

Bloquer toutes les connexions entrantes sur le port 80 :

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Bloquer le port 80 pour une adresse IP spécifique :

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP

Ouvrir une plage de ports :

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Bloquer les connexions sortantes par domaine

Rechercher l'adresse IP et le CIDR :

host -t a facebook.com
whois 69.171.228.40 | grep CIDR

Bloquer la plage :

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Journalisation

Journaliser et bloquer un paquet :

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Journalisation avec limitation du débit (max. 7 entrées toutes les 5 minutes) :

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Consulter le journal :

tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages

Filtrage par adresse MAC

iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

::: front-promo-main-services
:::

# Autoriser uniquement le port TCP 22 depuis une adresse MAC spécifique
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

Gestion de l'ICMP (Ping)

Référence des types de messages ICMP :

Type Description
0 Echo reply (réponse au ping)
3 Destination unreachable
4 Source quench
5 Redirect
8 Echo request (ping)
11 Time-to-live exceeded
12 IP header bad

Recommandé — n'autoriser que les types ICMP sûrs :

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT

Bloquer toutes les requêtes ping :

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Autoriser le ping uniquement depuis un sous-réseau local :

iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Ports courants — ouvrir ou fermer

Remplacez ACCEPT par DROP pour bloquer un port :

# SSH (port 22)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP (port 25)
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# DNS (port 53)
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# POP3 (port 110)
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

# IMAP (port 143)
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

# MySQL (port 3306) — réseau local uniquement
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# Samba — réseau local uniquement
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

# NTP (port 123)
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Limites de connexions

Autoriser au maximum 3 sessions SSH par adresse IP :

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Limiter HTTP à 20 connexions simultanées par sous-réseau /24 :

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

Options :

  • --connlimit-above N — appliquer la règle lorsque le nombre de connexions dépasse N
  • --connlimit-mask 24 — appliquer la limite par sous-réseau /24

Plages d'adresses IP

Autoriser l'accès au port 80 depuis une plage d'adresses IP spécifique :

iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

Aide

Une question ou besoin d'un coup de main ? Écrivez-nous via le système de tickets — nous sommes toujours là pour vous aider !

Besoin d’aide?Nos ingénieurs vous aideront gratuitement pour n’importe quelle question en quelques minutesNous contacter