Recherche de site Web

25 règles de pare-feu IPtable utiles que tout administrateur Linux devrait connaître


La gestion du trafic réseau est l’une des tâches les plus difficiles auxquelles les administrateurs système doivent faire face. Il doit configurer le pare-feu de manière à ce qu'il réponde aux exigences du système et des utilisateurs pour les connexions entrantes et sortantes, sans laisser le système vulnérable aux attaques.

C'est là que iptables s'avère utile. Iptables est un pare-feu en ligne de commande Linux qui permet aux administrateurs système de gérer le trafic entrant et sortant via un ensemble de règles de table configurables.

Iptables utilise un ensemble de tables comportant des chaînes contenant un ensemble de règles intégrées ou définies par l'utilisateur. Grâce à eux, un administrateur système peut filtrer correctement le trafic réseau de son système.

Selon le manuel iptables, il existe actuellement 3 types de tables :

    1. FILTER – il s'agit de la table par défaut, qui contient les chaînes intégrées pour :

      1. INPUT – packages destinés aux sockets locaux
      2. FORWARD – paquets acheminés via le système
      3. OUTPUT – paquets générés localement
    2. NAT – une table consultée lorsqu'un paquet tente de créer une nouvelle connexion. Il intègre les éléments suivants :

      1. PREROUTING – utilisé pour modifier un paquet dès sa réception
      2. OUTPUT – utilisé pour modifier les paquets générés localement
      3. POSTROUTING – utilisé pour modifier les paquets lorsqu'ils sont sur le point de sortir
    3. MANGLE – cette table est utilisée pour la modification des paquets. Jusqu'à la version 2.4 du noyau, cette table ne comportait que deux chaînes, mais elles sont désormais au nombre de 5 :

      1. PREROUTING – pour modifier les connexions entrantes
      2. OUTPUT – pour modifier les paquets générés localement
      3. INPUT – pour les paquets entrants
      4. POSTROUTING – pour modifier les paquets lorsqu'ils sont sur le point de sortir
      5. FORWARD – pour les paquets acheminés via la boîte

Dans cet article, vous verrez quelques commandes utiles qui vous aideront à gérer le pare-feu de votre machine Linux via iptables. Pour les besoins de cet article, je commencerai par les commandes les plus simples et passerai aux commandes les plus complexes jusqu'à la fin.

1. Démarrer/Arrêter/Redémarrer le pare-feu Iptables

Tout d'abord, vous devez savoir comment gérer le service iptables dans différentes distributions Linux. C'est assez simple :

Sur les distributions Linux basées sur SystemD

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

Sur les distributions Linux basées sur SysVinit

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Vérifiez toutes les règles de pare-feu IPtables

Si vous souhaitez vérifier vos règles existantes, utilisez la commande suivante :

iptables -L -n -v

Cela devrait renvoyer un résultat similaire à celui ci-dessous :

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Si vous préférez vérifier les règles d'une table spécifique, vous pouvez utiliser l'option -t suivie de la table que vous souhaitez vérifier. Par exemple, pour vérifier les règles dans la table NAT, vous pouvez utiliser :

iptables -t nat -L -v -n

3. Bloquer une adresse IP spécifique dans le pare-feu IPtables

Si vous découvrez une activité inhabituelle ou abusive à partir d'une adresse IP, vous pouvez bloquer cette adresse IP avec la règle suivante :

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Où vous devez changer "xxx.xxx.xxx.xxx" avec l'adresse IP réelle. Soyez très prudent lorsque vous exécutez cette commande car vous pouvez accidentellement bloquer votre propre adresse IP. L'option -A ajoute la règle à la fin de la chaîne sélectionnée.

Si vous souhaitez uniquement bloquer le trafic TCP provenant de cette adresse IP, vous pouvez utiliser l'option -p qui spécifie le protocole. De cette façon, la commande ressemblera à ceci :

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Débloquer l'adresse IP dans le pare-feu IPtables

Si vous avez décidé de ne plus bloquer les requêtes provenant d'une adresse IP spécifique, vous pouvez supprimer la règle de blocage avec la commande suivante :

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

L'option -D supprime une ou plusieurs règles de la chaîne sélectionnée. Si vous préférez utiliser l'option plus longue, vous pouvez utiliser --delete.

5. Bloquer un port spécifique sur le pare-feu IPtables

Parfois, vous souhaiterez peut-être bloquer les connexions entrantes ou sortantes sur un port spécifique. C’est une bonne mesure de sécurité et vous devriez vraiment y réfléchir lors de la configuration de votre pare-feu.

Pour bloquer les connexions sortantes sur un port spécifique, utilisez :

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Pour autoriser les connexions entrantes, utilisez :

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

Dans les deux exemples, remplacez "xxx" par le port réel que vous souhaitez autoriser. Si vous souhaitez bloquer le trafic UDP au lieu du trafic TCP, remplacez simplement "tcp" par "udp" dans le champ au-dessus de la règle iptables.

6. Autoriser plusieurs ports sur les tables IP à l'aide de Multiport

Vous pouvez autoriser plusieurs ports à la fois, en utilisant multiport. Vous trouverez ci-dessous cette règle pour les connexions entrantes et sortantes :

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Autoriser une plage réseau spécifique sur un port particulier sur les tables IP

Vous souhaiterez peut-être limiter certaines connexions sur un port spécifique à un réseau donné. Supposons que vous souhaitiez autoriser les connexions sortantes sur le port 22 vers le réseau 192.168.100.0/24.

Vous pouvez le faire avec cette commande :

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Bloquer Facebook sur le pare-feu IPtables

Certains employeurs aiment bloquer l'accès à Facebook à leurs employés. Vous trouverez ci-dessous un exemple comment bloquer le trafic vers Facebook.

Remarque : Si vous êtes administrateur système et devez appliquer ces règles, gardez à l'esprit que vos collègues peuvent cesser de vous parler :)

Recherchez d’abord les adresses IP utilisées par Facebook :

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Vous pouvez ensuite bloquer ce réseau Facebook avec :

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Gardez à l'esprit que la plage d'adresses IP utilisée par Facebook peut varier selon votre pays.

9. Configurer la redirection de port dans IPtables

Parfois, vous souhaiterez peut-être transférer le trafic d’un service vers un autre port. Vous pouvez y parvenir avec la commande suivante :

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

La commande ci-dessus transfère tout le trafic entrant sur l'interface réseau eth0, du port 25 au port 2525. Vous pouvez changer les ports avec ceux dont vous avez besoin.

10. Bloquer l'inondation du réseau sur le port Apache avec IPtables

Parfois, les adresses IP peuvent demander trop de connexions vers les ports Web de votre site Web. Cela peut entraîner un certain nombre de problèmes et pour éviter de tels problèmes, vous pouvez utiliser la règle suivante :

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

La commande ci-dessus limite les connexions entrantes par minute à 100 et définit une limite de rafale à 200. Vous pouvez modifier la limite et la limite-rafale selon vos propres besoins spécifiques.

11. Bloquer les requêtes Ping entrantes sur IPtables

Certains administrateurs système aiment bloquer les requêtes ping entrantes pour des raisons de sécurité. Même si la menace n’est pas si grande, il est bon de savoir comment bloquer une telle demande :

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Autoriser l'accès en boucle

L'accès en boucle (accès depuis 127.0.0.1) est important et vous devez toujours le laisser actif :

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

13. Conserver un journal des paquets réseau abandonnés sur IPtables

Si vous souhaitez enregistrer les paquets abandonnés sur l'interface réseau eth0, vous pouvez utiliser la commande suivante :

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Vous pouvez modifier la valeur après "--log-prefix" avec quelque chose de votre choix. Les messages sont enregistrés dans /var/log/messages et vous pouvez les rechercher avec :

grep "IPtables dropped packets:" /var/log/messages

14. Bloquer l'accès à une adresse MAC spécifique sur IPtables

Vous pouvez bloquer l'accès à votre système à partir d'une adresse MAC spécifique en utilisant :

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Bien sûr, vous devrez remplacer "00:00:00:00:00:00" par l'adresse MAC réelle que vous souhaitez bloquer.

15. Limiter le nombre de connexions simultanées par adresse IP

Si vous ne souhaitez pas établir trop de connexions simultanées à partir d’une seule adresse IP sur un port donné, vous pouvez utiliser la commande ci-dessous :

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

La commande ci-dessus n'autorise pas plus de 3 connexions par client. Bien entendu, vous pouvez modifier le numéro de port pour qu'il corresponde à un autre service. De plus, le --connlimit-above doit être modifié pour répondre à vos besoins.

16. Recherche dans la règle IPtables

Une fois que vous avez défini vos règles iptables, vous souhaiterez effectuer des recherches de temps en temps et devrez peut-être les modifier. Un moyen simple de rechercher dans vos règles consiste à utiliser :

iptables -L $table -v -n | grep $string

Dans l'exemple ci-dessus, vous devrez remplacer $table par la table réelle dans laquelle vous souhaitez rechercher et $string par la chaîne réelle que vous recherchez.

Voici un exemple:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Définir une nouvelle chaîne IPTables

Avec iptables, vous pouvez définir votre propre chaîne et y stocker des règles personnalisées. Pour définir une chaîne, utilisez :

iptables -N custom-filter

Vous pouvez maintenant vérifier si votre nouveau filtre est là :

iptables -L
Exemple de sortie
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Vider les chaînes ou les règles du pare-feu IPtables

Si vous souhaitez vider vos chaînes de pare-feu, vous pouvez utiliser :

iptables -F

Vous pouvez vider les chaînes d'une table spécifique avec :

iptables -t nat -F

Vous pouvez changer "nat" avec la table réelle des chaînes que vous souhaitez vider.

19. Enregistrer les règles IPtables dans un fichier

Si vous souhaitez enregistrer vos règles de pare-feu, vous pouvez utiliser la commande iptables-save. Vous pouvez utiliser les éléments suivants pour enregistrer et stocker vos règles dans un fichier :

iptables-save > ~/iptables.rules

C'est à vous de décider où stockerez-vous le fichier et comment vous le nommerez.

20. Restaurer les règles IPtables à partir d'un fichier

Si vous souhaitez restaurer une liste de règles iptables, vous pouvez utiliser iptables-restore. La commande ressemble à ceci :

iptables-restore < ~/iptables.rules

Bien entendu, le chemin d’accès à votre fichier de règles peut être différent.

21. Configurer les règles IPtables pour la conformité PCI

Certains administrateurs système peuvent être amenés à configurer leurs serveurs pour qu'ils soient compatibles PCI. Il existe de nombreuses exigences imposées par différents fournisseurs de conformité PCI, mais il existe peu d'exigences communes.

Dans la plupart des cas, vous aurez besoin de plusieurs adresses IP. Vous devrez appliquer les règles ci-dessous pour l’adresse IP du site. Soyez très prudent lorsque vous utilisez les règles ci-dessous et utilisez-les uniquement si vous êtes sûr de ce que vous faites :

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Si vous utilisez cPanel ou un panneau de configuration similaire, vous devrez peut-être également bloquer ses ports. Voici un exemple:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Remarque : Pour vous assurer que vous répondez aux exigences de votre fournisseur PCI, vérifiez attentivement son rapport et appliquez les règles requises. Dans certains cas, vous devrez peut-être également bloquer le trafic UDP sur certains ports.

22. Autoriser les connexions établies et associées

Comme le trafic réseau est séparé en entrée et en sortie, vous souhaiterez autoriser le trafic entrant établi et associé. Pour les connexions entrantes, faites-le avec :

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

Pour une utilisation sortante :

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

23. Supprimez les paquets invalides dans les tables IP

Il est possible que certains paquets réseau soient marqués comme invalides. Certaines personnes préféreront peut-être enregistrer ces packages, mais d'autres préféreront les supprimer. Pour supprimer les paquets invalides, vous pouvez utiliser :

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

24. Bloquer la connexion sur l'interface réseau

Certains systèmes peuvent avoir plusieurs interfaces réseau. Vous pouvez limiter l'accès à cette interface réseau ou bloquer les connexions à partir de certaines adresses IP.

Par exemple:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Remplacez « xxx.xxx.xxx.xxx » par l'adresse IP (ou le réseau) réelle que vous souhaitez bloquer.

25. Désactivez les courriers sortants via IPTables

Si votre système ne doit envoyer aucun e-mail, vous pouvez bloquer les ports sortants sur les ports SMTP. Par exemple, vous pouvez utiliser ceci :

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Conclusion

Iptables est un pare-feu puissant dont vous pouvez facilement bénéficier. Il est essentiel que chaque administrateur système apprenne au moins les bases d'iptables. Si vous souhaitez trouver des informations plus détaillées sur iptables et ses options, il est fortement recommandé de lire son manuel :

man iptables

Si vous pensez que nous devrions ajouter plus de commandes à cette liste, partagez-les avec nous en les soumettant dans la section commentaires ci-dessous.