Debian – Installer et configurer IPTABLES

Debian – Installer et configurer IPTABLES

iptables est un outil puissant pour configurer et gérer le pare-feu sous Linux, permettant de contrôler le trafic réseau entrant, sortant et traversant le système. Il est idéal pour renforcer la sécurité grâce à des règles précises qui filtrent les paquets en fonction de critères tels que les adresses IP, les ports ou les protocoles. En combinant flexibilité et efficacité, iptables est une solution essentielle pour protéger les serveurs et garantir une gestion fine des connexions réseau.

Étape 1 :

Mettez à jour les paquets et installez iptables et iptables-perisitent (cela vous permettra de sauvegarder la configuration).

sudo apt update
sudo apt install iptables 
sudo apt install iptables-perisitent

Étape 2 :

Dans un premier temps, on affiche l’état iptables :

iptables -L -n -v
  • -L : Liste les règles.
  • -v : Affiche des informations détaillées
  • -n : ne résout pas les noms (ex : anywhere -> 0.0.0.0/0)

Voici les règles par défaut !

Les politiques par défaut sont affichées à la suite de chaque chaîne, comme ceci :

Chain INPUT (policy ACCEPT) // Les flux entrants sont acceptés.
Chain FORWARD (policy DROP) // Les flux en transit (transfert entre interfaces réseau) sont bloqués.
Chain OUTPUT (policy ACCEPT) // Les flux sortants sont acceptés.

Toutes les règles sur iptables se construisent de la même manière, c’est-à-dire :

iptables -A <CHAINE> -p <PROTOCOLE> --dport <PORT> -j <ACTION>
  • -A : Ajoute une règle à la fin de la chaîne.
  • <CHAINE> : Chaîne à modifier (INPUT, FORWARD, OUTPUT).
  • <PROTOCOLE> : Spécifie le protocole (tcp, udp, icmp).
  • –dport : Définit le port de destination (exemple : 80 pour HTTP).
  • <ACTION> : Action à appliquer (ACCEPT, DROP, REJECT).

Exemple :

(Autoriser le trafic HTTP entrant) :

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

(Autoriser le trafic ssh entrant) :

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Commençons par le commencement 🙂

Tout d’abord, nous devons autoriser le trafic sur nous-même, donc autoriser le trafic localhost :

iptables -A INPUT -i lo -j ACCEPT

À partir de maintenant, configurez toutes les règles dont vous avez besoin ! En voici quelques exemples :

Autoriser le trafic HTTP entrant à partir de n’importe quelle ip externeiptables -A INPUT -p tcp –dport 80 -j ACCEPT
Autoriser le traffic DNS sortant (pour la résolution de nom)iptables -A OUTPUT -p udp –dport 53 -j ACCEPT
Autoriser le trafic HTTPS entrant à partir de n’importe quelle ip externeiptables -A INPUT -p tcp –dport 443 -j ACCEPT

Jusqu’à présent, nous avons vu la construction des règles iptables classique ! Cela vous permettra de sécuriser les flux sur votre serveur Linux.

On va complexifier un peu les choses, et si notre serveur linux pouvait router 😉

Prérequis :

  • eth0 : WAN1 81.208.26.112/32
  • eth1 : LAN1 192.168.1.1/24

Étape 1 : commencez par activer le routage :

sysctl net.ipv4.ip_forward // si la valeur est à 0 le routage est désactivé

Pour cela, activez-le en éditant le fichier /etc/sysctl.conf :

nano /etc/sysctl.conf

net.ipv4.ip_forward=1

Puis, rechargez la configuration :

sudo sysctl -p

Étape 2 : configurez le NAT (cela permet d’activer internet sur le LAN)

  • 2 possibilités : IP publique statique et IP publique dynamique
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source [IP_publique_du_routeur] // IP FIXE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE // IP DYNAMIQUE
  • eth0 : l’interface qui a accès à Internet (WAN)
  • POSTROUTING : indique que cette règle s’applique après le routage.

Étape 3 : Autorisez le trafic du LAN vers le WAN :

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Étape 4 : Configurez le DHCP si nécessaire sur le LAN : (installez le serveur DHCP : ici)

Éditez le fichier /etc/dhcp/dhcpd.conf :

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Redémarrez le service :

sudo systemctl restart isc-dhcp-server

Et maintenant, nous allons rediriger des flux : (ex : depuis n’importe quelle IP externe sur le port 2678 vers un serveur local 192.168.1.200 sur le port 80).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80

Quelques explications :

  • -t nat : Spécifie que la règle s’applique à la table NAT (pour les redirections de ports).
  • -A PREROUTING : Ajoute une règle à la chaîne PREROUTING pour intercepter les paquets avant qu’ils ne soient routés.
  • -p tcp : Spécifie que la règle s’applique au protocole TCP.
  • –dport 2678 : Correspond au port de destination initial (2678).
  • -j DNAT : Indique que l’action est une traduction d’adresse de destination (DNAT).
  • –to-destination 10.0.0.200:80 : Redirige vers l’adresse et le port spécifiés (10.0.0.200:80).

INFO : après avoir configuré les différentes règles, vous devez DROP tous les restes du trafic afin d’éviter des accès non autorisés à partir d’autres ports ouverts.

Voici la commande pour DROP le reste du trafic :

iptables -P INPUT DROP

Pour sauvegarder la configuration que vous venez de faire, tapez la commande suivante :

sudo netfilter-persistent save
sudo netfilter-persistent reload


Pour autoriser un tunnel OpenVPN, vous devez ajouter des règles spécifiques pour permettre le trafic OpenVPN. Nous allons considérer que le port OpenVPN est le 1194 en UDP.

Étape 1 : autorisez le trafic OpenVPN entrant.

sudo iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT

Remarque : si OpenVPN est configuré en TCP, voici la commande :

sudo iptables -A INPUT -i eth0 -p tcp --dport 1194 -j ACCEPT

Étape 2 : configurez le réseau

Une fois, le tunnel établit, les clients OpenVPN doivent accéder au réseau local ainsi qu’à Internet :

  • Pour l’accès au LAN :
sudo iptables -A FORWARD -i tun0 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  • Pour l’accès à internet :
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  • Ensuite, activez le NAT pour les clients VPN :
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Étape 2 : redémarrez le service OpenVPN :

sudo systemctl restart openvpn

Voici quelques commandes utiles :

Supprimer toutes les règlesiptables -F
Afficher le numéro des règlesiptables -L –line-numbers
Pour supprimer une règleiptables -D INPUT 1
Enregistrer la confnetfilter-persistent save
Recharger la confnetfilter-persistent reload

Et voilà ! Vous savez configurer iptables 🙂

1 Comment

  1. Bilal

    On l’attendait et ils l’ont fait😍😄. Ce tuto très fournis m’inspire pour un prochain lab et un essaie sur un serveur installer par mon frère. Merci techalpha pour le partage de votre expérience et votre passion. A très bientôt et bonne continuation ✌🏽✌🏽

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *