À 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)