Gestion du trafic réseau est l'une des tâches les plus difficiles auxquelles doivent faire face les administrateurs système. Il doit configurer le pare-feu de manière à répondre 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 ici que iptables
venir en pratique. Iptables est un pare-feu de 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 qui ont des chaînes qui contiennent 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 d'iptables, il existe actuellement 3 types de tables :
FILTRE
– il s'agit de la table par défaut, qui contient les chaînes intégrées pour: NAT
– une table qui est consultée lorsqu'un paquet essaie de créer une nouvelle connexion. Il a les éléments intégrés suivants: MUTILER
– cette table est utilisée pour la modification des paquets. Jusqu'à la version du noyau 2.4 cette table n'avait que deux chaînes, mais elles sont maintenant 5: Dans cet article, vous verrez quelques commandes utiles qui vous aideront à gérer votre pare-feu Linux via iptables. Pour les besoins de cet article, je vais commencer par des commandes plus simples et aller jusqu'à la fin avec des commandes plus complexes.
Tout d'abord, vous devez savoir comment gérer le service iptables dans différentes distributions Linux. C'est assez facile :
Sur Cent/RHEL 7 et Fedora 22+ # systemctl démarre iptables. # systemctl arrête iptables. # systemctl redémarre iptables.
Sur Cent/RHEL 6/5 et Fedora # /etc/init.d/iptables start # /etc/init.d/iptables stop. # /etc/init.d/iptables redémarre.
Si vous souhaitez vérifier vos règles existantes, utilisez la commande suivante :
# iptables -L -n -v.
Cela devrait renvoyer une sortie similaire à celle 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 ACCEPTER udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 ACCEPTER tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 ACCEPTER udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 67
Chaîne FORWARD (policy ACCEPT 0 paquets, 0 octets) pkts octets 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
SORTIE de chaîne (politique ACCEPTER 354K paquets, 185M octets) pkts octets cible prot opt in out source destination
Si vous préférez vérifier les règles d'une table spécifique, vous pouvez utiliser le -t
option suivie du tableau que vous souhaitez vérifier. Par exemple, pour vérifier les règles dans le NAT
tableau, vous pouvez utiliser :
# iptables -t nat -L -v -n.
Si vous trouvez 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. Le -UNE
L'option ajoute la règle à la fin de la chaîne sélectionnée.
Au cas où vous voudriez seulement bloquer TCP trafic à partir de cette adresse IP, vous pouvez utiliser le -p
option 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.
Si vous avez décidé de ne plus bloquer les demandes 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.
Le -RÉ
L'option 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 --effacer
.
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 penser lors de la configuration de votre pare-feu.
Pour bloquer les connexions sortantes sur un port spécifique, utilisez :
# iptables -A SORTIE -p tcp --dport xxx -j DROP.
Pour autoriser les connexions entrantes, utilisez :
# iptables -A INPUT -p tcp --dport xxx -j ACCEPTER.
Dans les deux exemples, changez "xxx"
avec le port réel que vous souhaitez autoriser. Si vous voulez bloquer UDP trafic au lieu de TCP, changez simplement "tcp"
avec "udp"
dans la règle iptables ci-dessus.
Vous pouvez autoriser plusieurs ports à la fois, en utilisant multiport, vous trouverez ci-dessous une telle 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.
Vous souhaiterez peut-être limiter certaines connexions sur un port spécifique à un réseau donné. Disons que vous voulez autoriser les connexions sortantes sur le port 22
réseauter 192.168.100.0/24
.
Tu peux le faire avec cette commande :
# iptables -A SORTIE -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT.
Certains employeurs aiment bloquer l'accès à Facebook à leurs employés. Vous trouverez ci-dessous un exemple de blocage du trafic vers Facebook.
Noter: Si vous êtes administrateur système et devez appliquer ces règles, gardez à l'esprit que vos collègues peuvent cesser de vous parler :)
Trouvez d'abord les adresses IP utilisées par Facebook :
# hôte facebook.com facebook.com a l'adresse 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 SORTIE -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 dans votre pays.
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.
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 de par minute à 100
et définit une rafale limite à 200
. Vous pouvez modifier la limite et la rafale de limite selon vos propres exigences spécifiques.
Certains administrateurs système aiment bloquer les requêtes ping entrantes pour des raisons de sécurité. Bien que la menace ne soit pas si grande, il est bon de savoir comment bloquer une telle demande :
# iptables -A INPUT -p icmp -i eth0 -j DROP.
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 SORTIE -o lo -j ACCEPTER.
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 a abandonné les paquets :"
Vous pouvez modifier la valeur après "--log-prefix"
avec quelque chose de votre choix. Les messages sont connectés /var/log/messages
et vous pouvez les rechercher avec :
# grep "IPtables a abandonné les paquets :" /var/log/messages.
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 changer "00:00:00:00:00:00"
avec l'adresse MAC réelle que vous souhaitez bloquer.
Si vous ne voulez pas avoir trop de connexions simultanées établies à 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 ne permet pas plus de 3
connexions par client. Bien sûr, vous pouvez modifier le numéro de port pour qu'il corresponde à un service différent. Également --connlimit-above
doit être modifié pour correspondre à vos besoins.
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 $chaîne.
Dans l'exemple ci-dessus, vous devrez modifier $table
avec le tableau dans lequel vous souhaitez rechercher et $chaîne
avec la chaîne réelle que vous recherchez.
Voici un exemple:
# iptables -L ENTRÉE -v -n | grep 192.168.0.100.
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 filtre personnalisé.
Vous pouvez maintenant vérifier si votre nouveau filtre est présent :
# iptables -L.
Chaîne INPUT (politique ACCEPTER) cible prot opt source destination.
Chaîne FORWARD (politique ACCEPTER) cible prot opt source destination
SORTIE de chaîne (politique ACCEPTER) cible prot opt source destination
Chaîne Filtre personnalisé(0 références) cible prot opt source destination
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.
Si vous souhaitez enregistrer vos règles de pare-feu, vous pouvez utiliser le iptables-sauvegarder
commander. 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ù allez-vous stocker le fichier et comment vous le nommerez.
Si vous souhaitez restaurer une liste de règles iptables, vous pouvez utiliser iptables-restaurer
. La commande ressemble à ceci :
# iptables-restore < ~/iptables.rules.
Bien sûr, le chemin d'accès à votre fichier de règles peut être différent.
Certains administrateurs système peuvent être amenés à configurer leurs serveurs pour qu'ils soient compatibles PCI. Il existe de nombreuses exigences par différents fournisseurs de conformité PCI, mais il y en a peu de 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.
Noter: 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.
Comme le trafic réseau est séparé en entrant et en sortant, vous souhaiterez autoriser le trafic entrant établi et associé. Pour les connexions entrantes, faites-le avec :
# iptables -A INPUT -m conntrack --ctstate ÉTABLI, ASSOCIÉ -j ACCEPT.
Pour une utilisation sortante :
# iptables -A SORTIE -m conntrack --ctstate ESTABLISHED -j ACCEPT.
Il est possible que certains paquets réseau soient marqués comme non valides. Certaines personnes peuvent préférer enregistrer ces packages, mais d'autres préfèrent les supprimer. Pour supprimer les paquets invalides, vous pouvez utiliser :
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
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.
Changement "xxx.xxx.xxx.xxx" avec l'adresse IP réelle (ou réseau) que vous souhaitez bloquer.
Si votre système ne doit pas envoyer d'e-mails, vous pouvez bloquer les ports sortants sur les ports SMTP. Par exemple, vous pouvez utiliser ceci :
# iptables -A SORTIE -p tcp --dports 25 465 587 -j REJECT.
Iptables est un pare-feu puissant dont vous pouvez facilement bénéficier. Il est vital pour chaque administrateur système d'apprendre 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, veuillez les partager avec nous, en les soumettant dans la section commentaires ci-dessous.