Iptables Essentials: règles et commandes de pare-feu communes

introduction

Iptables est le pare-feu logiciel inclus par défaut avec la plupart des distributions Linux. Ce guide de style aide-mémoire fournit une référence rapide aux commandes iptables qui créeront des règles de pare-feu sont utiles dans les scénarios courants et courants. Cela inclut des exemples iptables d’autorisation et de blocage de divers services par port, interface réseau et adresse IP source.

Comment utiliser ce guide
  • Si vous commencez à peine à configurer votre pare-feu iptables, consultez notre https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14 -04 [introduction à iptables]

  • La plupart des règles décrites ici supposent que iptables soit défini sur * DROP * trafic entrant, via la stratégie d’entrée par défaut, et que vous souhaitez autoriser le trafic de manière sélective dans

  • Utilisez les sections suivantes applicables à ce que vous essayez d’atteindre. La plupart des sections ne sont basées sur aucune autre, vous pouvez donc utiliser les exemples ci-dessous indépendamment

  • Utilisez le menu Contenu situé à droite de cette page (en largeur large) ou la fonction de recherche de votre navigateur pour localiser les sections dont vous avez besoin.

  • Copiez et collez les exemples de ligne de commande donnés en remplaçant les valeurs en rouge par vos propres valeurs.

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 le 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 simplement de la placer au début de la chaîne en ne spécifiant pas un numéro de règle.) ).

N’oubliez pas 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!

Règles de sauvegarde

Les règles Iptables sont éphémères, ce qui signifie qu’elles doivent être sauvegardées manuellement pour pouvoir persister après un redémarrage.

Ubuntu

Sur Ubuntu, le moyen le plus simple de sauvegarder les règles iptables pour survivre à un redémarrage consiste à utiliser le paquetage + iptables-persistent. Installez-le avec apt-get comme ceci:

sudo apt-get install iptables-persistent

Au cours de l’installation, vous serez invité à indiquer si vous souhaitez enregistrer vos règles de pare-feu actuelles.

Si vous mettez à jour vos règles de pare-feu et souhaitez enregistrer les modifications, exécutez la commande suivante:

sudo netfilter-persistent save

Sur les versions d’Ubuntu antérieures à 16.04, exécutez cette commande à la place:

sudo invoke-rc.d iptables-persistent save

CentOS 6 et plus

Sur CentOS 6 et versions antérieures, CentOS 7 utilise FirewallD par défaut. Vous pouvez utiliser le script d’initialisation + iptables + pour enregistrer vos règles iptables:

sudo service iptables save

Cela sauvegardera vos règles iptables actuelles dans le fichier + / etc / sysconfig / iptables +.

Liste et suppression de règles

Si vous souhaitez savoir comment répertorier et supprimer des règles iptables, consultez ce didacticiel: How To Lister et supprimer les règles du pare-feu Iptables.

Règles généralement utiles

Cette section inclut une variété de commandes iptables qui créeront des règles généralement utiles sur la plupart des serveurs.

Autoriser les connexions en boucle

L’interface * loopback *, également appelée + lo +, est ce qu’un ordinateur utilise pour transférer les connexions réseau à lui-même. Par exemple, si vous exécutez + ping localhost + ou + ping 127.0.0.1 +, votre serveur s’exécutera lui-même à l’aide du bouclage. 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:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Autoriser les connexions entrantes établies et associées

Comme le trafic réseau doit généralement fonctionner correctement dans les deux sens (entrants et sortants), il est typique de créer une règle de pare-feu autorisant le trafic entrant * établi * et * associé *, afin que le serveur autorise le trafic de retour vers les connexions sortantes. initié par le serveur lui-même. Cette commande permettra que:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Autoriser les connexions sortantes établies

Vous souhaiterez peut-être autoriser le trafic sortant de toutes les connexions * établies *, qui constituent généralement la réponse aux connexions entrantes légitimes. Cette commande permettra que:

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Interne à externe

En supposant que + eth0 + est votre réseau externe et + eth1 + est votre réseau interne, cela permettra à votre interne d’accéder à l’externe:

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Supprimer les paquets non valides

Certains paquets de trafic réseau sont marqués comme * invalides *. Parfois, il peut être utile de consigner ce type de paquet, mais il est souvent préférable de les supprimer. Faites-le avec cette commande:

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Bloquer une adresse IP

Pour bloquer les connexions réseau provenant d’une adresse IP spécifique, par exemple + 15.15.15.51 +, exécutez la commande suivante:

sudo iptables -A INPUT -s  -j DROP

Dans cet exemple, + -s 15.15.15.51 + spécifie une adresse IP * source * de «15.15.15.51». L’adresse IP source peut être spécifiée dans n’importe quelle règle de pare-feu, y compris une règle * allow *.

Si vous souhaitez plutôt * rejeter * la connexion, qui répondra à la demande de connexion avec une erreur «connexion refusée», remplacez «DROP» par «REJECT» comme ceci:

sudo iptables -A INPUT -s  -j REJECT

Bloquer les connexions à une interface réseau

Pour bloquer les connexions à partir d’une adresse IP spécifique, par ex. + 15.15.15.51 +, à une interface réseau spécifique, par exemple. + eth0 +, utilisez cette commande:

iptables -A INPUT -i  -s  -j DROP

Ceci est identique à 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 constitue un excellent moyen de limiter la règle à un réseau particulier.

Service: SSH

Si vous utilisez un serveur cloud, vous souhaiterez probablement autoriser les connexions SSH entrantes (port 22) afin que vous puissiez vous connecter et gérer votre serveur. Cette section explique comment configurer votre pare-feu avec diverses règles liées à SSH.

Autoriser tous les SSH entrants

Pour autoriser toutes les connexions SSH entrantes, exécutez ces commandes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * SSH, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser SSH entrant à partir d’une adresse IP spécifique ou d’un sous-réseau

Pour autoriser les connexions SSH 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’intégralité du sous-réseau + 15.15.15.0 / 24 +, exécutez les commandes suivantes:

sudo iptables -A INPUT -p tcp -s  --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * SSH, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser le SSH sortant

Si votre stratégie de pare-feu + OUTPUT + n’est pas définie sur + ACCEPT + et que vous souhaitez autoriser les connexions SSH sortantes (votre serveur établissant une connexion SSH sur un autre serveur), vous pouvez exécuter ces commandes:

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

Autoriser Rsync entrant à partir d’une adresse IP ou d’un sous-réseau spécifique

Rsync, qui fonctionne sur le port 873, peut être utilisé pour transférer des fichiers d’un ordinateur à un autre.

Pour autoriser les connexions rsync entrantes à partir d’une adresse IP ou d’un sous-réseau spécifique, spécifiez l’adresse IP source et le port de destination. Par exemple, si vous souhaitez autoriser l’ensemble du sous-réseau + 15.15.15.0 / 24 + à rsync sur votre serveur, exécutez les commandes suivantes:

sudo iptables -A INPUT -p tcp -s  --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * rsync, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Service: serveur Web

Les serveurs Web, tels qu’Apache et Nginx, écoutent généralement les demandes sur les ports 80 et 443 pour les connexions HTTP et HTTPS, respectivement. Si votre stratégie par défaut pour le trafic entrant est définie pour être supprimée ou refusée, vous souhaiterez créer des règles permettant à votre serveur de répondre à ces demandes.

Autoriser tous les HTTP entrants

Pour autoriser toutes les connexions HTTP entrantes (port 80), exécutez ces commandes:

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

La deuxième commande, qui autorise le trafic sortant des connexions HTTP * établies *, n’est nécessaire que si la stratégie + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les HTTPS entrants

Pour autoriser toutes les connexions HTTPS entrantes (port 443), exécutez ces commandes:

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

La deuxième commande, qui autorise le trafic sortant des connexions HTTP * établies *, n’est nécessaire que si la stratégie + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les HTTP et HTTPS entrants

Si vous souhaitez autoriser le trafic HTTP et HTTPS, vous pouvez utiliser le module * multiport * pour créer une règle autorisant les deux ports. Pour autoriser toutes les connexions HTTP et HTTPS (port 443) entrantes, exécutez ces commandes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * HTTP et HTTPS, n’est nécessaire que si la stratégie + 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 spécifique ou d’un sous-réseau

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’intégralité du sous-réseau + 15.15.15.0 / 24 +, exécutez les commandes suivantes:

sudo iptables -A INPUT -p tcp -s  --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * MySQL, 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, vous avez une interface réseau privée + eth1 +, utilisez par exemple les commandes suivantes:

sudo iptables -A INPUT -i  -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o  -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * MySQL, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Service: PostgreSQL

PostgreSQL écoute les connexions client sur le port 5432. Si votre serveur de base de données PostgreSQL est utilisé par un client sur un serveur distant, vous devez être sûr d’autoriser ce trafic.

PostgreSQL depuis une adresse IP spécifique ou un sous-réseau

Pour autoriser les connexions PostgreSQL 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’intégralité du sous-réseau + 15.15.15.0 / 24 +, exécutez les commandes suivantes:

sudo iptables -A INPUT -p tcp -s  --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * PostgreSQL, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser PostgreSQL vers une interface réseau spécifique

Pour autoriser les connexions PostgreSQL vers une interface réseau spécifique, par exemple, vous disposez d’une interface réseau privée + eth1 +, par exemple, utilisez les commandes suivantes:

sudo iptables -A INPUT -i  -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o  -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

La deuxième commande, qui autorise le trafic sortant des connexions * établies * PostgreSQL, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Service: courrier

Les serveurs de messagerie, tels que Sendmail et Postfix, écoutent sur différents ports en fonction des protocoles utilisés pour la distribution du courrier. Si vous utilisez un serveur de messagerie, déterminez les protocoles que 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.

Bloquer le courrier SMTP sortant

Si votre serveur ne doit pas envoyer de courrier sortant, vous pouvez bloquer ce type de trafic. Pour bloquer le courrier SMTP sortant, qui utilise le port 25, exécutez cette commande:

sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Ceci configure iptables pour * rejeter * tout le trafic sortant sur le port 25. Si vous devez rejeter un service différent par son numéro de port, remplacez-le simplement au port 25.

Autoriser tous les SMTP entrants

Pour permettre à votre serveur de répondre aux connexions SMTP, port 25, exécutez les commandes suivantes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * SMTP, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les IMAP entrants

Pour permettre à votre serveur de répondre aux connexions IMAP, port 143, exécutez les commandes suivantes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * IMAP, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les IMAPS entrants

Pour permettre à votre serveur de répondre aux connexions IMAPS, port 993, exécutez les commandes suivantes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * IMAPS, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les POP3 entrants

Pour permettre à votre serveur de répondre aux connexions POP3, port 110, exécutez les commandes suivantes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * POP3, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Autoriser tous les POP3S entrants

Pour permettre à votre serveur de répondre aux connexions POP3S, port 995, exécutez les commandes suivantes:

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

La deuxième commande, qui autorise le trafic sortant des connexions * établies * POP3S, n’est nécessaire que si la politique + OUTPUT + n’est pas définie sur + ACCEPT +.

Conclusion

Cela devrait couvrir la plupart des commandes couramment utilisées lors de la configuration d’un pare-feu iptables. Bien sûr, iptables est un outil très flexible, alors n’hésitez pas à mélanger les commandes avec différentes options pour répondre à vos besoins spécifiques si elles ne sont pas traitées ici.

Si vous avez besoin d’aide pour déterminer la configuration de votre pare-feu, consultez ce tutoriel: https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-firewall-policy-to -secure-your-servers [Comment choisir une politique de pare-feu efficace pour sécuriser vos serveurs].

Bonne chance!

Related