GNU/Linux >> Tutoriels Linux >  >> Linux

25 exemples de règles Linux IPTables les plus fréquemment utilisés

À première vue, les règles IPTables peuvent sembler énigmatiques.

Dans cet article, j'ai donné 25 règles IPTables pratiques que vous pouvez copier/coller et utiliser selon vos besoins.

Ces exemples serviront de modèles de base pour vous permettre d'ajuster ces règles en fonction de vos besoins spécifiques.

Pour une référence facile, toutes ces 25 règles iptables sont au format de script shell :iptables-rules

1. Supprimer les règles existantes

Avant de commencer à créer un nouvel ensemble de règles, vous souhaiterez peut-être nettoyer toutes les règles par défaut et les règles existantes. Utilisez la commande iptables flush comme indiqué ci-dessous pour ce faire.

iptables -F
(or)
iptables --flush

2. Définir les stratégies de chaîne par défaut

La stratégie de chaîne par défaut est ACCEPTER. Changez ceci en DROP pour toutes les chaînes INPUT, FORWARD et OUTPUT comme indiqué ci-dessous.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Lorsque vous définissez la stratégie par défaut de la chaîne INPUT et OUTPUT sur DROP, pour chaque exigence de règle de pare-feu que vous avez, vous devez définir deux règles. c'est-à-dire un pour l'entrant et un pour le sortant.

Dans tous nos exemples ci-dessous, nous avons deux règles pour chaque scénario, car nous avons défini DROP comme stratégie par défaut pour les chaînes INPUT et OUTPUT.

Si vous faites confiance à vos utilisateurs internes, vous pouvez omettre la dernière ligne ci-dessus. c'est-à-dire ne pas abandonner tous les paquets sortants par défaut. Dans ce cas, pour chaque exigence de règle de pare-feu que vous avez, il vous suffit de définir une seule règle. c'est-à-dire définir la règle uniquement pour l'entrant, car le sortant est ACCEPTÉ pour tous les paquets.

Remarque : Si vous ne savez pas ce que signifie une chaîne, vous devez d'abord vous familiariser avec les principes de base d'IPTables.

3. Bloquer une adresse IP spécifique

Avant de continuer avec d'autres exemples, si vous souhaitez bloquer une adresse IP spécifique, vous devez d'abord le faire comme indiqué ci-dessous. Remplacez le "x.x.x.x" dans l'exemple suivant par l'adresse IP spécifique que vous souhaitez bloquer.

BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

Ceci est utile lorsque vous trouvez des activités étranges à partir d'une adresse IP spécifique dans vos fichiers journaux et que vous souhaitez bloquer temporairement cette adresse IP pendant que vous effectuez d'autres recherches.

Vous pouvez également utiliser l'une des variantes suivantes, qui bloque uniquement le trafic TCP sur la connexion eth0 pour cette adresse IP.

iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4. Autoriser TOUS les SSH entrants

Les règles suivantes autorisent TOUTES les connexions ssh entrantes sur l'interface eth0.

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Remarque  :Si vous souhaitez comprendre exactement ce que chacun des arguments signifie, vous devriez lire Comment ajouter des règles de pare-feu IPTables

5. Autoriser les SSH entrants uniquement à partir d'un réseau spécifique

Les règles suivantes autorisent les connexions ssh entrantes uniquement à partir du réseau 192.168.100.X.

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Dans l'exemple ci-dessus, au lieu de /24, vous pouvez également utiliser le masque de sous-réseau complet. c'est-à-dire "192.168.100.0/255.255.255.0".

6. Autoriser HTTP et HTTPS entrants

Les règles suivantes autorisent tout le trafic Web entrant. c'est-à-dire le trafic HTTP vers le port 80.

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Les règles suivantes autorisent tout le trafic Web sécurisé entrant. c'est-à-dire le trafic HTTPS vers le port 443.

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7. Combinez plusieurs règles ensemble à l'aide de MultiPorts

Lorsque vous autorisez les connexions entrantes du monde extérieur vers plusieurs ports, au lieu d'écrire des règles individuelles pour chaque port, vous pouvez les combiner à l'aide de l'extension multiport comme indiqué ci-dessous.

L'exemple suivant autorise tout le trafic entrant SSH, HTTP et HTTPS.

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8. Autoriser SSH sortant

Les règles suivantes autorisent la connexion ssh sortante. c'est-à-dire lorsque vous vous connectez en ssh de l'intérieur vers un serveur extérieur.

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Veuillez noter que ceci est légèrement différent de la règle entrante. c'est-à-dire que nous autorisons à la fois l'état NEW et ESTABLISHED sur la chaîne OUTPUT, et uniquement l'état ESTABLISHED sur la chaîne INPUT. Pour la règle entrante, c'est l'inverse.

9. Autoriser le SSH sortant uniquement vers un réseau spécifique

Les règles suivantes autorisent la connexion ssh sortante uniquement vers un réseau spécifique. c'est-à-dire que vous avez un ssh uniquement sur le réseau 192.168.100.0/24 de l'intérieur.

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10. Autoriser le HTTPS sortant

Les règles suivantes autorisent le trafic Web sécurisé sortant. Ceci est utile lorsque vous souhaitez autoriser le trafic Internet pour vos utilisateurs. Sur les serveurs, ces règles sont également utiles lorsque vous souhaitez utiliser wget pour télécharger des fichiers depuis l'extérieur.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Remarque :Pour le trafic Web HTTP sortant, ajoutez deux règles supplémentaires comme ci-dessus et remplacez 443 par 80.

11. Équilibrer la charge du trafic Web entrant

Vous pouvez également équilibrer la charge de votre trafic Web entrant à l'aide des règles de pare-feu iptables.

Ceci utilise la nième extension iptables. L'exemple suivant équilibre la charge du trafic HTTPS vers trois adresses IP différentes. Pour chaque 3e paquet, la charge est équilibrée vers le serveur approprié (en utilisant le compteur 0).

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12. Autoriser le ping de l'extérieur vers l'intérieur

Les règles suivantes autorisent les utilisateurs externes à envoyer un ping à vos serveurs.

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13. Autoriser le ping de l'intérieur vers l'extérieur

Les règles suivantes vous permettent de faire un ping depuis l'intérieur vers n'importe lequel des serveurs extérieurs.

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14. Autoriser l'accès en boucle

Vous devez autoriser l'accès en boucle complète sur vos serveurs. c'est-à-dire l'accès en utilisant 127.0.0.1

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

15. Autoriser le réseau interne au réseau externe.

Sur le serveur pare-feu où une carte Ethernet est connectée à l'externe et une autre carte Ethernet connectée aux serveurs internes, utilisez les règles suivantes pour autoriser le réseau interne à communiquer avec le réseau externe.

Dans cet exemple, eth1 est connecté au réseau externe (internet) et eth0 est connecté au réseau interne (par exemple :192.168.1.x).

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

16. Autoriser le DNS sortant

Les règles suivantes autorisent les connexions DNS sortantes.

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17. Autoriser les connexions NIS

Si vous exécutez NIS pour gérer vos comptes d'utilisateurs, vous devez autoriser les connexions NIS. Même lorsque la connexion SSH est autorisée, si vous n'autorisez pas les connexions ypbind liées à NIS, les utilisateurs ne pourront pas se connecter.

Les ports NIS sont dynamiques. c'est-à-dire que lorsque le ypbind démarre, il alloue les ports.

Faites d'abord un rpcinfo -p comme indiqué ci-dessous et obtenez les numéros de port. Dans cet exemple, il utilisait les ports 853 et 850.

rpcinfo -p | grep ypbind

Autorisez maintenant la connexion entrante au port 111 et aux ports utilisés par ypbind.

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

Ce qui précède ne fonctionnera pas lorsque vous redémarrez ypbind, car il aura des numéros de port différents à ce moment-là.

Il existe deux solutions à cela :1) Utilisez une adresse IP statique pour votre NIS, ou 2) Utilisez des techniques de script shell intelligentes pour récupérer automatiquement le numéro de port dynamique à partir de la sortie de la commande « rpcinfo -p », et utilisez celles ci-dessus. règles iptables.

18. Autoriser Rsync à partir d'un réseau spécifique

Les règles suivantes autorisent rsync uniquement à partir d'un réseau spécifique.

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19. Autoriser la connexion MySQL uniquement à partir d'un réseau spécifique

Si vous utilisez MySQL, vous ne souhaitez généralement pas autoriser une connexion directe depuis l'extérieur. Dans la plupart des cas, vous pouvez avoir un serveur Web exécuté sur le même serveur sur lequel la base de données MySQL s'exécute.

Cependant, les administrateurs de base de données et les développeurs peuvent avoir besoin de se connecter directement à MySQL à partir de leur ordinateur portable et de leur ordinateur de bureau à l'aide du client MySQL. Dans ce cas, vous pouvez autoriser votre réseau interne à communiquer directement avec MySQL, comme indiqué ci-dessous.

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20. Autoriser le trafic Sendmail ou Postfix

Les règles suivantes autorisent le trafic de messagerie. Cela peut être sendmail ou postfix.

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21. Autoriser IMAP et IMAPS

Les règles suivantes autorisent le trafic IMAP/IMAP2.

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

Les règles suivantes autorisent le trafic IMAPS.

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22. Autoriser POP3 et POP3S

Les règles suivantes autorisent l'accès POP3.

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

Les règles suivantes autorisent l'accès POP3S.

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23. Empêcher les attaques DoS

La règle iptables suivante vous aidera à empêcher l'attaque par déni de service (DoS) sur votre serveur Web.

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

Dans l'exemple ci-dessus :

  • -m limit :Ceci utilise l'extension limit iptables
  • –limit 25/minute :Cela ne limite qu'un maximum de 25 connexions par minute. Modifiez cette valeur en fonction de vos besoins spécifiques
  • –limit-burst 100 :cette valeur indique que la limite/minute ne sera appliquée qu'une fois que le nombre total de connexions aura atteint le niveau limit-burst.

24. Transfert de port

L'exemple suivant achemine tout le trafic qui arrive sur le port 442 vers 22. Cela signifie que la connexion ssh entrante peut provenir à la fois des ports 22 et 422.

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

Si vous faites ce qui précède, vous devez également autoriser explicitement la connexion entrante sur le port 422.

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

25. Journaliser les paquets perdus

Vous voudrez peut-être également consigner tous les paquets abandonnés. Ces règles doivent être en bas.

Tout d'abord, créez une nouvelle chaîne appelée LOGGING.

iptables -N LOGGING

Ensuite, assurez-vous que toutes les connexions entrantes restantes passent à la chaîne LOGGING comme indiqué ci-dessous.

iptables -A INPUT -j LOGGING

Ensuite, enregistrez ces paquets en spécifiant un "log-prefix" personnalisé.

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

Enfin, déposez ces paquets.

iptables -A LOGGING -j DROP

Toutes les 25 règles iptables ci-dessus sont au format de script shell :iptables-rules

Articles précédents de la série iptables :

  • Didacticiel sur le pare-feu Linux :Tables IPTables, chaînes, principes de base des règles
  • IPTables Flush :Supprimer / Supprimer toutes les règles sur RedHat et CentOS Linux
  • Linux IPTables :comment ajouter des règles de pare-feu (avec l'exemple Autoriser SSH)
  • Linux IPTables :exemples de règles entrantes et sortantes (SSH et HTTP)

Linux
  1. 40 commandes Linux de base utilisées fréquemment

  2. Les 7 espaces de noms Linux les plus utilisés

  3. 80 applications Linux essentielles les plus utilisées en 2021

  4. Commandes Linux les plus simples avec 10 exemples

  5. lsof :Exemples les plus couramment utilisés

Commandes Linux fréquemment utilisées par les administrateurs système Linux - Partie 4

Commandes Linux fréquemment utilisées par les administrateurs système Linux - Partie 3

Commandes Linux fréquemment utilisées par les administrateurs système Linux - Partie 2

Commandes Linux fréquemment utilisées par les administrateurs système Linux - Partie 1

Linux du Command Exemples les plus utiles

Comment sécuriser un pare-feu Linux avec les règles IPTables