Options utilisées avec les commandes iptables

Les règles permettant le filtrage de paquetages par le noyau sont appliquées en exécutant la commande iptables suivie de certaines de ses options qui définissent le type de paquetages à filtrer, l'origine ou la destination et le sort de ces paquetages s'ils satisfont à ces règles. Les options utilisées avec une commande iptables spécifique doivent être groupées de façon logique selon l'usage et les conditions mêmes de la règle générale dans le but de la rendre valide.

Tables

Un des points forts de iptables réside dans la possibilité d'utiliser des tables multiples pour décider du sort d'un paquetage donné selon le type de paquetage en cours de surveillance. Grâce à la nature flexible de iptables, des tables spécifiques peuvent être créées et enregistrées dans le répertoire /etc/modules/<version-du-noyau>/kernel/net/ipv4/netfilter afin d'obtenir des résultats précis. On peut alors considérer iptables comme étant capable d'exécuter plusieurs groupes de règles ipchains appartenant à des chaînes spécifiques, chaque groupe ayant un rôle particulier.

La table par défaut, appelée filter, contient les chaînes résidantes INPUT, OUTPUT et FORWARD. Cela est assez semblable aux chaînes standard en usage avec ipchains. Cependant, iptables possède aussi par défaut deux tables supplémentaires d'opérations spécifiques de filtrage. La table nat peut être utilisée pour modifier les adresses d'origine et de destination enregistrées dans les paquetages et la table mangle vous permet d'altérer la forme des paquetages selon des méthodes particulières.

Chaque table contient des chaînes par défaut dont le but est d'exécuter des tâches selon l'objectif même de la table, mais il est également possible de définir de nouvelles chaînes dans chaque table.

Structure

Beaucoup de commandes iptables ont la structure suivante :

iptables [-t <nom-table>] <commande> <nom-chaîne> <paramètre-1> <option-1>
     <paramètre-n> <option-n>

Dans cet exemple, l'option <nom-table> permet à l'utilisateur de sélectionner une autre table que la table par défaut filter à utiliser avec cette commande. L'option <commande> est le centre de la commande, imposant une action spécifique à accomplir, telle que l'ajout ou l'élimination d'une règle d'une chaîne particulière, qui est précisée par l'option <nom-chaîne>. On trouve juste après l'option <nom-chaîne> une paire de paramètres et d'options qui servent à définir la façon dont la règle sera respectée et l'action à entreprendre lorsqu'un paquetage correspond à la définition 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 est variable en fonction de son usage. Une simple commande servant à éliminer une règle d'une chaîne peut être très courte, alors qu'une commande servant à filtrer les paquetages d'un sous-réseau faisant appel à un certain nombre de paramètres et d'options sera plutôt longue. Il est nécessaire de se rappeler qu'avec les commandes iptables les paramètres et options utilisés peuvent susciter le besoin de créer des paramètres et options supplémentaires pour mieux définir les besoins des premiers. Pour écrire une règle efficace, cette chaîne d'actions doit être complètement respectée.

Entrez la commande iptables -h pour obtenir une liste exhaustive de structures de commandes iptables.

Commandes

Les commandes indiquent à iptables d'exécuter une action spécifique et une seule commande n'est autorisée par chaîne de commande iptables. A l'exception de la commande d'aide, toutes les autres commandes doivent être écrites en majuscules.

Les commandes iptables disponibles sont les suivantes :

Paramètres

Une fois que certaines commandes iptables ont été spécifiées, y compris celles utiles à 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 paquetages.

Options de concordance

Les différents protocoles de réseau offrent des options de contrôle de concordance spécifiques qui peuvent être configurées de manière à comparer un paquetage donné utilisant ce protocole. Evidemment, il est nécessaire d'identifier le protocole en question dans la commande iptables, tel qu'en utilisant l'option -p tcp <nom-du-protocole>, afin de rendre disponibles les options pour ce protocole.

Protocole TCP

Voici les options de concordance disponibles pour le protocole TCP (-p tcp) :

  • --dport Indique le port de destination pour le paquetage. Vous pouvez utiliser un nom de service de réseau (comme www ou smtp), un numéro de port ou une gamme de numéros de port pour configurer cette option. Pour parcourir les noms et pseudonymes de services réseau et les numéros de port utilisés, visualisez le fichier /etc/services. Vous pouvez aussi utiliser --destination-port pour indiquer cette option de concordance.

    Pour indiquer une gamme précise de numéros de port, il suffit de séparer les numéros avec un deux points (:), comme ceci : -p tcp --dport 3000:3200. La plus grande gamme possible est 0:65535.

    Vous pouvez aussi utiliser un point d'exclamation (!) comme indicateur après l'option --dport pour indiquer à iptables la comparaison de tous les paquetages qui n'utilisent pas ce service de réseau ou port.

  • --sport Indique le port d'origine du paquetage, en utilisant les mêmes options que --dport. Vous pouvez utiliser aussi --source-port pour indiquer cette option de concordance.

  • --syn Oblige un début de communication pour tous les paquetages TCP désignés, appelés communément paquetages SYN, pour vérifier la concordance avec cette règle. Tous les paquetages transportant des données seront ignorés. En plaçant un point d'exclamation (!) comme indicateur après l'option --syn, tous les paquetages non-SYN seront comparés.

  • --tcp-flags Permet la comparaison de paquetages TCP ayant une taille en octets ou des indicateurs spécifiques avec une règle. L'option de concordance --tcp-flags accepte deux paramètres après celle-ci, qui sont les indicateurs de tailles en octets diverses mis dans une liste séparée par des virgules. Le premier paramètre est le masque, qui définit l'indicateur à examiner pour le paquetage. Le second se rapporte aux indicateurs qui doivent être définis dans le paquetage pour la réalisation d'une concordance. Les indicateurs disponibles sont les suivants : ACK, FIN, PSH, RST, SYN et URG. De plus, ALL et NONE peuvent aussi être utilisés pour comparer tous les indicateurs ou aucun d'entre eux respectivement.

    Par exemple, une règle iptables contenant -p tcp --tcp-flags ACK,FIN,SYN SYN ne comparera que les paquetages TCP reportant l'indicateur SYN défini et les indicateurs ACK et FIN non définis.

    Comme pour beaucoup d'autres options, utiliser un point d'exclamation (!) après --tcp-flags inverse l'effet de l'option de concordance, ce qui signifie que le second paramètre ne doit pas être défini pour garantir la comparaison.

  • --tcp-option Essaie la comparaison d'options spécifiques à TCP qui peuvent être définies avec un paquetage donné. Cette option de comparaison peut aussi être inversée par un point d'exclamation (!).

Protocole UDP

Les options de concordance suivantes s'appliquent au protocole UDP (-p udp) :

  • --dport Indique le port de destination du paquetage UDP, en utilisant le nom du service, le numéro de port ou une gamme de numéros de port. L'option de concordance --destination-port peut être employée à la place de --dport. Consultez l'option de concordance --dport dans la la section intitulée Protocole TCP pour les modalités d'usage de cette option.

  • --sport Indique le port d'origine du paquetage UDP en utilisant le nom de service, le numéro de port ou une gamme de numéros de port. L'option de concordance --source-port peut être utilisée à la place de --sport. Consultez l'option de concordance --dport dans la la section intitulée Protocole TCP pour les modalités d'usage de cette option.

Protocole ICMP

Les paquetages faisant appel au protocole ICMP (Internet Control Message Protocol) peuvent être contrôlés par le biais de l'option suivante quand -p icmp est indiqué :

  • --icmp-type Définit le nom ou le numéro de type d'ICMP à comparer avec cette règle. Une liste de noms ICMP valides est disponible en tapant la commande iptables -p icmp -h.

Modules avec options de concordance supplémentaires

Des options de concordance supplémentaires, non spécifiques à un protocole en particulier, sont disponibles par l'entremise des modules chargés lorsqu'une commande iptables les utilise. Pour l'emploi d'un module d'option de concordance, il vous faut charger le module en l'appelant par son nom, c'est-à-dire en incluant -m <nom-du-module> dans la commande iptables lors de la création d'une règle.

Un nombre assez important de modules, ayant chacun leurs options de concordance spécifiques, sont disponibles par défaut. Il vous est même possible de créer vos propres modules pour fournir des options de concordance supplémentaires, tel que pour répondre à des exigences réseau spécifiques par exemple. Il existe de nombreux modules, mais seuls les plus fréquents sont abordés ici.

Le module limit vous permet de placer une limite au nombre de paquetages qui sont comparés à une règle donnée. Ceci se révèle tout particulièrement pratique lors de la concordance avec des règles de journalisation, afin d'éviter que les résultats n'envahissent vos journaux de messages répétitifs ou ne consomment trop de ressources système.

  • --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.

    Lorsque rien n'est spécifié, une valeur de 3/hour est la règle par défaut.

  • --limit-burst — Limite le nombre de paquetages comparés à une règle à la fois. Cette option est à utiliser conjointement à l'option --limit et accepte un numéro pour en définir le seuil.

    Si aucun numéro n'est indiqué, seulement cinq paquetages sont en mesure d'être contrôlés.

Le module state, qui fait appel à l'option de concordance --state, peut comparer un paquetage avec les états de connexion particuliers suivants :

  • ESTABLISHED Le paquetage contrôlé est associé à d'autres paquetages dans une connexion établie.

  • INVALID Le paquetage contrôlé ne peut être associé à une connexion connue.

  • NEW Le paquetage contrôlé crée une nouvelle connexion ou fait partie d'une connexion à double sens qui n'a pas encore été vue.

  • RELATED Le paquetage 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 en les séparant par des virgules, tel que : -m state --state INVALID,NEW.

Pour contrôler la concordance d'une adresse matérielle MAC d'un périphérique Ethernet, utilisez le module mac, qui accepte --mac-source plus une adresse MAC comme option. Pour exclure une adresse MAC d'une règle, placez un point d'exclamation (!) après l'option de concordance --mac-source.

D'autres options de concordance sont disponibles dans les modules. Reportez-vous à la page de manuel de iptables.

Options de cible

Une fois que la concordance d'un paquetage a été contrôlée par une règle, celle-ci peut diriger le paquetage vers un certain nombre de cibles qui décideront de son traitement et, si possible, entreprendront des actions supplémentaires, telles que la journalisation de l'action. De plus, 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 paquetage ou si aucune des règles qui correspondent à un paquetage ne spécifie de cible particulière.

Il n'existe que très peu de cibles standard pour décider comment gérer les paquetages :

Outre ces cibles standards, plusieurs autres cibles peuvent être utilisées avec des extensions appelées modules cibles, qui fonctionnent d'une manière semblable aux modules d'options de concordance (reportez-vous à la la section intitulée Modules avec options de concordance supplémentaires).

Il existe de nombreux modules cibles étendus ; la plupart d'entre eux s'appliquent à des tables ou des situations spécifiques. Voici quelques-uns des modules cibles les plus répandus inclus par défaut dans Red Hat Linux :

D'autres extensions, dont bon nombre étant très utiles avec le masquerading faisant appel à la table nat, peuvent être trouvées dans la page de manuel de iptables.

Options de listage

La commande de listage par défaut, iptables -L, offre une vue générale des chaînes de règles actuellement contenues dans la table par défaut. Des options supplémentaires existent et disposent l'information de manière spécifique :