Tutoriel Iptables : sécuriser un VPS avec un pare-feu Linux

Vous cherchez un tutoriel complet sur iptables pour votre VPS ? Cet article vous montrera comment installer et utiliser iptables sur un système Ubuntu.
Suivez-nous et apprenez à sécuriser votre VPS avec l’interface de ligne de commande et un outil de pare-feu Linux.

Sommaire
Qu’est-ce que Iptables ?
Iptables est un programme de pare-feu pour Linux. Il surveille le trafic en provenance et à destination de votre serveur à l’aide de tableaux. Ces tableaux contiennent des ensembles de règles, appelés chaînes, qui filtrent les paquets de données entrants et sortants.
Comment fonctionne iptables ?
Lorsqu’un paquet correspond à une règle, il se voit attribuer une cible, qui peut être une autre chaîne ou l’une de ces valeurs spéciales :
- ACCEPT – autorise le passage du paquet.
- DROP – ne laisse pas passer le paquet.
- RETURN – arrête le paquet qui traverse une chaîne et lui demande de revenir à la chaîne précédente.
Dans ce tutoriel d’iptables, nous allons travailler avec l’une des tables par défaut, appelée filter. Elle se compose de trois chaînes :
- INPUT – contrôle les paquets entrants vers le serveur.
- FORWARD – filtre les paquets entrants qui seront transférés ailleurs.
- OUTPUT – filtre les paquets qui sortent de votre serveur.
Avant de commencer ce guide, assurez-vous d’avoir un accès SSH root ou sudo à votre machine fonctionnant sous Ubuntu 22.04 ou supérieur. Vous pouvez établir la connexion via PuTTY (Windows) ou le terminal shell (Linux, macOS). Si vous possédez un plan VPS Hostinger, vous pouvez obtenir les détails de connexion SSH dans l’onglet Serveurs de hPanel.
Important ! les règles Iptables ne s’appliquent qu’à l’ipv4. Si vous souhaitez mettre en place un pare-feu pour le protocole ipv6, vous devrez utiliser ip6tables à la place.
Comment installer et utiliser le pare-feu Linux iptables
Nous diviserons ce tutoriel iptables en trois étapes. Tout d’abord, vous apprendrez à installer l’outil sur Ubuntu. Ensuite, nous vous montrerons comment définir les règles. Enfin, nous verrons la mise en place de changements persistants dans iptables.
1. Installer iptables
Iptables est préinstallé dans la plupart des distributions Linux. Cependant, si vous ne l’avez pas par défaut dans votre système Ubuntu/Debian, suivez les étapes ci-dessous :
- Connectez-vous à votre serveur via SSH.
- Exécutez les commandes suivantes une par une :
sudo apt-get update
sudo apt-get install iptables
- Vérifiez l’état de votre configuration iptables actuelle en exécutant la commande suivante
sudo iptables -L -v
Ici, l’option -L est utilisée pour lister toutes les règles, et -v pour afficher les informations dans un format plus détaillé. Voici un exemple de sortie :
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Le pare-feu Linux iptables est maintenant installé. À ce stade, vous remarquerez que toutes les chaînes sont réglées sur ACCEPT et n’ont pas de règles. Ce n’est pas sûr car n’importe quel paquet peut passer sans être filtré.
Ne vous inquiétez pas, nous vous apprendrons à définir des règles dans l’étape suivante.
2. Définir les règles de la chaîne
Définir une règle signifie l’ajouter à la chaîne. Pour ce faire, il faut insérer l’option -A (Append) juste après la commande iptables, comme suit :
sudo iptables -A
Cela alertera iptables que vous ajoutez de nouvelles règles à une chaîne. Ensuite, vous pouvez combiner la commande avec d’autres options, telles que :
- -i (interface) – l’interface réseau dont vous souhaitez filtrer le trafic, par exemple eth0, lo, ppp0, etc.
- -p (protocol) – le protocole réseau dans lequel se déroule le processus de filtrage. Il peut s’agir de tcp, udp, udplite, icmp, sctp, icmpv6, etc. Vous pouvez également taper all pour choisir tous les protocoles.
- -s (source) – l’adresse d’où provient le trafic. Vous pouvez ajouter un nom d’hôte ou une adresse IP.
- -dport (destination port) – le numéro du port de destination d’un protocole, tel que 22 (SSH), 443 (https), etc.
- -j (target) – le nom de la cible (ACCEPT, DROP, RETURN). Vous devez insérer ce nom à chaque fois que vous créez une nouvelle règle.
Si vous souhaitez les utiliser toutes, vous devez écrire les commandes dans cet ordre :
sudo iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target>
Une fois que vous avez compris la syntaxe de base, vous pouvez commencer à configurer le pare-feu pour plus de sécurité. Pour ce tutoriel, nous allons utiliser la chaîne INPUT comme exemple.
Activation du trafic sur localhost
Pour autoriser le trafic sur localhost, tapez cette commande :
sudo iptables -A INPUT -i lo -j ACCEPT
Nous utiliserons l’interface lo ou loopback pour cette démonstration. Elle est utilisée pour toutes les communications sur l’hôte local. La commande ci-dessus permet de s’assurer que les connexions entre une base de données et une application web sur la même machine fonctionnent correctement.
Activation des connexions sur les ports HTTP, SSH et SSL
Ensuite, nous voulons que les connexions http (port 80), https (port 443) et ssh (port 22) fonctionnent comme d’habitude. Pour ce faire, nous devons spécifier le protocole (-p) et le port correspondant (-dport). Vous pouvez exécuter ces commandes une par une :
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Il est temps de vérifier si les règles ont été ajoutées dans iptables :
sudo iptables -L -v
Il devrait renvoyer les résultats ci-dessous, ce qui signifie que toutes les connexions au protocole TCP à partir des ports spécifiés seront acceptées :
Filtrage des paquets en fonction de la source
Iptables vous permet de filtrer les paquets sur la base d’une adresse IP ou d’une plage d’adresses IP. Pour ce faire, vous devez la spécifier après l’option -s. Par exemple, pour accepter les paquets provenant de 192.168.1.3, la commande serait la suivante :
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT
Vous pouvez également rejeter les paquets provenant d’une adresse IP spécifique en remplaçant la cible ACCEPT par DROP.
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
Si vous souhaitez supprimer des paquets provenant d’une plage d’adresses IP, vous devez utiliser l’option -m et le module iprange. Ensuite, spécifiez la plage d’adresses IP avec l’option -src-range. N’oubliez pas qu’un trait d’union doit séparer la plage d’adresses IP sans espace, comme ceci :
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
Le filtrage des paquets en fonction de leur source est crucial si vous utilisez un système de détection et de prévention des intrusions (IDS/IPS) comme Suricata. Cet outil surveille votre réseau VPS et vous informe du trafic malveillant.
L’IDS/IPS indique l’origine des paquets malveillants, que vous pouvez ajouter à la liste de blocage d’iptables. Consultez notre article pour en savoir plus sur comment installer Suricata sur Ubuntu.
Bloquer tout autre trafic
Il est essentiel d’utiliser la cible DROP pour tous les autres trafics après avoir défini les règles -dport. Cela empêchera une connexion non autorisée d’accéder au serveur via d’autres ports ouverts. Pour ce faire, il suffit de taper
sudo iptables -A INPUT -j DROP
Désormais, la connexion en dehors du port spécifié sera interrompue.
Suppression de règles
Si vous souhaitez supprimer toutes les règles et repartir de zéro, vous pouvez utiliser l’option -F (flush) :
sudo iptables -F
Cette commande efface toutes les règles en vigueur. Toutefois, pour supprimer une règle spécifique, vous devez utiliser l’option -D. Tout d’abord, vous devez afficher toutes les règles disponibles en entrant la commande suivante :
sudo iptables -L --line-numbers
Vous obtiendrez une liste de règles avec des numéros :
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 192.168.0.4 anywhere 2 ACCEPT tcp -- anywhere anywhere tcp dpt:https 3 ACCEPT tcp -- anywhere anywhere tcp dpt:http 4 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Pour supprimer une règle, insérez la chaîne correspondante et le numéro dans la liste. Disons que pour ce tutoriel, nous voulons éliminer la règle numéro trois de la chaîne INPUT. La commande devrait être :
sudo iptables -D INPUT 3
Alternativement, si vous avez besoin de filtrer uniquement le trafic entrant, vous pouvez utiliser le pare-feu VPS de Hostinger. Sélectionnez votre VPS et accédez à la section Pare-feu.
Créez une nouvelle configuration, donnez-lui un nom et spécifiez les règles de trafic entrant que vous préférez :
3. Rendre les modifications persistantes
Les règles iptables que nous avons créées ne sont sauvegardées que dans une mémoire temporaire. Cela signifie que nous devons les sauvegarder dans un fichier pour pouvoir les charger à nouveau après un redémarrage. Pour effectuer ces changements, vous pouvez utiliser les commandes suivantes, selon que vous sauvegardez des règles IPv4 ou IPv6 :
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-save > /etc/iptables/rules.v6
Maintenant, à chaque fois que vous redémarrez votre VPS, vous devrez charger les règles sauvegardées avec les commandes suivantes :
sudo iptables-restore < /etc/iptables/rules.v4
sudo iptables-restore < /etc/iptables/rules.v6
Si vous souhaitez que le processus de chargement soit entièrement automatique, vous pouvez configurer le paquet iptables-persistent qui se chargera de charger les règles.
sudo apt-get install iptables-persistent
Après l’installation, il vous sera demandé de sauvegarder les règles actuelles. Choisissez Yes pour IPv4 et IPv6 et terminez la configuration. Maintenant, le processus de chargement sera automatique. Gardez à l’esprit que vous devrez toujours utiliser la commande sudo iptables-save à chaque fois que vous apporterez des modifications à iptables.
Conclusion
Iptables est un puissant programme de pare-feu que vous pouvez utiliser pour sécuriser votre serveur Linux ou VPS – vous pouvez définir diverses règles en fonction de vos préférences.
Dans ce tutoriel sur iptables, vous avez appris à installer et à utiliser cet outil. Maintenant, nous espérons que vous pouvez gérer vos ensembles de règles pour filtrer les paquets entrants et sortants.
Il est temps de le tester vous-même. Bonne chance !
Découvrez comment mieux protéger votre système Linux
Comment configurer OpenVPN sur un VPS
Comment configurer le pare-feu UFW dans Ubuntu
Commentaires
November 13 2020
c'était très bien et très intéressant. Vous avez très bien expliquer ! Merci !
February 09 2022
Merci de votre interaction !
February 09 2022
Nous sommes contents de le savoir Monsieur Flobert :)
October 01 2021
Bonjour, Super tuto, clair et efficace, il m'a bien aidé pour repartir sur une conf iptables propre. En effet je ne sais pas pourquoi firewalld (opensuse15.12/kde) bloque nmblookup de samba alors que tous les ports tcp/udp sont ouverts. Donc je désactive firewalld et utilise iptables. De plus Firewalld utilise la notion de 'zone' mais avec une seule carte réseau ça ne sert a rien. Il faudrait que les zones correspondant a des ranges IP entrants et sortant, comme par exemple zone home:192.168.0.0, zone trusted: une liste ip, zone dmz: la dmz....Hors firewalld ne propose pas ces réglages. Avec iptables on peut faire ce genre de regles même si ça ne s'appelle pas Zone... Bonne journée à tous!
February 09 2022
Bonjour Eric, Merci pour votre lecture et votre passage détaillé ! :)
February 09 2022
Bonjour Eric, Merci pour votre fidélité, je vous invite à se référer à cet article pour plus d'information https://documentation.mailjet.com/hc/en-us/articles/360042412734-Authenticating-Domains-with-SPF-DKIM
January 17 2023
bien clair ,je vous remercie !