Les règles permettant le filtrage de paquets sont mises en oeuvre en exécutant la commande iptables. Lorsque vous utilisez la commande iptables, vous devez spécifier les options suivantes :
Type de paquet — stipule le type de paquets que la commande filtre.
Origine/Destination du paquet — spécifie les paquets que la commande filtre sur la base de l'origine ou de la destination du paquet.
Cible — stipule l'action à appliquer sur les paquets remplissant les critères évoqués ci-dessus.
Pour obtenir de plus amples informations sur des options spécifiques qui correspondent à ces aspects de paquets, reportez-vous à la Section 17.3.4 et à la Section 17.3.5.
Les options utilisées avec une règle iptables donnée doivent être logiquement groupées, sur la base du but et des conditions de la règle générale, afin que la règle soit valide. Le reste de cette section détaille des options couramment utilisées avec la commande iptables.
Beaucoup de commandes iptables ont la structure suivante :
iptables [-t <table-name>] <command> <chain-name> <parameter-1> \ <option-1> <parameter-n> <option-n> |
L'option <table-name> permet à l'utilisateur de sélectionner une autre table que la table par défaut filter à utiliser avec cette commande. L'option <command> stipule une action spécifique à accomplir, telle que l'ajout ou l'élimination d'une règle spécifiée par <chain-name>. Après l'option <chain-name> se trouve une paire de paramètres et d'options servant à définir l'action à entreprendre lorsqu'un paquet correspond aux critères de la règle.
En examinant la structure d'une commande iptables, il est important de se rappeler que contrairement aux autres commandes, la longueur et la complexité d'une commande iptables varie en fonction de son objectif. Une simple commande servant à éliminer une règle d'une chaîne peut être très courte, alors qu'une commande servant à filtrer les paquets d'un sous-réseau faisant appel à un certain nombre de paramètres et d'options sera plutôt longue. Lors de la création de commandes iptables, il est important de se rappeler que certains paramètres et options peuvent nécessiter la création de paramètres et options supplémentaires pour mieux définir la requête de l'option précédente. Pour écrire une règle valide, cette chaîne d'actions doit continuer jusqu'à ce que chaque paramètre et option nécessitant une autre série d'options soit satisfait.
Entrez la commande iptables -h pour obtenir une liste exhaustive de structures de commandes iptables.
Les options de commandes donnent à iptables l'instruction d'exécuter une action spécifique. Seule une option de commandes est autorisée par commande iptables. À l'exception de la commande d'aide, toutes les autres commandes doivent être écrites en majuscules.
Les commandes iptables disponibles sont les suivantes :
-A — ajoute la règle iptables à la fin d'une chaîne donnée. On l'utilise pour ajouter simplement une règle lorsque l'ordre des règles à l'intérieur de la chaîne n'est pas primordial.
-C — contrôle une règle donnée avant de l'ajouter à la chaîne spécifiée par l'utilisateur. Cette commande peut vous aider à écrire des règles iptables compliquées en vous indiquant les paramètres et options supplémentaires à établir.
-D — élimine une règle à l'intérieur d'une chaîne donnée de façon numérique (comme par exemple en utilisant 5 pour la cinquième règle d'une chaîne). Il est également possible de taper la règle complète et iptables effacera la règle dans la chaîne correspondante.
-E — sert à changer le nom d'une chaîne spécifiée par un utilisateur. Cette option n'affecte en aucun cas la structure de la table.
-F — supprime la chaîne sélectionnée, entraînant par là-même, l'élimination de toutes les règles de la chaîne. Si aucune chaîne n'est spécifiée, cette commande supprime chaque règle de chaque chaîne.
-h — fournit une liste des structures de commande, ainsi qu'un bref résumé des paramètres et options des commandes.
-I — insère une règle à l'intérieur d'une chaîne, à un point précis, spécifié par une valeur entière définie par l'utilisateur. Si aucun numéro n'est spécifié, iptables placera la commande au tout début de la chaîne.
![]() | Attention |
---|---|
Prêtez particulièrement attention lors de l'utilisation de l'option -A ou-I. L'ordre dans lequel les règles apparaissent dans une chaîne est très important quand il s'agit de définir quelles règles appliquer à quels paquets. |
-L — établit la liste complète des règles dans la chaîne indiquée après la commande. Pour obtenir une liste de toutes les règles de toutes les chaînes contenues dans la table par défaut filter, ne précisez ni chaîne, ni table. Sinon, la syntaxe à utiliser pour établir la liste des règles contenues dans une chaîne donnée d'une table précise, doit être la suivante :
iptables -L <chain-name> -t <table-name> |
Des options supplémentaires pour l'option de commande -L fournissant le nombre de règles et permettant une description très détaillée de ces dernières sont décrites dans la Section 17.3.6.
-N — crée une nouvelle chaîne avec un nom spécifié par l'utilisateur.
-P — définit la politique par défaut d'une chaîne donnée, de sorte que lorsque des paquets traversent une chaîne entière sans satisfaire à une règle, ils seront envoyés à une cible donnée, telle que ACCEPT ou DROP.
-R — remplace une règle dans une chaîne donnée. Il est impératif d'utiliser un numéro de règle après le nom de chaîne. La première règle dans une chaîne correspond à la règle numéro un.
-X — supprime une chaîne spécifiée par un utilisateur. L'élimination d'une chaîne intégrée de toute table n'est pas permise.
-Z — remet à zéro les compteurs d'octets et de paquets dans toutes les chaînes pour une table spécifique.
Une fois que certaines commandes iptables ont été spécifiées (y compris celles utilisées pour l'ajout, l'élimination, l'insertion ou le remplacement de règles à l'intérieur d'une chaîne donnée), il est nécessaire d'ajouter d'autres paramètres pour la construction d'une règle de filtrage de paquets.
-c effectue une remise à zéro des compteurs pour une règle donnée. Ce paramètre accepte les options PKTS (paquets) et BYTES (octets) pour indiquer le compteur à remettre à zéro.
-d — définit le nom d'hôte du destinataire, l'adresse IP ou le réseau du paquetage qui correspondra à la règle. Lors de la vérification de concordance réseau, les formats adresses IP/masque réseau suivants sont pris en charge :
N.N.N.N/M.M.M.M — où N.N.N.N correspond à la plage de l'adresse IP et M.M.M.M au masque réseau.
N.N.N.N/M — où N.N.N.N correspond à la plage de l'adresse IP et M au masque réseau.
-f applique cette règle uniquement aux paquets fragmentés.
En insérant l'option ! après ce paramètre, seuls les paquets non-fragmentés seront contrôlés.
-i — règle l'interface réseau d'entrée, telle que eth0 ou ppp0. Avec iptables, ce paramètre optionnel ne peut être utilisé qu'avec des chaînes INPUT et FORWARD, lorsqu'elles sont utilisées avec la table filter et la chaîne PREROUTING avec les tables nat et mangle.
Ce paramètre prend également en charge les options spéciales suivantes :
! — inverse la directive, signifiant que n'importe quelle interface spécifiée est exclue de cette règle.
+ — un caractère générique utilisé pour comparer toutes les interfaces qui correspondent à une chaîne particulière. Par exemple, le paramètre -i eth+ appliquerait cette règle à n'importe quelle interface Ethernet, mais ne prendrait pas en compte les autres interfaces, comme ppp0.
Si le paramètre -i est utilisé sans qu'aucune interface ne soit spécifiée, alors toutes les interfaces sont affectées par la règle.
-j — passe directement à une cible donnée lorsqu'un paquetage correspond à une règle particulière. Les cibles autorisées à être utilisées après l'option -j incluent les options standard (ACCEPT, DROP, QUEUE et RETURN), ainsi que des options étendues qui sont disponibles dans des modules chargés par défaut avec le paquetage RPM de commandes Red Hat Enterprise Linux nommé iptables, comme, entre autres, LOG, MARK et REJECT. Consultez la page de manuel relative à iptables pour obtenir plus d'informations sur les cibles.
Il est également possible de diriger un paquet correspondant à une règle vers une chaîne définie par l'utilisateur, située en dehors de la chaîne courante, afin que d'autres règles puissent être appliquées à ce paquet.
Si aucune cible n'est spécifiée, le paquet continue sans qu'aucune autre action ne soit entreprise. Ceci étant, le compteur de cette règle avance tout de même d'un point.
-o — règle l'interface de sortie pour une règle donnée et ne peut être utilisée qu'avec des chaînes OUTPUT et FORWARD dans la table filter et la chaîne POSTROUTING dans les tables nat et mangle. Les options de ce paramètre sont les mêmes que pour les paramètres relatifs aux interfaces réseau d'entrée (-i).
-p — règle le protocole IP pour la règle, qui peut être icmp, tcp, udp ou all, pour correspondre à tous les protocoles possibles. De plus, tout protocole inclus dans /etc/protocols peuvent également être employés. Si l'option est omise lors de la création de la règle, l'option all est considérée comme étant la valeur par défaut.
-s — définit l'origine d'un paquet particulier en utilisant la même syntaxe que pour le paramètre de destination (-d).
Différents protocoles réseau offrent des options de contrôle de concordance spécifiques qui peuvent être configurées de manière à comparer un paquet donné utilisant ce protocole. Évidemment, il est nécessaire d'identifier préalablement le protocole en question dans la commande iptables. Par exemple, -p tcp <protocol-name> (où <protocol-name> correspond au protocole cible) fait en sorte que ces options soient disponibles.
Les options de concordance disponibles pour le protocole TCP (-p tcp) sont les suivantes :
--dport — indique le port de destination pour le paquet. Vous pouvez utiliser un nom de service de réseau (comme www ou smtp), un numéro de port ou une plage de numéros de port pour configurer cette option. Pour parcourir les noms et alias de services réseau et les numéros de port utilisés, affichez le fichier /etc/services L'option de concordance --destination-port est identique à l'option --dport.
Pour indiquer une plage précise de numéros de port, il suffit de séparer les numéros par le symbole des deux points (:), comme dans l'exemple suivant : -p tcp --dport 3000:3200. La plus grande plage possible est 0:65535.
Utilisez un point d'exclamation (!) après l'option --dport pour comparer tous les paquets qui n'utilisent pas ce service de réseau ou port.
--sport — indique le port d'origine du paquet, en utilisant les mêmes options que --dport. L'option de concordance --source-port est identique à l'option --sport.
--syn s'applique à tous les paquets TCP, appelés communément paquets SYN, conçus pour initier la communication. Aucun paquet transportant des données de charge utile n'est touché. En plaçant un point d'exclamation (!) comme indicateur après l'option --syn, tous les paquets non-SYN seront comparés.
--tcp-flags — permet la comparaison avec une règle de paquets TCP ayant une taille en octets ou des indicateurs spécifiques. L'option de concordance --tcp-flags accepte deux paramètres. Le premier paramètre est le masque, qui définit l'indicateur à examiner pour le paquet. Le second se rapporte aux indicateurs qui doivent être définis afin que la concordance puisse avoir lieu.
Les indicateurs disponibles sont les suivants :
ACK
FIN
PSH
RST
SYN
URG
ALL
NONE
Par exemple, une règle iptables contenant -p tcp --tcp-flags ACK,FIN,SYN SYN ne comparera que les paquets TCP ayant l'indicateur SYN défini et les indicateurs ACK et FIN non-définis.
L'utilisation d'un point d'exclamation (!) après --tcp-flags inverse l'effet de l'option de concordance.
--tcp-option essaie de comparer des options spécifiques à TCP qui peuvent être définies dans un paquet donné. Cette option de concordance peut aussi être inversée en utilisant un point d'exclamation (!).
Les options de concordance suivantes s'appliquent au protocole UDP (-p udp) :
--dport — indique le port de destination du paquet UDP, en utilisant le nom du service, le numéro de port ou une plage de numéros de port. L'option de concordance --destination-port est identique à l'option --dport. Reportez-vous à l'option de concordance --dport dans la Section 17.3.4.1 pour obtenir des informations sur les modalités d'utilisation de cette option. option.
--sport — indique le port d'origine du paquet UDP en utilisant le nom de service, le numéro de port ou une plage de numéros de port. L'option de concordance --source-port est identique à l'option --sport. Reportez-vous à l'option de concordance --sport dans la Section 17.3.4.1 pour obtenir des informations sur les modalités d'utilisation de cette option.
Les options de concordance suivantes sont disponibles pour le protocole Internet Control Message Protocol (ICMP) (-p icmp) :
--icmp-type — définit le nom ou le numéro du type d'ICMP à comparer avec cette règle. Une liste de noms ICMP valides est disponible en tapant la commande iptables -p icmp -h.
Des options de concordance supplémentaires sont également disponibles par l'entremise des modules chargés par la commande iptables. Pour utiliser un module d'option de concordance, chargez le module en l'appelant par son nom à l'aide de l'option -m, comme par exemple : -m <module-name> (où <module-name> correspond au nom du module).
Un nombre important de modules est disponible par défaut. Il est même possible de créer vos propres modules pour fournir des options de concordance supplémentaires.
Voici une liste partielle des modules les plus couramment utilisés :
Module limit — permet de limiter le nombre de paquets qui sont comparés à une règle donnée. Ceci se révèle tout particulièrement pratique lors de son utilisation en conjonction avec la cible LOG afin d'éviter que les résultats n'entraînent l'invasion de vos journaux par des messages répétitifs ou ne consomment trop de ressources système. Reportez-vous à la Section 17.3.5 pour de plus amples informations sur la cible LOG.
Le module limit permet les options suivantes :
--limit — limite le nombre de concordances dans un espace-temps donné, grâce à un modificateur de nombre et de temps paramétré sous la forme suivante : <nombre>/<temps>. Par exemple, en écrivant --limit 5/hour, une règle effectue son contrôle de concordance seulement cinq fois par heure.
Si aucun modificateur de nombre ou temps n'est précisé, une valeur par défaut de 3/hour sera retenue.
--limit-burst — limite le nombre de paquets pouvant être comparés à une règle, à un moment donné. Cette option est à utiliser conjointement avec l'option --limit et accepte un numéro pour en définir le seuil.
Si aucun numéro n'est indiqué, seulement cinq paquets sont en mesure d'être contrôlés à la règle.
module state — permet la concordance d'état.
Ce module state permet les options suivantes :
--state — compare un paquet avec les états de connexion suivants :
ESTABLISHED — le paquet contrôlé est associé à d'autres paquets dans une connexion établie.
INVALID — le paquet contrôlé ne peut être associé à une connexion connue.
NEW — le paquet contrôlé crée une nouvelle connexion ou fait partie d'une connexion à double sens qui n'a pas encore été vue.
RELATED — le paquet contrôlé commence une nouvelle connexion liée d'une façon ou d'une autre à une connexion existante.
Ces états de connexion peuvent être employés de concert avec d'autres à condition qu'ils soient séparés par des virgules, comme par exemple : -m state --state INVALID,NEW.
mac module — permet la concordance d'une adresse MAC matérielle.
Le module mac permet l'option suivante :
--mac-source — compare une adresse MAC de la carte d'interface réseau qui a envoyé le paquet. Pour exclure une adresse MAC d'une règle, placez un point d'exclamation (!) après l'option de concordance --mac-source.
Pour obtenir des informations sur d'autres options de concordance disponibles avec les modules, reportez-vous à la page de manuel de iptables.
Une fois que la concordance d'un paquet a été contrôlée par une règle spécifique, cette dernière peut diriger le paquet vers un certain nombre de cibles qui décideront de son traitement et, si possible, entreprendront des actions supplémentaires. Chaque chaîne possède une cible par défaut qui est utilisée si aucune des règles de la chaîne ne correspond à un paquet ou si aucune des règles qui correspondent à un paquet ne spécifie de cible particulière.
Ci-dessous figurent les cibles standards :
<user-defined-chain> — remplacez <user-defined-chain> par le nom d'une chaîne définie par l'utilisateur au sein de cette table. Cette cible transmet le paquet à la chaîne cible.
ACCEPT — permet au paquet de continuer sa progression vers sa destination (ou une autre chaîne si sa configuration l'y oblige).
DROP — abandonne le paquet répondre au demandeur. Le système ayant expédié ce paquet n'est pas informé de l'échec de l'opération.
QUEUE — le paquet est mis en attente et sera traité par une application de l'espace-utilisateur (user-space).
RETURN — arrête le contrôle du paquet en fonction des règles en vigueur dans la chaîne actuelle. Si le paquet avec la cible RETURN correspond à une certaine règle appelée depuis une autre chaîne, le paquet est renvoyé à la première chaîne pour la continuation de son contrôle au point où il s'était arrêté. Dans le cas où la règle RETURN est utilisée dans une chaîne intégrée et que le paquet ne peut pas revenir vers la chaîne précédente, la cible appliquée par défaut décide alors de l'action à entreprendre.
Outre ces cibles standards, plusieurs autres cibles peuvent être utilisées avec des extensions appelées modules cibles. Pour obtenir de plus amples informations sur les modules d'options de concordance, reportez-vous à la Section 17.3.4.4.
Il existe de nombreux modules cibles étendus ; la plupart d'entre eux s'appliquent à des tables ou à des situations spécifiques. Ci-dessous figurent certains des modules cibles les plus répandus, inclus par défaut dans Red Hat Enterprise Linux :
LOG — journalise tous les paquets correspondant à cette règle. Étant donné que les paquets sont journalisés par le noyau, le fichier /etc/syslog.conf détermine l'emplacement où ces entrées sont enregistrées. Par défaut, elles sont placées dans le fichier /var/log/messages.
D'autres options peuvent être utilisées après la cible LOG pour spécifier le processus de journalisation :
--log-level — détermine le niveau de priorité d'un événement de journalisation. Une liste de niveaux de priorité est disponible dans la page de manuel de syslog.conf.
--log-ip-options spécifie que toute option indiquée dans l'en-tête d'un paquet IP est journalisée.
--log-prefix — ajoute une chaîne comportant au maximum 29 caractère avant la ligne du journal, lorsqu'elle est écrite. Cette option est utile lors de l'écriture de filtres syslog à utiliser conjointement avec la journalisation de paquets.
--log-tcp-options — indique que toute option précisée dans l'en-tête d'un paquet TCP est journalisée.
--log-tcp-sequence écrit le numéro de séquence TCP relatif au paquet dans le journal.
REJECT — renvoie un paquet d'erreur au système ayant expédié le paquet et abandonne le paquet.
La cible REJECT accepte une option --reject-with <type> (où <type> correspond au type de rejet) qui permet d'inclure des informations plus détaillées avec le paquet d'erreur. Le message d'erreur port-unreachable (impossible d'atteindre le port) représente l'erreur de <type> par défaut envoyée si aucune autre option n'est utilisée. Pour obtenir une liste complète des options <type> disponibles, consultez la page de manuel relative à iptables.
D'autres extensions de cibles, dont bon nombre étant très utiles pour le masquage d'IP (ou masquerading) faisant appel à la table nat ou avec la modification de paquets à l'aide de la table mangle, se trouvent dans la page de manuel iptables.
La commande de listage par défaut, iptables -L, forunit un aperçu très élémentaire des chaînes actuelles contenues dans la table de filtres par défaut. Des options supplémentaires donnent plus d'informations :
-v — affiche une sortie détaillée, indiquant le nombre de paquets et d'octets lus par chaque chaîne, le nombre de paquets et d'octets contrôlés par chaque règle et l'identité des interfaces liées aux règles.
-x présente les nombres selon leur valeur exacte. Dans un système très chargé, le nombre de paquets et d'octets vus par une chaîne donnée peut être abrégé en utilisant K (milliers), M (millions) et G (milliards) à la fin du nombre. Cette option oblige l'affichage du nombre réel.
-n affiche les adresses IP et les numéros de port de façon numérique, plutôt que d'utiliser le nom d'hôte et le format du service de réseau.
--line-numbers — énumère les règles dans chaque chaîne à côté de leur ordre numérique dans la chaîne. Cette option est utile lorsque l'on tente d'éliminer une règle donnée dans une chaîne ou de localiser l'emplacement d'une règle à insérer dans une chaîne.
-t — spécifie un nom de table.
Précédent | Sommaire | Suivant |
Différences entre iptables et ipchains | Niveau supérieur | Enregistrement des règles de iptables |