Introduction
Iptables est un pare-feu logiciel pour les distributions Linux. Ce guide de style « cheat sheet » fournit une référence rapide aux commandes iptables qui créeront des règles de pare-feu utiles dans des scénarios courants et quotidiens. Cela inclut des exemples d’iptables permettant d’autoriser et de bloquer divers services par port, interface réseau et adresse IP source.
Comment Utiliser Ce Guide
- La plupart des règles décrites ici supposent que votre iptables est configuré pour DROP le trafic entrant, via la politique d’entrée par défaut, et que vous souhaitez autoriser sélectivement le trafic entrant
- Utilisez les sections ultérieures qui sont applicables à ce que vous essayez d’accomplir. La plupart des sections ne sont pas basées sur d’autres, vous pouvez donc utiliser les exemples ci-dessous de manière indépendante
- Utilisez le menu Contenu situé sur le côté droit de cette page (pour les largeurs de page larges) ou la fonction de recherche de votre navigateur pour localiser les sections dont vous avez besoin
- Copiez et collez les exemples de lignes de commande donnés, en remplaçant les valeurs surlignées par les vôtres
Gardez à l’esprit que l’ordre de vos règles est important. Toutes ces commandes iptables
utilisent l’option -A
pour ajouter la nouvelle règle à la fin d’une chaîne. Si vous souhaitez la placer ailleurs dans la chaîne, vous pouvez utiliser l’option -I
qui vous permet de spécifier la position de la nouvelle règle (ou de la placer au début de la chaîne en ne spécifiant pas de numéro de règle).
Remarque : Lorsque vous travaillez avec des pare-feu, veillez à ne pas vous verrouiller hors de votre propre serveur en bloquant le trafic SSH (port 22, par défaut). Si vous perdez l’accès en raison de vos paramètres de pare-feu, vous devrez peut-être vous connecter via une console basée sur le web pour rétablir votre accès. Si vous utilisez DigitalOcean, vous pouvez consulter notre documentation sur le produit Recovery Console pour plus d’informations. Une fois connecté via la console, vous pouvez modifier vos règles de pare-feu pour autoriser l’accès SSH (ou autoriser tout le trafic). Si vos règles de pare-feu enregistrées autorisent l’accès SSH, une autre méthode consiste à redémarrer votre serveur.
Rappelez-vous que vous pouvez vérifier votre ensemble de règles iptables actuel avec sudo iptables -S
et sudo iptables -L
.
Jetons un coup d’œil aux commandes iptables!
Enregistrer des règles
Les règles iptables sont éphémères, ce qui signifie qu’elles doivent être sauvegardées manuellement pour persister après un redémarrage.
Sous Ubuntu, une façon de sauvegarder les règles iptables est d’utiliser le paquet iptables-persistent
. Installez-le avec apt de cette manière :
Pendant l’installation, on vous demandera si vous souhaitez sauvegarder vos règles de pare-feu actuelles.
Si vous mettez à jour vos règles de pare-feu et souhaitez enregistrer les modifications, exécutez cette commande :
D’autres distributions Linux peuvent avoir des façons alternatives de rendre vos modifications iptables permanentes. Veuillez vous référer à la documentation pertinente pour plus d’informations.
Listing and Deleting Rules
Si vous souhaitez apprendre à répertorier et supprimer les règles iptables, consultez ce tutoriel : Comment lister et supprimer les règles de pare-feu iptables.
Generally Useful Rules
Cette section comprend une variété de commandes iptables qui créeront des règles généralement utiles sur la plupart des serveurs.
Autoriser les connexions de boucle locale
L’interface loopback, également appelée lo
, est ce qu’un ordinateur utilise pour rediriger les connexions réseau vers lui-même. Par exemple, si vous exécutez ping localhost
ou ping 127.0.0.1
, votre serveur va se pinguer lui-même en utilisant la boucle locale. L’interface de bouclage est également utilisée si vous configurez votre serveur d’application pour se connecter à un serveur de base de données avec une adresse localhost
. En tant que tel, vous voudrez vous assurer que votre pare-feu autorise ces connexions.
Pour accepter tout le trafic sur votre interface de bouclage, exécutez ces commandes :
Autoriser les connexions entrantes établies et connexes
Comme le trafic réseau doit généralement être bidirectionnel – entrant et sortant – pour fonctionner correctement, il est typique de créer une règle de pare-feu qui autorise le trafic entrant établi et connexe, de sorte que le serveur autorisera le trafic de retour pour les connexions sortantes initiées par le serveur lui-même. Cette commande permettra cela :
Autoriser les connexions sortantes établies
Vous voudrez peut-être autoriser le trafic sortant de toutes les connexions établies, qui sont généralement la réponse à des connexions entrantes légitimes. Cette commande le permettra :
Autorisation du réseau interne pour accéder à l’externe
En supposant que eth0
soit votre réseau externe et eth1
votre réseau interne, cela permettra à votre interne d’accéder à l’externe :
Suppression des paquets invalides
Certains paquets de trafic réseau sont marqués comme invalides. Parfois, il peut être utile de journaliser ce type de paquet, mais souvent, il est acceptable de les supprimer. Faites-le avec cette commande :
Blocage d’une adresse IP
Pour bloquer les connexions réseau qui proviennent d’une adresse IP spécifique, par exemple 203.0.113.51
, exécutez cette commande :
Dans cet exemple, -s 203.0.113.51
spécifie une adresse IP source de « 203.0.113.51 ». L’adresse IP source peut être spécifiée dans n’importe quelle règle de pare-feu, y compris une règle autoriser.
Si vous souhaitez rejeter la connexion au lieu de cela, ce qui répondra à la demande de connexion avec une erreur « connexion refusée », remplacez « DROP » par « REJECT » comme ceci :
Blocage des connexions à une interface réseau
Pour bloquer les connexions en provenance d’une adresse IP spécifique, par exemple 203.0.113.51
, vers une interface réseau spécifique, par exemple eth0
, utilisez cette commande :
C’est la même chose que dans l’exemple précédent, avec l’ajout de -i eth0
. L’interface réseau peut être spécifiée dans n’importe quelle règle de pare-feu, et c’est un excellent moyen de limiter la règle à un réseau particulier.
Service : SSH
Si vous utilisez un serveur sans console locale, vous voudrez probablement autoriser les connexions SSH entrantes (port 22) afin de pouvoir vous connecter à votre serveur et le gérer. Cette section explique comment configurer votre pare-feu avec diverses règles liées à SSH.
Autoriser toutes les connexions entrantes SSH
Pour autoriser toutes les connexions entrantes SSH, exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions SSH établies, n’est nécessaire que si la politique de OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser les connexions entrantes SSH à partir d’une adresse IP spécifique ou d’un sous-réseau
Pour autoriser les connexions entrantes SSH à partir d’une adresse IP spécifique ou d’un sous-réseau, spécifiez la source. Par exemple, si vous souhaitez autoriser l’intégralité du sous-réseau 203.0.113.0/24
, exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions SSH établies, n’est nécessaire que si la politique de OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser les connexions sortantes SSH
Si votre politique de pare-feu pour la sortie (OUTPUT
) n’est pas définie sur ACCEPT
, et que vous souhaitez autoriser les connexions SSH sortantes, c’est-à-dire votre serveur initiant une connexion SSH vers un autre serveur, vous pouvez exécuter ces commandes :
Autoriser l’arrivée de Rsync depuis une adresse IP spécifique ou un sous-réseau
Rsync, qui fonctionne sur le port 873, peut être utilisé pour transférer des fichiers d’un ordinateur à un autre.
Pour autoriser les connexions entrantes de rsync depuis une adresse IP spécifique ou un sous-réseau, spécifiez l’adresse IP source et le port de destination. Par exemple, si vous souhaitez autoriser l’ensemble du sous-réseau 203.0.113.0/24
à pouvoir utiliser rsync vers votre serveur, exécutez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions rsync établies, n’est nécessaire que si la politique de OUTPUT
n’est pas définie sur ACCEPT
.
Service : Serveur Web
Les serveurs Web, tels qu’Apache et Nginx, écoutent généralement les requêtes sur les ports 80 et 443 pour les connexions HTTP et HTTPS, respectivement. Si votre politique par défaut pour le trafic entrant est définie sur drop ou deny, vous voudrez créer des règles qui permettront à votre serveur de répondre à ces requêtes.
Autoriser toutes les connexions HTTP entrantes
Pour autoriser toutes les connexions entrantes HTTP (port 80), exécutez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions HTTP établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser toutes les connexions HTTPS entrantes
Pour autoriser toutes les connexions entrantes HTTPS (port 443), exécutez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions HTTP établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser toutes les connexions HTTP et HTTPS entrantes
Si vous souhaitez autoriser à la fois le trafic HTTP et HTTPS, vous pouvez utiliser le module multiport pour créer une règle qui autorise les deux ports. Pour autoriser toutes les connexions entrantes HTTP et HTTPS (port 443), exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions HTTP et HTTPS établies, n’est nécessaire que si la politique OUTPUT n’est pas définie sur ACCEPT.
Service: MySQL
MySQL écoute les connexions client sur le port 3306. Si votre serveur de base de données MySQL est utilisé par un client sur un serveur distant, vous devez vous assurer d’autoriser ce trafic.
Autoriser MySQL à partir d’une adresse IP ou d’un sous-réseau spécifique
Pour autoriser les connexions MySQL entrantes à partir d’une adresse IP ou d’un sous-réseau spécifique, spécifiez la source. Par exemple, si vous souhaitez autoriser l’ensemble du sous-réseau 203.0.113.0/24, exécutez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions MySQL établies, n’est nécessaire que si la politique OUTPUT n’est pas définie sur ACCEPT.
Autoriser MySQL sur une interface réseau spécifique
Pour autoriser les connexions MySQL à une interface réseau spécifique, par exemple une interface réseau privée eth1
, utilisez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions MySQL établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Service : PostgreSQL
PostgreSQL écoute les connexions clientes sur le port 5432. Si votre serveur de base de données PostgreSQL est utilisé par un client sur un serveur distant, assurez-vous d’autoriser ce trafic.
PostgreSQL à partir d’une adresse IP spécifique ou d’un sous-réseau
Pour autoriser les connexions entrantes PostgreSQL à partir d’une adresse IP spécifique ou d’un sous-réseau, spécifiez la source. Par exemple, si vous voulez autoriser l’ensemble du sous-réseau 203.0.113.0/24
, exécutez ces commandes :
La deuxième commande, qui autorise le trafic sortant des connexions PostgreSQL établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser PostgreSQL sur une Interface Réseau Spécifique
Pour permettre les connexions PostgreSQL sur une interface réseau spécifique – disons que vous avez une interface réseau privée eth1
, par exemple – utilisez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions PostgreSQL établies, est seulement nécessaire si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Service : Courrier
Les serveurs de messagerie, tels que Sendmail et Postfix, écoutent sur divers ports selon les protocoles utilisés pour la livraison de courrier. Si vous exécutez un serveur de messagerie, déterminez quels protocoles vous utilisez et autorisez les types de trafic appropriés. Nous vous montrerons également comment créer une règle pour bloquer le courrier SMTP sortant.
Blocage du Courrier SMTP Sortant
Si votre serveur ne devrait pas envoyer de courrier sortant, vous voudrez peut-être bloquer ce type de trafic. Pour bloquer le courrier SMTP sortant, qui utilise le port 25, exécutez cette commande :
Cela configure iptables pour rejeter tout le trafic sortant sur le port 25. Si vous devez rejeter un autre service par son numéro de port, au lieu du port 25, remplacez ce numéro de port par le 25
ci-dessus.
Autoriser tous les e-mails entrants SMTP
Pour permettre à votre serveur de répondre aux connexions SMTP sur le port 25, exécutez ces commandes:
La deuxième commande, qui autorise le trafic sortant des connexions SMTP établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser tous les e-mails entrants IMAP
Pour permettre à votre serveur de répondre aux connexions IMAP, port 143, exécutez ces commandes:
La deuxième commande, qui autorise le trafic sortant des connexions IMAP établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser tous les e-mails entrants IMAPS
Pour permettre à votre serveur de répondre aux connexions IMAPS sur le port 993, exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions IMAPS établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser toutes les connexions entrantes POP3
Pour permettre à votre serveur de répondre aux connexions POP3 sur le port 110, exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions POP3 établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Autoriser toutes les connexions entrantes POP3S
Pour permettre à votre serveur de répondre aux connexions POP3S sur le port 995, exécutez ces commandes :
La deuxième commande, qui permet le trafic sortant des connexions POP3S établies, n’est nécessaire que si la politique OUTPUT
n’est pas définie sur ACCEPT
.
Conclusion
Cela devrait couvrir bon nombre des commandes couramment utilisées lors de la configuration d’un pare-feu iptables. Bien sûr, iptables est un outil très flexible, donc n’hésitez pas à mélanger et assortir les commandes avec différentes options pour répondre à vos besoins spécifiques s’ils ne sont pas couverts ici.
Si vous cherchez de l’aide pour déterminer comment votre pare-feu devrait être configuré, consultez ce tutoriel : Comment choisir une politique de pare-feu efficace pour sécuriser vos serveurs.