Les règles permettant le filtrage de paquets sont mises en oeuvre en exécutant la commande iptables. Les aspects suivants du paquet sont le plus souvent utilisés comme critère :
Type de paquet — Spécifie le type de paquets que la commande filtre.
Origine/Destination du paquet — Spécifie les paquets que la commande filtre en fonction de l'origine ou de la destination du paquet.
Cible — Spécifie l'action à appliquer sur les paquets répondant aux critères évoqués ci-dessus.
Pour obtenir de plus amples informations sur des options spécifiques qui traitent ces aspects des paquets, reportez-vous à la Section 18.3.4 et à la Section 18.3.5.
Les options utilisées avec des règles iptables données doivent être regroupées logiquement en fonction du but et des conditions de la règle globale, afin que la règle soit valide. Le reste de cette section examine 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 filter par défaut devant être utilisée 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> figurent des paires de paramètres et d'options qui définissent comment traiter un paquet répondant aux critères de la règle.
En examinant la structure d'une commande iptables, il est important de se rappeler que contrairement à la plupart autres commandes, la longueur et la complexité d'une commande iptables varie en fonction de son but. Une commande destinées à éliminer une règle d'une chaîne peut être très courte, alors qu'une commande visant à filtrer les paquets d'un sous-réseau à l'aide d'un certain nombre de paramètres et d'options peut être plutôt longue. Lors de la création de commandes iptables, il est important de savoir que nombre de paramètres et d'options peuvent nécessiter des paramètres et d'options supplémentaires pour mieux rafiner la requête de l'option précédente. Pour élaborer une règle valide, cette chaîne d'actions doit continuer jusqu'à ce que chaque paramètre et option nécessitant un autre ensemble d'options ait été traité.
Saisissez la commande iptables -h pour obtenir une liste exhaustive de structures de la commande iptables.
Les options de commande donnent à iptables l'instruction d'exécuter une action spécifique. Une seule option de commande est autorisée pour chaque commande iptables. À l'exception de la commande d'aide, toutes les autres commandes doivent être écrites en majuscules.
Les options de commande disponibles avec iptables sont les suivantes :
-A — Ajoute la règle iptables à la fin d'une chaîne donnée. On utilise cette option 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 efface la règle dans la chaîne correspondante.
-E — Change 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 contenue dans chaque chaîne.
-h — Fournit une liste des structures de scommande, 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 place la commande au tout début de la chaîne.
![]() | Attention |
---|---|
Lors de l'utilisation de l'option -A ou de l'option -I, prêtez une attention toute particulière à l'ordre dans lequel les règles apparaissent dans une chaîne. En effet, ce dernier est très important car il permet de déterminer les règles précises devant s'appliquer à des paquets spécifiques. |
-L — Établit la liste complète des règles dans la chaîne indiquée après la commande. Pour dresser une liste de toutes les règles présentes dans toutes les chaînes contenues dans la table defilter par défaut, 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> |
Pour toute information sur les options supplémentaires utilisées avec l'option de commande -L qui fournit le nombre de règles et permet une description plus détaillée de ces dernières, consultez la Section 18.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 des paquets traversant une chaîne entière sans satisfaire les critères d'une règle soient envoyés vers la cible spécifié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 appartenant à une table quelconque 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 spécifier 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 correspond à la règle. Lorsqu'un réseau répond aux critères de la règle, les formats suivants sont pris en charge pour l'adresse IP/masque réseau :
N.N.N.N/M.M.M.M — où N.N.N.N correspond à la plage d'adresses IP et M.M.M.M au masque réseau.
N.N.N.N/M — où N.N.N.N correspond à la plage d'adresses IP et M au masque réseau.
-f — Applique cette règle uniquement aux paquets fragmentés.
En utilisant le point d'exclamation comme option (!) après ce paramètre, seuls les paquets non-fragmentés seront comparés aux critères des règles.
-i — Règle l'interface réseau entrante, 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 lorsqu'elle est utilisée avec les tables nat et mangle.
Ce paramètre prend également en charge les options spéciales ci-dessous :
Point d'exclamation (!) — Inverse la directive, c'est-à-dire que toutes les interfaces spécifiées sont exclues de cette règle.
Le symbole plus (+) — Représente un caractère générique utilisé pour comparer toutes les interfaces qui correspondent à la chaîne spécifiée. Par exemple, le paramètre -i eth+ appliquerait cette règle à toutes les interfaces 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, toutes les interfaces sont affectées par la règle.
-j — Passe directement à la cible spécifiée lorsqu'un paquetage correspond à une règle particulière. Les cibles valides pouvant être utilisées après l'option -j incluent des options standard (à savoir ACCEPT, DROP, QUEUE et RETURN), ainsi que des options étendues qui sont disponibles grâce aux modules chargés par défaut avec le paquetage RPM iptables de Red Hat Enterprise Linux, comme par exemple LOG, MARK et REJECT. Consultez la page de manuel d'iptables pour obtenir plus d'informations sur les cibles mentionnées ici et sur d'autres 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 actuelle, 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'une unité.
-o — Paramètre l'interface sortante 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 entrantes (-i).
-p — Paramètre le protocole IP pour la règle, qui peut être icmp, tcp, udp ou all, afin qu'il corresponde à tous les protocoles possibles. De plus, il est possible d'utiliser tout protocole inclus dans /etc/protocols. 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é en 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 des options soient disponibles pour le protocole spécifié.
Les options de concordance disponibles pour le protocole TCP (-p tcp) sont les suivantes :
--dport — Paramètre le port de destination pour le paquet. Vous pouvez utiliser le nom d'un service 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 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 valide est 0:65535.
Utilisez un point d'exclamation (!) après l'option --dport pour comparer tous les paquets qui n'utilisent pas ce service réseau ou port.
--sport — Paramètre 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 à des paquets TCP avec des bits ou des indicateurs définis, d'être comparés à une règle. L'option de concordance --tcp-flags accepte deux paramètres. Le premier est le masque, qui définit l'indicateur à examiner dans le paquet. Le second se rapporte à l'indicateur qui doit être défini pour la concordance.
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 — Spécifie le port de destination du paquet UDP, utilisant le nom du service, le numéro de port ou une plage de numéros de ports. L'option de concordance --destination-port est identique à l'option --dport.
--sport — Spécifie le port d'origine du paquet UDP, utilisant le nom du service, le numéro de port ou une plage de numéros de ports. L'option de concordance --source-port est identique à l'option --sport.
Les options de concordance suivantes sont disponibles pour le protocole Internet Control Message Protocol (ICMP) (-p icmp) :
--icmp-type — Détermine 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 des modules qui fournissent des fonctionnalités supplémentaires.
Ci-dessous figure 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. Cette option se révèle tout particulièrement utile lorsqu'elle est utilisée avec la cible LOG car elle permet d'éviter que les paquets concordants n'inondent le journal du système avec des messages répétitifs ou qu'ils ne consomment trop de ressources système. Reportez-vous à la Section 18.3.5 pour obtenir de plus amples informations sur la cible LOG.
Le module limit active les options suivantes :
--limit — Détermine le nombre de concordances pour un espace-temps donné, grâce à un modificateur nombre (number) et temps (time) paramétré selon le fomrat suivant : <number>/<time>. Par exemple, en écrivant --limit 5/hour, une règle effectue son contrôle de concordance seulement cinq fois en une heure.
Si aucun modificateur nombre ou temps n'est précisé, une valeur par défaut de 3/hour (3 fois en une heure) sera retenue.
--limit-burst — Détermine le nombre de paquets pouvant être comparés à une règle, à un moment donné. Cette option qui devrait être utilisée conjointement avec l'option --limit, accepte un numéro pour définir le seuil maximal.
Si aucun numéro n'est indiqué, cinq paquets seulement sont au départ comparés à la règle.
module state — Active la concordance d'état.
Le module state active les options suivantes :
--state — Établit la correspondance d'un paquet avec les états de connexion suivants :
ESTABLISHED — Le paquet concordant est associé à d'autres paquets dans une connexion établie.
INVALID — Ce paquet concordant ne peut être pas lié à une connexion connue.
NEW — Le paquet concordant crée une nouvelle connexion ou fait partie d'une connexion à double sens qui n'a pas été vue précédemment.
RELATED — Le paquet concordant établit une nouvelle connexion qui est d'une manière ou d'une autre apparentée à 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 — Active la concordance d'une adresse MAC matérielle.
Le module mac active l'option suivante :
--mac-source — Établit la correspondance avec 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 les autres options de concordance disponibles à l'aide des modules, reportez-vous à la page de manuel de iptables.
Une fois qu'un paquet concorde avec 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, effectueront des actions supplémentaires. Chaque chaîne possède une cible par défaut qui est utilisée si aucune des règles de cette chaîne ne correspond à un paquet ou si aucune des règles qui correspondent au paquet ne spécifie de cible particulière.
Ci-dessous figurent les cibles standard :
<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 — Autorise le paquet à continuer sa progression vers sa destination ou une autre chaîne.
DROP — Abandonne le paquet sans répondre au demandeur. Le système ayant expédié ce paquet n'est pas informé de l'échec de l'opération.
QUEUE — Met le paquet en attente pour un traitement 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 que le contrôle de la règle reprenne 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 aller vers sa chaîne précédente, la cible par défaut pour la chaîne actuelle détermine l'action à entreprendre.
Outre ces cibles standard, d'autres cibles peuvent être utilisées avec des extensions appelées modules cibles. Pour obtenir de plus amples informations sur les modules d'options pour la concordance, reportez-vous à la Section 18.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 de journal 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, telles que :
--log-level — Détermine le niveau de priorité d'un événement de journalisation. Une liste des niveaux de priorité est disponible dans la page de manuel de syslog.conf.
--log-ip-options — Journalise toute option indiquée dans l'en-tête d'un paquet IP.
--log-prefix — Ajoute une chaîne d'un maximum de 29 caractères avant la ligne de journal, lorsqu'elle est écrite. Cette option est utile lors de l'écriture de filtres syslog utilisés conjointement avec la journalisation de paquets.
--log-tcp-options — Journalise toute option précisée dans l'en-tête d'un paquet TCP.
--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 distant 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 <type> par défaut envoyée si aucune autre option n'est utilisée. Pour obtenir une liste complète des options disponibles pour <type>, consultez la page de manuel d'iptables.
D'autres extensions de cibles, dont bon nombre sont très utiles pour le masquage d'IP à l'aide de la table nat ou avec la modification de paquets à l'aide de la table mangle, figurent dans la page de manuel d'iptables.
La commande de listage par défaut, iptables -L, fournit un aperçu très élémentaire des chaînes actuelles contenues dans la table de filtres par défaut. L'utilisation d'options supplémentaires telles que celles énumérées ci-dessous, permettent d'obtenir davantage d'informations :
-v — Affiche une sortie détaillée, incluuant 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 à une règle particulière.
-x — Présente les nombres selon leur valeur exacte. Sur 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 force l'affichage du nombre complet.
-n — Affiche les adresses IP et les numéros de port dand un format numérique, plutôt que d'utiliser le format par défaut constitué du nom d'hôte et du service 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 lors de la tentative de suppression d'une règle donnée dans une chaîne ou lors dela localisation de 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 d'iptables |