Introduction
Iptables est un outil en ligne de commande pare-feu . Cela signifie qu'il s'agit d'un logiciel qui vous permet de configurer un pare-feu sur votre système. Il est généralement disponible par défaut sur Linux . Dans ce guide, nous allons aborder certaines des règles et commandes courantes associées au pare-feu iptables. Chaque fois qu'une connexion tente de s'établir avec votre système, le pare-feu se réfère à ces règles pour déterminer quelle doit être la prochaine étape.
Commandes Iptables
Ce guide présentera certaines des commandes iptables les plus essentielles. Pour suivre ce guide, vous devrez avoir une compréhension de base de ce qu'est iptables et de son fonctionnement. Cela vous aidera à mieux appréhender les règles que vous mettez en œuvre avec les commandes suivantes. N'oubliez pas que toutes les commandes indiquées ci-dessous peuvent être utilisées de manière isolée. D'un autre côté, vous pouvez également les combiner pour répondre à vos besoins spécifiques.
Choses à garder à l'esprit
Avant de poursuivre votre lecture, voici quelques éléments à garder à l'esprit :
- L'ordre des règles dans iptables est important.
- Pour ajouter une nouvelle règle à la fin d'une chaîne, votre
iptablescommande devra utiliser le-A. - Si vous souhaitez ajouter la règle à une autre position, vous devez utiliser l'option
-I. Cette option vous permet de spécifier l'emplacement exact de la règle. Si vous souhaitez placer la règle au début de la chaîne, n'indiquez tout simplement pas de numéro de règle. - Pour vous assurer d'avoir un accès constant à votre serveur, bloquez le trafic SSH sur le port 22 par défaut.
- Si vous ne le faites pas et perdez l'accès à votre serveur, vous pouvez vous reconnecter à l'aide de la console. Autorisez le trafic SSH pour modifier les paramètres du pare-feu.
- Si vous souhaitez un jour passer en revue le jeu de règles actuellement en place, utilisez les commandes
sudo iptables -S et sudo iptables -L.
De plus, nous disposons d'un guide détaillé sur la façon de lister et de supprimer les règles de pare-feu iptables, qui vous aidera également à tirer le meilleur parti de votre pare-feu iptables.
Maintenant que les prérequis sont réglés, plongeons dans certaines des commandes iptables courantes:
Comment sauvegarder vos règles
Nous commencerons par déterminer comment vous pouvez sauvegarder vos règles. Il est important de noter que les règles iptables sont éphémères. Cela signifie qu'elles seront perdues après le redémarrage de votre système, à moins que vous ne les sauvegardiez. Voici comment vous pouvez sauvegarder manuellement vos nouvelles règles sur les serveurs Ubuntu et CentOS respectifs :
-
Ubuntu
Le moyen le plus simple de sauvegarder vos nouvelles règles sur un serveur Ubuntu est d'utiliser le paquet iptables-persistent . Vous pouvez facilement créer un serveur Ubuntu en suivant ce tutoriel.
Maintenant, la première étape pour sauvegarder vos nouvelles règles iptables consiste à installer le paquet iptables-persistent en utilisant apt-get. Voici comment vous pouvez l'obtenir :
|
1 |
sudo apt-get install iptables-persistent |

Pendant le processus d'installation, vous devez décider si vous souhaitez sauvegarder les règles de pare-feu actuellement en place. Pour mettre à jour les règles à la place et sauvegarder les modifications, utilisez cette commande :
|
1 |
sudo netfilter-persistent save |

La commande ci-dessus fonctionne généralement pour les versions d'Ubuntu ultérieures à 16.04. Si vous utilisez une version antérieure, utilisez plutôt cette commande :
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
Vous pouvez configurer votre pare-feu avec iptables sur CentOS 6 ou les versions antérieures. CentOS 7 utilise plutôt FirewallD. Suivez ce tutoriel pour apprendre à configurer FirewallD sur CentOS 7.
Vous pouvez sauvegarder vos nouvelles règles sur CentOS en utilisant le script d'initialisation iptables . Consultez la commande suivante :
|
1 |
sudo service iptables save |
Cette commande sauvegardera vos nouvelles règles pour le pare-feu iptables. Les règles iptables actuellement actives se trouvent dans le fichier /etc/sysconfig/iptables .
Commandes Iptables utiles
Passons maintenant à quelques commandes de pare-feu iptables très utiles que vous pourriez avoir besoin d'utiliser sur votre serveur.
-
Connexions de bouclage (Loopback)
Tout d'abord, nous allons explorer comment vous pouvez autoriser les connexions de bouclage. Votre système utilise une interface de bouclage pour s'envoyer des connexions. Par exemple, imaginez que vous ayez exécuté cette commande : ping localhost ou ping 127.0.0.1. Votre serveur utilisera une interface de bouclage, ou une lo, pour s'envoyer un ping à lui-même. D'autres fois, le serveur peut l'utiliser si votre serveur d'application est configuré pour se connecter à l'adresse « localhost ».
Quelle que soit la situation, vous devez vous assurer que votre pare-feu iptables ne bloque pas ces connexions. Par conséquent, vous devrez autoriser les connexions de bouclage pour permettre à ces fonctions de s'exécuter.
Voici les commandes que vous allez exécuter pour autoriser tout le trafic arrivant sur l'interface de bouclage :
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Connexions entrantes établies et associées
Un autre type de connexion que vous devrez peut-être autoriser est la connexion sortante. Pour vous assurer que votre serveur reçoit et envoie respectivement le trafic entrant et sortant, vous devez autoriser les connexions entrantes établies et associées. Cela permet au serveur d'envoyer du trafic de retour vers les connexions sortantes. Utilisez cette commande pour autoriser les connexions entrantes établies ainsi que les connexions associées :
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Connexions sortantes établies
Le serveur enverra généralement des réponses aux connexions entrantes sous la forme de trafic sortant de connexions établies. Pour les autoriser, utilisez la commande suivante :
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
De l'interne vers l'externe
Parfois, vous pouvez même avoir besoin de configurer votre pare-feu pour donner l'accès interne vers l'externe. Par défaut, votre réseau externe devrait être eth0 et eth1 devrait être votre réseau interne. Si c'est le cas, utilisez cette commande pour activer l'accès :
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Abandon des paquets invalides
Parfois, certains paquets de trafic réseau seront étiquetés comme invalides. La plupart du temps, vous pouvez simplement abandonner ces paquets invalides. Pour ce faire, utilisez la commande suivante :
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Règles pour bloquer les adresses IP
Ensuite, nous allons examiner quelques commandes que vous pouvez utiliser pour bloquer les connexions provenant de certaines adresses IP. Pour faciliter les choses, nous utiliserons l'adresse IP 15.15.15.51 comme exemple dans nos commandes. Vous pouvez remplacer cette valeur par votre adresse IP spécifique.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
Dans -s 15.15.15.51, le -s signifie source. Ainsi, la commande spécifie l'adresse IP source « 15.15.15.51 ». De même, vous pouvez spécifier l'adresse IP source dans n'importe quelle règle de pare-feu. Cela inclut la règle d'autorisation et de rejet.
Si vous souhaitez rejeter la connexion, vous utiliserez REJECT à la place de DROP dans la commande comme ceci :
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
En conséquence, votre serveur renverra une erreur « connexion refusée » chaque fois que cette adresse IP particulière enverra une demande de connexion.
-
Blocage des connexions vers une interface spécifique
Il vous est possible de bloquer toutes les demandes de connexion provenant d'une adresse IP particulière vers une interface réseau particulière. Dans notre exemple, l'adresse IP est 15.15.15.51 et l'interface réseau est eth0. Utilisez cette commande pour bloquer les connexions :
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
L'avantage est que vous pouvez spécifier l'interface réseau dans n'importe quelle règle. Cela signifie que n'importe quelle règle peut être appliquée et limitée à un réseau spécifique uniquement.
Règles pour le service : SSH
SSH devient pertinent si vous utilisez un serveur cloud. Dans ce cas, vous devez autoriser les connexions SSH entrantes sur le port 22. L'activation de ces connexions vous permet de vous connecter à votre serveur et de le gérer. Ici, nous aborderons un certain nombre de règles courantes relatives à SSH.
-
Autoriser toutes les connexions SSH entrantes
Les commandes suivantes activent toutes les connexions SSH entrantes :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Dans l'ensemble ci-dessus, vous n'avez besoin d'utiliser la deuxième commande que si la politique OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions SSH établies.
-
Autoriser le SSH entrant depuis un sous-réseau
La commande précédente autorise toutes les connexions entrantes. Vous pouvez utiliser les commandes suivantes pour autoriser uniquement les connexions entrantes provenant d'une adresse IP ou d'un sous-réseau spécifique. Supposons que vous souhaitiez uniquement autoriser les connexions entrantes provenant du sous-réseau 15.15.15.0/24 :
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Comme précédemment, vous n'avez besoin d'utiliser la deuxième commande que si la politique OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions SSH établies.
-
Autoriser le SSH sortant
Utilisez ces commandes si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT et que vous souhaitez activer les connexions SSH. Cela permettra à votre serveur d'initier des connexions SSH vers d'autres serveurs :
|
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Pour aller plus loin avec SSH sur vos serveurs cloud, consultez nos tutoriels sur comment utiliser SSH to connecter à un serveur distant sous Ubuntu et comment configurer votre serveur Linux pour utiliser l'authentification par clé SSH.
-
Autoriser le Rsync entrant depuis un sous-réseau
Rsync est une fonctionnalité que vous pouvez utiliser pour transférer des fichiers d'un système à un autre. Elle fonctionne sur le port 873. Ainsi, si vous souhaitez autoriser les connexions Rsync entrantes sur le port 873 depuis une adresse IP ou un sous-réseau spécifique, utilisez les commandes suivantes :
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Comme vous pouvez le voir, nous avons spécifié l'adresse IP source ainsi que le port de destination. Vous n'utiliserez la deuxième commande que si la politique OUTPUT du pare-feu n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions Rsync établies. De plus, vous pouvez consulter notre tutoriel sur l'utilisation de Rsync pour synchroniser des répertoires locaux et distants sur un VPS.
Règles pour le service : Serveur Web
Les connexions HTTP sont généralement reçues sur le port 80. De même, le HTTPS arrive généralement sur le port 443. Les serveurs web comme Apache et Nginx écoutent ces ports pour intercepter les demandes de connexion. Parfois, les paramètres par défaut peuvent amener votre serveur à rejeter ou ignorer ces requêtes entrantes. C'est pourquoi vous devrez définir de nouvelles règles pour autoriser le trafic.
-
Autoriser toutes les connexions HTTP entrantes
Vous pouvez autoriser toutes les connexions HTTP entrantes sur le port 80 avec ces commandes :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique OUTPUT du pare-feu n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions HTTP établies.
-
Autoriser toutes les connexions HTTPS entrantes
Utilisez ces commandes pour autoriser toutes les demandes de connexion HTTPS entrantes sur le port 443 :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu iptables OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions HTTP établies.
-
Autoriser toutes les connexions entrantes depuis HTTP et HTTPS
Vous pouvez utiliser le module multiport si vous souhaitez autoriser le trafic provenant des ports HTTP et HTTPS. Utilisez ces commandes si tel est le cas :
|
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions HTTP et HTTPS établies.
Règles pour le service : MySQL
Parfois, un client peut utiliser un serveur distant pour accéder à votre MySQL serveur de base de données. Dans ce cas, vous devez autoriser manuellement le trafic entrant depuis le port concerné. MySQL écoute les demandes de connexion sur le port 3306.
-
Autoriser les connexions MySQL entrantes depuis un sous-réseau
Vous devrez spécifier la source si vous souhaitez autoriser les connexions MySQL depuis un sous-réseau particulier. Dans notre exemple, nous autoriserons le trafic entrant provenant du 15.15.15.0/24 sous-réseau à l'aide de ces commandes :
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions MySQL établies.
-
Activer les connexions MySQL vers une interface
Si vous souhaitez également spécifier quelle interface réseau doit recevoir les connexions MySQL, vous pouvez utiliser ces commandes :
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Dans ce cas, nous autorisons les connexions à une interface réseau privée appelée eth1.
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions MySQL établies.
Vous pouvez suivre notre tutoriel pour une configuration facile de MySQL sur votre serveur.
Règles pour le service : PostgreSQL
Votre client peut utiliser un serveur distant pour accéder à votre PostgreSQL serveur de base de données. Dans ce cas, vous devez autoriser ces connexions entrantes. Ces connexions passeront par le port 5432.
-
Autoriser les connexions PostgreSQL entrantes depuis un sous-réseau
Vous pouvez utiliser les commandes suivantes pour autoriser les connexions PostgreSQL entrantes depuis un sous-réseau ou une adresse IP particulière. Comme vous pouvez le voir, nous avons spécifié la source qui est le 15.15.15.0/24 sous-réseau.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Il autorise le trafic sortant des connexions PostgreSQL établies.
-
Activation des connexions PostgreSQL vers une interface spécifique
Si vous souhaitez autoriser uniquement les connexions PostgreSQL vers une interface réseau particulière, utilisez ces commandes :
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Dans ce cas, nous autorisons les connexions à une interface réseau privée appelée eth1. Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions PostgreSQL établies.
Suivez ce tutoriel pour installer PostgreSQL sur votre serveur Ubuntu.
Règles pour le service : Mail
Vous devrez peut-être également configurer votre pare-feu en fonction du serveur de messagerie que vous utilisez. Par exemple, Sendmail et Postfix peuvent recevoir des connexions sur un certain nombre de ports différents. Cela dépend du protocole que vous utilisez pour la distribution du courrier. Pour bloquer et autoriser certaines connexions de messagerie, vous devez savoir quel protocole vous utilisez.
-
Autoriser les connexions SMTP entrantes
Les connexions SMTP arrivent généralement sur le port 25. Bien que le protocole SMTP utilise également couramment le port 587 pour le courrier sortant. Pour autoriser votre serveur à répondre à ces connexions, utilisez les commandes suivantes :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions SMTP établies.
-
Autoriser toutes les connexions IMAP entrantes
Pour autoriser votre serveur à répondre à toutes les connexions IMAP entrantes sur le port 143, saisissez et exécutez simplement ceci :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions IMAP établies.
-
Autoriser toutes les connexions IMAPS entrantes
Utilisez ces commandes pour permettre à votre serveur de répondre aux connexions IMAPS sur le port 993 :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions IMAPS établies.
-
Autoriser toutes les connexions POP3 entrantes
Ces connexions arriveront sur le port 993. Si vous souhaitez que votre serveur réponde aux demandes de connexion IMAPS, utilisez les commandes suivantes :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique du pare-feu OUTPUT n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions POP3 établies.
-
Autoriser toutes les connexions POP3S entrantes
Utilisez ces commandes pour autoriser votre serveur à établir des connexions avec les requêtes POP3S arrivant sur le port 995 :
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Vous n'utiliserez la deuxième commande que si la politique OUTPUT du pare-feu n'est pas définie sur ACCEPT. Elle autorise le trafic sortant des connexions POP3S établies.
-
Comment bloquer le courrier SMTP sortant
Au lieu d'autoriser les connexions entrantes et d'activer la réponse du serveur, vous pouvez souhaiter bloquer complètement le courrier sortant. Vous pouvez bloquer tout le courrier SMTP sortant sur le port 25 à l'aide de cette commande :
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
Par conséquent, tout le trafic sortant sur le port 25 sera rejeté par le pare-feu iptables. Vous pouvez utiliser la même structure de commande si vous souhaitez rejeter tout autre service. Il vous suffit de remplacer le port 25 par le numéro de port correspondant.
Conclusion
Ce guide couvre les commandes essentielles du pare-feu iptables. Il vous fournit les outils indispensables pour configurer efficacement votre pare-feu iptables. Gardez à l'esprit qu'il n'existe pas de solution universelle. Ces commandes sont extrêmement flexibles. Cela signifie que vous pouvez les utiliser de la manière qui vous convient le mieux, à vous et à vos besoins.
Bonne informatique !

Commentaires
Aucun commentaire pour l'instant. Soyez le premier.