16.3. Options utilisées avec les commandes iptables

Les règles permettant le filtrage de paquets par le noyau sont mise en oeuvre en exécutant la commande iptables. Lorsque vous utilisez la commande iptables, vous devez spécifier les options suivantes:

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.

16.3.1. Tables

Un des points forts de iptables réside dans la possibilité d'utiliser des tables multiples pour décider du sort d'un paquet donné. Grâce à la nature flexible de iptables, des tables spécifiques peuvent être créées et enregistrées dans le répertoire /lib/modules/<version-du-noyau>/kernel/net/ipv4/netfilter/<version-du-noyau> correspond au numéro de version du noyau.

La table par défaut, appelée filter, contient les chaînes standard intégrées INPUT, OUTPUT et FORWARD. Ceci est assez semblable aux chaînes standard en usage avec ipchains. Toutefois, iptables possède aussi par défaut deux tables supplémentaires qui effectuent des opérations de filtrage de paquets spécifiques. La table nat peut être utilisée pour modifier les adresses d'origine et de destination enregistrées dans les paquets alors que la table table mangle permet de modifier des paquets selon des méthodes particulières.

Chaque table contient certes 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.

16.3.2. Structure

Beaucoup de commandes iptables ont la structure suivante:

iptables [-t <nom-de-table>]
<commande>
<nom-de-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> stipule une action spécifique à accomplir, telle que l'ajout ou l'élimination d'une règle spécifiée par <nom-de-chaîne>. après l'option <nom-de-chaîne> se trouve une paire de paramètres et d'options servant à définir l'action à entreprendre lorsqu'un paquet correspond au 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.

16.3.3. Commandes

Les commandes donnent à iptables l'instruction d'exécuter une action spécifique. Seule une commande est autorisée par chaîne de 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:

16.3.4. Paramètres

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.

16.3.5. Options de concordance

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 à l'aide de l'option -p tcp <nom-du-protocole> (où <nom-du-protocole> correspond au protocole cible), afin que ces options soient disponibles.

16.3.5.1. Protocole TCP

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 donner iptables l'instruction 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 (!).

16.3.5.2. Protocole UDP

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 Section 16.3.5.1 Protocole TCP 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 Section 16.3.5.1 Protocole TCP pour obtenir des informations sur les modalités d'utilisation de cette option.

16.3.5.3. Protocole ICMP

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.

16.3.5.4. Modules avec options de concordance supplémentaires

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 <nom-du-module> (où <nom-du-module> 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 pour une fonctionnalité accrue.

Il existe de nombreux modules, mais seuls les plus fréquents sont abordés ici.

  • limit module — 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 la concordance avec des règles de journalisation, 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.

    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.

16.3.6. Options de cible

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:

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 Section 16.3.5.4 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. Ci-dessous figurent certains des modules cibles les plus répandus, inclus par défaut dans Red Hat Linux :

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.

16.3.7. Options de listage

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: