introduction
Iptables est un pare-feu qui joue un rôle essentiel dans la sécurité du réseau pour la plupart des systèmes Linux. Alors que de nombreux tutoriels iptables vous apprendront https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-candsandshow pour créer des règles de pare-feu pour sécuriser votre serveur], celui-ci portera sur sur un aspect différent de la gestion du pare-feu: lister et supprimer des règles.
Dans ce tutoriel, nous expliquerons comment effectuer les tâches iptables suivantes:
-
Règles de liste
-
Effacer les compteurs de paquets et d’octets
-
Supprimer les règles
-
Chaînes vides (supprimer toutes les règles d’une chaîne)
-
Vider toutes les chaînes et les tables, supprimer toutes les chaînes et accepter tout le trafic
Conditions préalables
Avant de commencer à utiliser ce didacticiel, vous devez avoir un compte superutilisateur distinct, non root, un utilisateur disposant de privilèges sudo et configuré sur votre serveur. Si vous devez le configurer, suivez le guide approprié:
Voyons comment lister les règles en premier. Il existe deux manières différentes d’afficher vos règles iptables actives: dans un tableau ou sous forme de liste de spécifications de règles. Les deux méthodes fournissent à peu près les mêmes informations dans différents formats.
Liste des règles par spécification
Pour lister toutes les règles iptables actives par spécification, exécutez la commande + iptables +
avec l’option + -S +
:
sudo iptables -S
Example: Rule Specification Listing-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Comme vous pouvez le constater, la sortie ressemble à la commande utilisée pour la créer, sans la commande + iptables +
précédente. Cela ressemblera également aux fichiers de configuration des règles iptables, si vous avez déjà utilisé + iptables-persistent +
ou + + iptables save +
.
Liste spécifique à la chaîne
Si vous souhaitez limiter la sortie à une chaîne spécifique (+ INPUT
,` + OUTPUT`, + TCP
, etc.), vous pouvez spécifier le nom de la chaîne directement après l’option` + -S + . Par exemple, pour afficher toutes les spécifications de règles dans la chaîne `+ TCP +
, exécutez la commande suivante:
sudo iptables -S
Example: TCP Chain Rule Specification Listing-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Jetons un coup d’œil à la méthode alternative pour afficher les règles iptables actives, sous forme de tableau de règles.
Liste des règles sous forme de tableaux
Lister les règles iptables dans la vue table peut être utile pour comparer différentes règles les unes par rapport aux autres,
Pour sortir toutes les règles iptables actives dans une table, exécutez la commande + iptables +
avec l’option + -L +
:
sudo iptables -L
Cela affichera toutes les règles actuelles triées par chaîne.
Si vous souhaitez limiter la sortie à une chaîne spécifique (+ INPUT
,` + OUTPUT`, + TCP
, etc.), vous pouvez spécifier le nom de la chaîne directement après l’option` + -L + `.
Jetons un coup d’œil à un exemple de chaîne INPUT:
sudo iptables -L
Example: Input Chain Rule Table ListingChain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
La première ligne de sortie indique le nom de la chaîne (INPUT, dans ce cas), suivi de sa stratégie par défaut (DROP). La ligne suivante comprend les en-têtes de chaque colonne du tableau et est suivie des règles de la chaîne. Voyons ce que chaque en-tête indique:
-
* cible *: Si un paquet correspond à la règle, la cible spécifie ce qu’il faut en faire. Par exemple, un paquet peut être accepté, abandonné, enregistré ou envoyé à une autre chaîne pour être comparé à d’autres règles
-
* prot *: Le protocole, tel que
+ tcp +
, '+ udp +,
+ icmp +, ou
+ tous + ` -
* opt *: rarement utilisé, cette colonne indique les options IP
-
* source *: adresse IP source ou sous-réseau du trafic, ou
+ n’importe où +
-
* destination *: l’adresse IP de destination ou le sous-réseau du trafic, ou
+ n’importe où +
La dernière colonne, qui n’est pas libellée, indique les * options * d’une règle. C’est-à-dire toute partie de la règle qui n’est pas indiquée par les colonnes précédentes. Cela peut être n’importe quoi, depuis les ports source et destination, jusqu’à l’état de connexion du paquet.
Afficher le nombre de paquets et la taille globale
Lors de la liste des règles iptables, il est également possible d’afficher le nombre de paquets et la taille totale des paquets en octets correspondant à chaque règle. Ceci est souvent utile lorsque vous essayez de vous faire une idée approximative des règles qui correspondent aux paquets. Pour ce faire, utilisez simplement les options + -L +
et + -v +
.
Par exemple, regardons à nouveau la chaîne INPUT, avec l’option + -v +
:
sudo iptables -L -v
Example: Verbose ListingChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
Notez que la liste a maintenant deux colonnes supplémentaires, + pkts +
et + octets +
.
Maintenant que vous savez comment répertorier les règles de pare-feu actives de différentes manières, voyons comment réinitialiser les compteurs de paquets et d’octets.
Réinitialiser le nombre de paquets et la taille globale
Si vous souhaitez effacer ou mettre à zéro les compteurs de paquets et d’octets de vos règles, utilisez l’option + -Z +
. Ils réinitialisent également si un redémarrage se produit. Ceci est utile si vous voulez voir si votre serveur reçoit un nouveau trafic correspondant à vos règles existantes.
Pour effacer les compteurs de toutes les chaînes et règles, utilisez l’option + -Z +
par elle-même:
sudo iptables -Z
Pour effacer les compteurs de toutes les règles d’une chaîne spécifique, utilisez l’option + -Z +
et spécifiez la chaîne. Par exemple, pour effacer les compteurs de chaîne INPUT, exécutez la commande suivante:
sudo iptables -Z INPUT
Si vous souhaitez effacer les compteurs d’une règle spécifique, spécifiez le nom de la chaîne et le numéro de la règle. Par exemple, pour mettre à zéro les compteurs de la 1ère règle de la chaîne INPUT, exécutez ceci:
sudo iptables -Z INPUT 1
Maintenant que vous savez comment réinitialiser les compteurs de paquets et d’octets iptables, examinons les deux méthodes pouvant être utilisées pour les supprimer.
Supprimer la règle par spécification
L’un des moyens de supprimer les règles iptables consiste à spécifier une règle. Pour ce faire, vous pouvez exécuter la commande + iptables +
avec l’option + -D +
suivie de la spécification de la règle. Si vous souhaitez supprimer des règles à l’aide de cette méthode, vous pouvez utiliser la sortie de la liste des règles, + iptables -S +
, pour obtenir de l’aide.
Par exemple, si vous souhaitez supprimer la règle qui supprime les paquets entrants non valides (+ -A INPUT -m conntrack --ctstate INVALID -j DROP +
), vous pouvez exécuter cette commande:
sudo iptables -D
Notez que l’option + -A +
, utilisée pour indiquer la position de la règle au moment de la création, doit être exclue ici.
Supprimer la règle par chaîne et par numéro
L’autre moyen de supprimer les règles iptables consiste à * chaîne * et * numéro de ligne *. Pour déterminer le numéro de ligne d’une règle, répertoriez-les dans le format de tableau et ajoutez l’option + - line-numbers +
:
sudo iptables -L --line-numbers
[secondary_output Example Output: Rules with Line Numbers]
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
...
Cela ajoute le numéro de ligne à chaque ligne de la règle, indiqué par l’en-tête * num *.
Une fois que vous savez quelle règle vous souhaitez supprimer, notez la chaîne et le numéro de ligne de la règle. Puis exécutez la commande + iptables -D +
suivie de la chaîne et du numéro de règle.
Par exemple, si nous voulons supprimer la règle d’entrée qui supprime les paquets non valides, nous pouvons voir que c’est la règle + 3 +
de la chaîne + INPUT +
. Nous devrions donc lancer cette commande:
sudo iptables -D
Maintenant que vous savez comment supprimer des règles de pare-feu individuelles, voyons comment «vider» les chaînes de règles.
Chaînes Flush
Iptables offre un moyen de supprimer toutes les règles d’une chaîne ou de "purger *" une chaîne. Cette section couvrira les différentes façons de le faire.
Rincer une seule chaîne
Pour vider une chaîne spécifique, qui supprimera toutes les règles de la chaîne, vous pouvez utiliser l’option + -F +
, ou l’équivalent + - flush +
, et le nom de la chaîne à vider.
Par exemple, pour supprimer toutes les règles de la chaîne + INPUT +
, exécutez la commande suivante:
sudo iptables -F
Rincer toutes les chaînes
Pour vider toutes les chaînes, ce qui supprimera toutes les règles du pare-feu, vous pouvez utiliser l’option + -F +
, ou l’équivalent + - flush +
, par lui-même:
sudo iptables -F
Rincer toutes les règles, supprimer toutes les chaînes et accepter tout
Cette section vous montrera comment vider toutes vos règles, tables et chaînes de pare-feu et autoriser tout le trafic réseau.
Commencez par définir les stratégies par défaut pour chacune des chaînes intégrées sur + ACCEPT +
. La raison principale est de vous assurer que votre serveur ne sera pas verrouillé via SSH:
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Puis effacez les tables + nat +
et + mangle +
, effacez toutes les chaînes (+ -F +
) et supprimez toutes les chaînes autres que celles par défaut (+ -X +
):
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
Votre pare-feu autorisera désormais tout le trafic réseau. Si vous listez vos règles maintenant, vous verrez qu’il n’y en a pas et que seules les trois chaînes par défaut (INPUT, FORWARD et OUTPUT) restent.
Conclusion
Après avoir suivi ce didacticiel, vous devez savoir comment répertorier et supprimer vos règles de pare-feu iptables.
N’oubliez pas que toutes les modifications apportées à iptables via la commande + iptables +
sont éphémères et doivent être enregistrées pour être persistantes lors des redémarrages du serveur. Cela est couvert dans la section Saving Rules du didacticiel Règles de pare-feu communes et commandes.