Linux

CentOS 5.3

iptables(8)


IPTABLES

NOM

iptables − outil d’administration pour le filtrage de paquets IPv4 et le NAT

RÃSUMÃ

iptables [-t table] -[AD] chaîne règle [options]
iptables [-t table] -I
chaîne [numéro-de-règle] règle [options]
iptables [-t table] -R
chaîne numéro-de-règle règle [options]
iptables [-t table] -D
chaîne numéro-de-règle [options]
iptables [-t table] -[LFZ]
[chaîne] [options]
iptables [-t table] -N
chaîne
iptables [-t table] -X
[chaîne]
iptables [-t table] -P
chaîne cible [options]
iptables [-t table] -E
ancien-nom-de-chaîne nouveau-nom-de-chaîne

DESCRIPTION

iptables est utilisé pour mettre en place, maintenir et inspecter les tables des règles de filtrage des paquets IP du noyau Linux. Différentes tables peuvent être définies. Chaque table contient plusieurs chaînes prédéfinies et peut aussi contenir des chaînes définies par l’utilisateur.

Chaque chaîne est une liste de règles que peuvent vérifier un ensemble de paquets ; dans ce cas, on dit qu’on cherche à établir une correspondance avec la règle. Chaque règle détermine ce qui doit être fait avec un paquet qui correspond. Cette action est appellée une «cible», qui peut être un saut vers une chaîne définie par l’utilisateur dans la même table.

CIBLES

Une règle de pare-feu spécifie des critères de correspondance pour un paquet, et une cible. Si le paquet ne correspond pas, la règle suivante de la chaîne est examinée ; s’il correspond, la règle suivante est déterminée par la valeur de la cible, qui peut être le nom d’une chaîne définie par l’utilisateur ou l’une des valeurs spéciales suivantes : ACCEPT, DROP, QUEUE ou RETURN.

ACCEPT signifie que le paquet est autorisé à passer. DROP signifie que le paquet est détruit. QUEUE signifie que le paquet est transmis à l’espace utilisateur (si cette option est reconnue par le noyau). RETURN signifie que l’on cesse de parcourir cette chaîne pour retourner dans la chaîne précédente (appelante) en passant à la règle suivante. Si on atteint la fin d’une chaîne prédéfinie ou s’il y a correspondance avec une règle dans une chaîne prédéfinie ayant pour cible RETURN, la cible désignée par le comportement par défaut de la chaîne détermine le sort du paquet.

TABLES

Il y a actuellement trois tables indépendantes (le moment où sont présentes les tables dépend des options de configuration du noyau et des modules chargés).

-t, --table table

Cette option désigne la table de correspondance des paquets sur laquelle la commande doit opérer. Si le noyau est configuré avec le chargement automatique des modules, une tentative sera faite pour charger le module approprié pour cette table, si ce n’est pas déjà fait.

Les tables sont les suivantes :

filter :

C’est la table par défaut (si l’option -t est omise). Elle contient les chaînes prédéfinies INPUT (pour les paquets entrants dans la machine), FORWARD (pour les paquets routés à travers la machine) et OUTPUT (pour les paquets générés localement).

nat :

Cette table est consultée lorsqu’on rencontre un paquet qui crée une nouvelle connexion. La table est composée de trois chaînes prédéfinies : PREROUTING (pour modifier les paquets dès qu’ils entrent), OUTPUT (pour modifier les paquets générés localement, avant le routage) et POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir).

mangle :

Cette table est employée pour effectuer une modification spéciale des paquets. Jusqu’au noyau 2.4.17, elle offrait deux chaînes prédéfinies : PREROUTING (pour modifier les paquets entrants, avant le routage) et OUTPUT (pour modifier les paquets générés localement, avant le routage). Depuis le noyau 2.4.18, trois autres chaînes prédéfinies sont aussi prises en charge : INPUT (pour les paquets entrants, destinés à la machine elle-même), FORWARD (pour modifier les paquets routés à travers la machine) et POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir).

OPTIONS

Les options reconnues par iptables peuvent être réparties en plusieurs groupes.

COMMANDES

Ces options précisent une action particulière à accomplir. Une seule option peut être indiquée sur la ligne de commande, sauf indication contraire. Pour tous les noms en version longue des commandes et des options, vous avez le droit d’utiliser un nombre restreint de lettres du moment qu’ iptables peut identifier chaque commande sans ambiguïté.

-A, --append chaîne règle

Ajoute une ou plusieurs règles à la fin de la chaîne sélectionnée. Lorsque les noms source et/ou destination désignent plus d’une adresse, une règle sera ajoutée pour chaque combinaison d’adresses possible.

-D, --delete chaîne règle

-D, --delete chaîne numéro-de-règle

Efface une ou plusieurs règles de la chaîne sélectionnée. Il y a deux versions de cette commande : on peut désigner la règle par sa position dans la chaîne avec un numéro (commençant à 1 pour la première règle) ou bien par une règle de correspondance avec sa syntaxe exacte.

-I, --insert chaîne [numéro-de-règle] règle

Insère une ou plusieurs règles dans la chaîne sélectionnée à la position donnée par le numéro de règle. Si ce numéro est 1, la ou les règles sont insérées au début de la chaîne. C’est le comportement par défaut si aucun numéro n’est spécifié.

-R, --replace chaîne numéro-de-règle règle

Remplace une règle dans la chaîne sélectionnée. Si les noms source et/ou destination désignent de multiples adresses, la commande échouera. Les règles sont numérotées en partant de 1.

-L, --list [chaîne]

Liste toutes les règles de la chaîne sélectionnée. Si aucune chaîne n’est sélectionnée, toutes les chaînes sont listées. Comme toute commande, elle s’applique à la table spécifiée (filter par défaut), ainsi les règles de NAT sont listées avec

 iptables -t nat -n -L

Notez qu’on l’utilise souvent avec l’option -n, pour éviter de longues résolutions DNS inverses. Il est autorisé de spécifier simultanément l’option -Z (zéro), auquel cas la ou les chaînes seront automatiquement listées et les compteurs remis à zéro. La sortie exacte dépend des autres arguments fournis. Les règles complètes sont omises sauf si vous exécutez

 iptables -L -v

-F, --flush [chaîne]

Vide la chaîne sélectionnée (ou toutes les chaînes de la table si aucune n’est précisée). Ceci équivaut à effacer toutes les règles une par une.

-Z, --zero [chaîne]

Met à zéro le compteur de paquets et d’octets dans toutes les chaînes. Il est autorisé d’associer l’option -L, --list (liste), pour visualiser les compteurs juste avant qu’ils ne soient initialisés (voir ci-dessus).

-N, --new-chain chaîne

Crée une nouvelle chaîne définie par l’utilisateur avec le nom indiqué. Il ne doit pas déjà exister de cible de même nom.

-X, --delete-chain [chaîne]

Efface la chaîne désignée définie par l’utilisateur. Il ne doit plus exister de référence à cette chaîne. S’il en reste, vous devez effacer ou remplacer les règles concernées avant de pouvoir effacer cette chaîne. Si aucun argument n’est fourni, une tentative aura lieu pour effacer dans la table toutes les chaînes non prédéfinies.

-P, --policy chaîne cible

Configure le comportement par défaut (la stratégie) de la chaîne avec la cible fournie. Voir la section CIBLES pour connaître les cibles autorisées. Seules les chaînes prédéfinies (donc non définies par l’utilisateur) peuvent avoir un comportement par défaut, et ni les chaînes prédéfinies ni les chaînes définies par l’utilisateur ne peuvent être des cibles stratégiques.

-E, --rename-chain ancien-nom-de-chaîne nouveau-nom-de-chaîne

Renomme la chaîne définie par l’utilisateur spécifiée avec le nom fourni. C’est un changement cosmétique qui n’a aucun effet sur la structure de la table.

-h

Aide. Donne une description (pour l’instant succincte) de la syntaxe d’une commande.

PARAMÃTRES

Les paramètres suivants composent une spécification de règle (quand ils sont utilisés dans les commandes add, delete, insert, replace et append).

-p, --protocol [!] protocole

Protocole de la règle ou du paquet à vérifier. Le protocole spécifié est l’un des suivants : tcp, udp, icmp ou all, ou bien sous forme d’une valeur numérique, représentant un de ces protocoles ou un protocole différent. Un nom de protocole issu du fichier /etc/protocols est aussi autorisé. Un «!» avant le protocole inverse le test. La valeur zéro est équivalente à all. Le protocole all correspond à tous les protocoles ; c’est aussi la valeur par défaut lorsque cette option est omise.

-s, --source [!] adresse[/masque]

Spécification de la source. L’adresse peut être un nom de réseau, un nom d’hôte (attention : spécifier un nom à résoudre avec une requête distante de type DNS est vraiment une mauvaise idée), une adresse de réseau IP (avec /masque) ou une simple adresse IP. Le masque peut être un masque de réseau ou un nombre entier spécifiant le nombre de bits égaux à 1 dans la partie gauche du masque de réseau (bits de poids fort). Par conséquent, un masque de 24 est équivalent à 255.255.255.0. Un «!» avant la spécification d’adresse inverse la sélection d’adresse. L’option --src est un synonyme de --source.

-d, --destination [!] adresse[/masque]

Spécification de la destination. Voir la description du paramètre -s (source) pour une description détaillée de la syntaxe. L’option --dst est un synonyme de --destination.

-j, --jump cible

Ceci détermine la cible de la règle ; c’est-à -dire ce qu’il faut faire si le paquet correspond à la règle. La cible peut être une chaîne définie par l’utilisateur (autre que celle dans laquelle se situe cette règle), une des cibles prédéfinies qui décide immédiatement du sort du paquet, ou une extension (voir EXTENSIONS ci-dessous). Si cette option est omise dans une règle, la correspondance d’un paquet avec la règle n’aura aucun effet sur le sort du paquet, mais les compteurs seront incrémentés.

-i, --in-interface [!] [nom]

Nom de l’interface qui reçoit les paquets (seulement pour les paquets passant par les chaînes INPUT, FORWARD et PREROUTING). Lorsqu’un «!» est utilisé avant le nom d’interface, la sélection est inversée. Si le nom de l’interface se termine par un «+», il désigne toutes les interfaces commençant par ce nom. Si cette option est omise, toutes les interfaces réseau sont désignées.

-o, --out-interface [!] [nom]

Nom de l’interface qui envoie les paquets (seulement pour les paquets passant par les chaînes FORWARD, OUTPUT et POSTROUTING). Lorsqu’un «!» est utilisé avant le nom d’interface, la sélection est inversée. Si le nom de l’interface se termine par un «+», il désigne toutes les interfaces commençant par ce nom. Si cette option est omise, toutes les interface réseau sont désignées.

[!] -f, --fragment

Avec cette option, la règle s’applique seulement aux paquets fragmentés, mais seulement à partir du deuxième fragment. Comme il est impossible d’en déterminer les ports source ou destination (ou le type ICMP), aucune règle ne pourra établir de correspondance sur ces critères. Lorsqu’un «!» précède l’option «-f», la règle ne s’applique qu’aux fragments d’en-tête ou aux paquets non fragmentés.

-c, --set-counters paquets octets

Ceci autorise l’administrateur à initialiser les compteurs de paquets et d’octets d’une règle (lors des opérations INSERT, APPEND, REPLACE).

AUTRES OPTIONS

Les options supplémentaires suivantes peuvent être employées :

-v, --verbose

Sortie verbeuse. Cette option indique à la commande --list d’afficher le nom de l’interface, les options de la règle (s’il y en a) et les masques de TOS (type de service). Les compteurs de paquets et d’octets sont aussi affichés, avec les suffixes ’K’, ’M’ ou ’G’ qui multiplient respectivement par 1 000, 1 000 000 et 1 000 000 000 (mais vous pouvez affiner ça avec l’option -x). Pour les ajouts, insertions, effacements et remplacements, sont fournies des informations détaillées sur la ou les règles à afficher.

-n, --numeric

Sortie numérique. Les adresses IP et les numéros de ports sont affichés au format numérique. Par défaut, le programme essaie de les afficher sous forme de noms d’hôtes, de noms réseaux ou de services (lorsque c’est applicable).

-x, --exact

Nombres étendus. Affiche la valeur exacte des compteurs de paquets et d’octets, au lieu d’afficher un nombre arrondi avec K (multiple de 1 000), M (multiple de 1 000K) ou G (multiple de 1 000M). Cette option n’est utile qu’avec la commande -L.

--line-numbers

Lorsque les règles sont listées, ceci ajoute un numéro de ligne au début de chaque règle, équivalant à la position de cette règle dans la chaîne.

--modprobe=commande

Lorsqu’on ajoute ou insère des règles dans une chaîne, utilisez la commande pour charger les modules nécessaires (cibles, extensions de correspondance, etc).

EXTENSIONS DE CORRESPONDANCE

iptables peut utiliser des modules additionnels de correspondance de paquets. Ceux-ci peuvent être chargés de deux manières : implicitement, lorsque -p ou --protocol est employé, ou avec l’option -m ou --match, suivie du nom du module de correspondance ; après cela, des options supplémentaires en ligne de commande deviennent disponibles, en fonction du module. Vous pouvez spécifier plusieurs modules de correspondance sur une même ligne, et utiliser l’option -h ou --help après avoir spécifié le module, pour visualiser l’aide relative à ce module.

Ce qui suit est inclus dans le paquetage de base et la plupart des options peuvent être précédées par un ! pour inverser la sélection.

ah

Ce module cherche une correspondance avec les indices SPI présents dans l’en-tête AH des paquets IPSec.

--ahspi [!] spi[:spi]

conntrack

Ce module, lorsqu’il est combiné avec du traçage de connexion, permet d’accéder à davantage d’informations sur le traçage de connexion que la correspondance «state» (ce module n’est disponible que si iptables a été compilé avec un noyau acceptant cette particularité).

--ctstate état-de-connexion

Le paramètre est une liste d’états de connexion (séparés par des virgules) à vérifier. Les états possibles sont INVALID signifiant que le paquet n’est associé à aucune connexion connue, ESTABLISHED signifiant que le paquet est associé à une connexion qui a déjà vu passer des paquets dans les deux sens, NEW signifiant soit que le paquet a initié une nouvelle connexion, soit qu’il est associé à une connexion qui n’a pas vu passer de paquets dans les deux sens, et RELATED signifiant que le paquet initie une nouvelle connexion, mais qu’il est associé avec une connexion existante, comme un transfert de données FTP ou une erreur ICMP. SNAT Un état virtuel, vérifié si l’adresse de source initiale diffère de l’adresse de destination de la réponse. DNAT Un état virtuel, vérifié si l’adresse de destination initiale diffère de l’adresse de source de la réponse.

--ctproto protocole

Le protocole à vérifier (donné par le numéro ou le nom).

--ctorigsrc [!] adresse[/masque]

Correspondance avec l’adresse de source initiale.

--ctorigdst [!] adresse[/masque]

Correspondance avec l’adresse de destination initiale.

--ctreplsrc [!] adresse[/masque]

Correspondance avec l’adresse de source de la réponse.

--ctrepldst [!] adresse[/masque]

Correspondance avec l’adresse de destination de la réponse.

--ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...]

Correspondance avec les états internes du module conntrack.

--ctexpire temps[:temps]

Correspondance avec la durée de validité restante (en secondes) donnée sous forme d’une valeur fixe ou d’un intervalle (bornes incluses).

dscp

Ce module cherche une correspondance avec le champ DSCP de 6 bits dans le champ TOS de l’en-tête IP. DSCP a remplacé le TOS au sein de l’IETF.

--dscp valeur

Correspondance avec une valeur numérique [0-32] (sous forme décimale ou hexa).

--dscp-class Classe DiffServ

Correspondance avec la classe DiffServ. Cette donnée peut être une des classes BE, EF, AFxx ou CSx. Elle pourra aussi être convertie en sa valeur numérique équivalente.

esp

Ce module cherche une correspondance avec les indices SPI présents dans l’en-tête ESP des paquets IPSec.

--espspi [!] spi[:spi]

helper

Ce module cherche une correspondance avec les paquets en relation avec un module spécifique d’aide au traçage de connexion (module conntrack-helper).

--helper chaîne

Correspondance avec les paquets en relation avec le module d’aide au traçage de connexion désigné.

La chaîne peut être «ftp» pour les paquets liés à une session FTP sur le port par défaut. Pour d’autres ports, ajoutez -numérodeport à la chaîne, par exemple «ftp-2121».

Les mêmes règles s’appliquent aux autres modules d’aide au traçage de connexion.

icmp

Cette extension est chargée si «--protocol icmp» est spécifié. Elle procure l’option suivante :

--icmp-type [!] nom_du_type_icmp

Ceci autorise la spécification d’un type ICMP, soit avec un type ICMP numérique, soit avec l’un des noms de type ICMP fourni par la commande

 iptables -p icmp -h

length

Ce module cherche une correspondance avec la longueur d’un paquet, donnée par une valeur fixe ou un intervalle.

--length longueur[:longueur]

limit

Ce module établit une correspondance avec les paquets en respectant un débit limité, à l’aide d’un filtre à seau de jetons («token bucket filter»). Une règle utilisant cette extension établira une correspondance jusqu’à ce que cette limite soit atteinte (sauf si le «!» est employé). Il peut être utilisé conjointement avec la cible LOG, par exemple afin de limiter les messages de journalisation (log).

--limit taux

Taux de correspondance moyen maximum : déterminé par un nombre, avec un suffixe optionnel «/second», «/minute», «/hour», ou «/day» ; la valeur par défaut est 3/hour.

--limit-burst nombre

Nombre initial maximum de paquets pouvant correspondre : ce nombre est rechargé de 1 chaque fois que la limite définie précédemment n’est pas atteinte, jusqu’à retrouver la valeur initiale ; la valeur par défaut est 5.

mac

--mac-source [!] adresse

Ãtablit une correspondance avec l’adresse MAC source. Elle doit être de la forme XX:XX:XX:XX:XX:XX. Notez que ceci n’a de sens que pour les paquets en provenance d’une interface Ethernet et passant par les chaînes PREROUTING, FORWARD ou INPUT.

mark

Ce module cherche une correspondance avec le champ de marquage de Netfilter associé à un paquet (celui-ci peut être positionné en utilisant la cible MARK décrite ci-dessous).

--mark valeur[/masque]

Ãtablit une correspondance avec les paquets associés à la valeur de marquage non-signée fournie (si un masque est spécifié, on effectue un ET logique avec le masque avant la comparaison).

multiport

Ce module cherche les correspondances avec un ensemble de ports source ou destination. On peut spécifier jusqu’à 15 ports. Il ne peut être utilisé qu’en conjonction avec -p tcp ou -p udp.

--source-ports port[,port[,port...]]

Ãtablit la correspondance si le port source est l’un des ports spécifiés. Et --sports est un synonyme commode pour cette option.

--destination-ports port[,port[,port...]]

Ãtablit la correspondance si le port destination est l’un des ports spécifiés. Et --dports est un synonyme commode pour cette option.

--ports port[,port[,port...]]

Ãtablit la correspondance si les ports source et destination sont identiques, et égaux à l’un des ports spécifiés.

owner

Ce module tente d’établir une correspondance avec différentes caractéristiques du créateur d’un paquet, pour les paquets générés localement. Il est valide uniquement dans la chaîne OUTPUT, et même si certains paquets sans propriétaire (comme les réponses ICMP d’un ping) ne correspondront jamais.

--uid-owner id_utilisateur

Ãtablit une correspondance si le paquet a été créé par un processus avec l’identifiant d’utilisateur donné.

--gid-owner id_de_groupe

Ãtablit une correspondance si le paquet a été créé par un processus avec l’identifiant de groupe donné.

--pid-owner id_du_processus

Ãtablit une correspondance si le paquet a été créé par un processus avec le numéro de processus donné.

--sid-owner id_de_session

Ãtablit une correspondance si le paquet a été créé par un processus dans le groupe de session donné.

--cmd-owner nom_de_commande

Ãtablit une correspondance si le paquet a été créé par un processus avec le nom de commande donné (cette option n’est disponible que si iptables a été compilé avec un noyau acceptant cette particularité).

physdev

Ce module cherche une correspondance sur un port de pont avec les dispositifs d’entrée/sortie attachés à ce pont. Ce module fait partie de l’infrastructure qui permet d’avoir un pare-feu IP transparent sur un pont et n’est utile que pour les versions de noyaux supérieures à 2.5.44.

--physdev-in nom_de_port

Nom d’un port de pont par lequel un paquet est reçu (seulement pour les paquets entrant dans les chaînes INPUT, FORWARD et PREROUTING). Si le nom de l’interface se termine par un «+», il désigne toutes les interfaces commençant par ce nom. Si le paquet ne provient pas d’un pont, ce paquet ne correspondra pas avec cette option, sauf si un «!» est employé.

--physdev-out nom_de_port

Nom d’un port de pont par lequel un paquet est prêt à être envoyé (seulement pour les paquets entrant dans les chaînes FORWARD, OUTPUT et POSTROUTING). Si le nom de l’interface se termine par un «+», il désigne toutes les interfaces commençant par ce nom. Notez que dans les chaînes OUTPUT des tables nat et mangle, aucune règle ne peut correspondre sur un port de sortie de pont, mais que c’est possible dans la chaîne OUTPUT de la table filter. Si un paquet ne sort pas par un pont ou si l’on ne sait pas encore quel est le dispositif de sortie, le paquet ne correspondra pas avec cette option, sauf si un «!» est employé.

--physdev-is-in

Ãtablit une correspondance si le paquet est entré par une interface de pont.

--physdev-is-out

Ãtablit une correspondance si le paquet sort par une interface de pont.

--physdev-is-bridged

Ãtablit une correspondance si le paquet est prêt à traverser un pont et ne sera donc pas routé. Ce n’est utile que pour les chaînes FORWARD et POSTROUTING.

pkttype

Ce module cherche une correspondance avec le type du paquet de la couche liaison de données.

--pkt-type [unicast|broadcast|multicast]

state

Ce module, lorsqu’il est associé avec du traçage de connexion, permet d’accéder à l’état du traçage de connexion pour ce paquet.

--state état-de-connexion

Le paramètre est une liste d’états de connexion (séparés par des virgules) avec lesquels on cherche une correspondance. Les états possibles sont INVALID signifiant que le paquet ne peut être identifié pour une raison quelconque comme une exécution avec mémoire insuffisante et des erreurs ICMP ne correspondant à aucune connexion connue, ESTABLISHED signifiant que le paquet est associé à une connexion qui a vu passer des paquets dans les deux sens, NEW signifiant que le paquet a initié une nouvelle connexion, ou bien qu’il est associé à une connexion qui n’a pas vu passer de paquets dans les deux sens, et RELATED signifiant que le paquet initie une nouvelle connexion, mais qu’il est associé à une connexion existante, comme un transfert de données FTP ou une erreur ICMP.

tcp

Ces extensions sont chargées si l’option «--protocol tcp» est spécifiée. Elle procure les options suivantes :

--source-port [!] port[:port]

Spécification d’un port source ou d’un intervalle de ports. Ce peut être le nom d’un service ou le numéro d’un port. Un intervalle (bornes incluses) peut aussi être défini en utilisant le format suivant port:port. Si le premier port est omis, on considère que c’est «0» ; si le dernier port est omis, on considère que c’est «65535». Si le second port est plus petit que le premier, ils seront intervertis. Et --sport est un synonyme commode pour cette option.

--destination-port [!] port[:port]

Spécification d’un port destination ou d’un intervalle de ports. Et --dport est un synonyme commode pour cette option.

--tcp-flags [!] masque comp

Ãtablit une correspondance lorsque les fanions TCP («TCP flags») coïncident avec ceux spécifiés. Le premier argument identifie les fanions à examiner (sous la forme d’un liste de fanions séparés par des virgules) et le deuxième argument identifie les fanions devant être positionnés (toujours sous la forme d’une liste de fanions séparés par des virgules). Les fanions sont : SYN ACK FIN RST URG PSH ALL NONE. Par conséquent, la commande

 iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN

ne sélectionnera que les paquets ayant le fanion SYN positionné mais également les fanions ACK, FIN et RST désactivés.

[!] --syn

Ãtablit une correspondance seulement avec les paquets TCP dont le bit SYN est positionné et les bits ACK et RST sont désactivés. De tels paquets sont utilisés pour les requêtes d’établissement de connexion TCP ; par exemple, si l’on bloque ce type de paquets entrants sur une interface, on empêchera les connexions TCP entrantes, mais les connexions TCP sortantes ne seront pas affectées. C’est équivalent à --tcp-flags SYN,RST,ACK SYN. Si le signe «!» précède le «--syn», la sélection est inversée.

--tcp-option [!] numéro

Ãtablit une correspondance si l’option TCP indiquée est positionnée.

--mss valeur[:valeur]

Ãtablit une correspondance avec les paquets TCP de type SYN ou SYN/ACK caractérisés par la valeur ou l’intervalle MSS spécifié, contrôlant la taille maximale du paquet pour cette connexion.

tos

Ce module cherche une correspondance avec les 8 bits du champ Type de Service (TOS) dans l’en-tête IP (ceci inclut les bits de priorité).

--tos type_de_service

Cet argument à détecter est soit un nom standard (utiliser
iptables -m tos -h
pour afficher la liste), soit une valeur numérique.

ttl

Ce module cherche une correspondance avec le champ de durée de validité («Time To Live» ou TTL) de l’en-tête IP.

--ttl valeur_ttl

Ãtablit une correspondance avec la valeur TTL donnée.

udp

Ces extensions sont chargées si «--protocol udp» est spécifié. Elles procurent les options suivantes :

--source-port [!] port[:port]

Spécification d’un port source ou d’un intervalle de ports. Voir la description de l’option --source-port de l’extension TCP pour obtenir des précisions.

--destination-port [!] port[:port]

Spécification d’un port destination ou d’un intervalle de ports. Voir la description de l’option --destination-port de l’extension TCP pour obtenir des précisions.

unclean

Ce module n’a aucune option, mais il tente d’établir une correspondance avec les paquets qui semblent mal formés ou inhabituels. Cette option est considérée comme expérimentale.

EXTENSIONS DE CIBLE

iptables peut utiliser des modules de cible additionnels : les suivants sont inclus dans la distribution standard.

DNAT

Cette cible est seulement valide dans la table nat, dans les chaînes PREROUTING et OUTPUT, et dans les chaînes définies par l’utilisateur appelées par celles-ci. Elle spécifie que l’adresse de destination du paquet doit être modifiée (comme toutes celles des paquets à venir dans le cadre de cette connexion), et que les règles doivent cesser d’être examinées. Elle accepte une option :

--to-destination adresse-ip[-adresse-ip][:port-port]

qui peut définir une nouvelle et unique adresse IP de destination, un intervalle d’adresses IP (bornes incluses) et éventuellement un intervalle de ports (qui n’est valide que si la règle contient aussi -p tcp ou -p udp). Si aucun intervalle n’est spécifié, alors le port destination ne sera jamais modifié.

Vous pouvez ajouter plusieurs options --to-destination. Si vous définissez plus d’une adresse de destination, via un intervalle d’adresses ou via plusieurs options --to-destination, un simple équilibrage de charge de type «round-robin» (tour de rôle) sera effectué entre ces adresses.

DSCP

Cette cible permet de modifier la valeur des bits DSCP dans l’en-tête TOS d’un paquet IPv4. Comme ceci transforme le paquet, on ne peut l’utiliser que dans la table mangle.

--set-dscp valeur

Donne au champ DSCP une valeur numérique (décimale ou hexa).

--set-dscp-class classe

Donne au champ DSCP une classe DiffServ (services différenciés).

ECN

Cette cible permet de travailler de façon sélective sur les trous noirs ECN connus. On ne peut l’utiliser que dans la table mangle.

--ecn-tcp-remove

Supprime tous les bits ECN de l’en-tête TCP. Naturellement, ceci ne peut être utilisé qu’avec -p tcp.

LOG

Met en service la journalisation par le noyau pour les paquets qui correspondent. Lorsque cette option est définie dans une règle, le noyau Linux affichera des informations sur tous les paquets correspondant avec cette règle (comme la plupart des champs de l’en-tête IP) par l’intermédiaire des journaux du noyau (que l’on peut lire avec dmesg ou syslogd(8)). Ceci est une cible «non déterminante», c.-à -d. que l’analyse de cette règle enchaîne nécessairement sur la règle suivante. Ainsi, si vous voulez journaliser des paquets à rejeter, utilisez deux règles distinctes avec le même critère de correspondance, en plaçant en premier la cible LOG et ensuite la cible DROP (ou REJECT).

--log-level niveau

Niveau de journalisation (sous forme numérique, ou voir syslog.conf(5)).

--log-prefix préfixe

Préfixe les messages de journalisation avec le préfixe indiqué ; jusqu’à 29 lettres de long, il est très utile pour différencier les différents messages dans les fichiers journaux.

--log-tcp-sequence

Journalise les numéros de séquence TCP. Ce peut être un risque pour la sécurité si les fichiers journaux sont lisibles par les utilisateurs ordinaires.

--log-tcp-options

Journalise les options de l’en-tête des paquets TCP.

--log-ip-options

Journalise les options de l’en-tête des paquets IP.

MARK

Ceci est utilisé pour activer la valeur de marquage de Netfilter associée au paquet. Ceci est valide uniquement avec la table mangle. On peut l’utiliser par exemple conjointement avec iproute2.

--set-mark marque

MASQUERADE

Cette cible est seulement valide dans la table nat, dans la chaîne POSTROUTING. Elle ne doit être utilisée que dans le cas d’une connexion où l’adresse IP est assignée dynamiquement (liaison téléphonique) : si vous avez une adresse IP statique, vous devez utiliser la cible SNAT. Le camouflage («masquerading») revient à effectuer une association (et une substitution) de l’adresse de source avec l’adresse IP de l’interface par laquelle les paquets sortent, mais cela a pour conséquence d’ oublier les connexions lorsque l’interface est déconnectée. C’est un comportement approprié, car au prochain établissement de la liaison, il y a peu de chance d’obtenir la même adresse d’interface (par conséquent les connexions déjà établies seront inévitablement perdues). Il existe une option

--to-ports port[-port]

qui définit un intervalle de ports source à utiliser, annule et remplace la sélection heuristique de ports source du SNAT (voir ci-dessus). Ceci n’est valide que si la règle contient aussi -p tcp ou -p udp.

MIRROR

Ceci est une cible de démonstration expérimentale qui inverse les champs source et destination dans l’en-tête IP et retransmet le paquet. Il est valide uniquement avec les chaînes INPUT, FORWARD et PREROUTING, et avec les chaînes définies par l’utilisateur appelées par celles-ci. Notez que les paquets sortants NE sont PAS vus par les autres chaînes de filtrage de paquets, de traçage de connexions ou de traduction d’adresses (NAT), afin d’éviter les boucles infinies et d’autres problèmes.

REDIRECT

Cette cible est seulement valide dans la table nat, dans les chaînes PREROUTING et OUTPUT, et dans les chaînes définies par l’utilisateur appelées par celles-ci. Elle modifie l’adresse IP de destination pour envoyer le paquet à la machine elle-même (les paquets générés localement sont convertis vers l’adresse 127.0.0.1). Il existe une option

--to-ports port[-port]

qui définit un port destination ou un intervalle de ports à utiliser : sans cela, le port destination ne sera jamais modifié. Ceci n’est valide que si la règle contient aussi -p tcp ou -p udp.

REJECT

Cette cible est utilisée pour répondre par un paquet d’erreur à un paquet qui correspond : à part cela, c’est équivalent à DROP, donc c’est une cible déterminante, concluant l’analyse d’une règle. Cette cible est uniquement valide dans les chaînes INPUT, FORWARD et OUTPUT, et dans les chaînes définies par l’utilisateur appelées par celles-ci. L’option suivante contrôle la nature du paquet d’erreur retourné :

--reject-with type

Le type donné peut être icmp-net-unreachable (réseau inaccessible), icmp-host-unreachable (machine inaccessible), icmp-port-unreachable (port inaccessible), icmp-proto-unreachable (protocole non utilisable), icmp-net-prohibited (réseau interdit), icmp-host-prohibited (machine interdite) ou icmp-admin-prohibited(*) (communication interdite par l’administrateur), chacun retournant le message d’erreur ICMP approprié (par défaut, port inaccessible). L’option tcp-reset peut être utilisée dans les règles associées uniquement avec le protocole TCP : on envoie en retour un paquet TCP RST. On l’utilise principalement pour bloquer les sondes ident (113/tcp), ce qui arrive fréquemment lorsqu’on envoie des courriels à des hôtes de messagerie inaccessibles (qui d’ailleurs n’accepteront pas votre courrier).

(*) L’utilisation du type icmp-admin-prohibited avec des noyaux qui

ne l’acceptent pas entraîne l’application de la cible DROP au lieu de REJECT.

SNAT

Cette cible est seulement valide dans la table nat, dans la chaîne POSTROUTING. Elle spécifie que l’adresse source du paquet doit être modifiée (ainsi que tous les futurs paquets de cette même connexion), et que les règles doivent cesser d’être examinées. Elle prend un seul type d’option :

--to-source adresse-ip[-adresse-ip][:port-port]

qui peut définir une nouvelle et unique adresse IP de destination, un intervalle d’adresses IP (bornes incluses) et éventuellement un intervalle de ports (qui n’est valide que si la règle contient aussi -p tcp ou -p udp). Si aucun intervalle de ports n’est spécifié, les ports source inférieurs à 512 seront convertis vers d’autres ports inférieurs à 512 : ceux compris entre 512 et 1023 inclus seront convertis vers des ports inférieurs à 1024, et les autres seront convertis vers des ports supérieurs à 1024. Lorsque c’est possible, aucune modification de ports n’est effectuée.

Vous pouvez ajouter plusieurs options --to-source. Si vous définissez plus d’une adresse source, via un intervalle d’adresses ou via plusieurs options --to-source, une simple alternance de type «round-robin» (tour de rôle) sera effectuée entre ces adresses.

TCPMSS

Cette cible permet de modifier la valeur MSS des paquets TCP SYN, pour contrôler la taille maximale des segments pour cette connexion (habituellement, on la limite au MTU de l’interface de sortie moins 40). Naturellement, elle ne peut être utilisée qu’avec -p tcp.
Cette cible est utilisée pour triompher des FAI à tendance criminelle ou des serveurs qui bloquent les paquets ICMP de type «Fragmentation Needed» (fragmentation nécessaire). Pour comprendre les symptômes d’un tel problème, tout semble bien fonctionner sur votre pare-feu/routeur Linux, mais les machines retranchées derrière ne peuvent échanger des paquets volumineux :

1)

Les navigateurs web se connectent, puis s’interrompent sans plus recevoir de données.

2)

Les petits messages fonctionnent bien, mais les plus gros s’arrêtent.

3)

ssh fonctionne bien, mais scp s’arrête après l’initialisation initiale en trois étapes («three-way handshake».

Solution de rechange : activer cette option et ajouter une règle à votre configuration de pare-feu comme :

 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
             -j TCPMSS --clamp-mss-to-pmtu

--set-mss valeur

Fixe explicitement l’option MSS à la valeur spécifiée.

--clamp-mss-to-pmtu

Limite automatiquement le MSS Ã la valeur (MTU_de_la_liaison - 40).

Ces options sont mutuellement exclusives.

TOS

Ceci est utilisé pour définir le champ de Type de Service (TOS) représenté sur 8 bits dans l’en-tête IP. Ceci n’est valide que dans la table mangle.

--set-tos type_de_service

Pour le Type de Service, vous pouvez utiliser une valeur numérique, ou exécuter

 iptables -j TOS -h

pour afficher la liste des noms de TOS valides.

ULOG

Cette cible permet de journaliser dans un espace utilisateur des paquets qui établissent une correspondance avec une règle. Lorsque cette cible est désignée dans une règle, le noyau de Linux va multi-diffuser le paquet par l’intermédiaire d’un connecteur («socket») netlink. Un ou plusieurs processus de l’espace utilisateur peuvent alors souscrire à divers groupes de multi-diffusion et recevoir les paquets. Tout comme la cible LOG, c’est une règle non-déterminante, c’est-à -dire que l’analyse d’une règle enchaîne sur la règle suivante.

--ulog-nlgroup groupe_netlink

Définit le groupe netlink (1-32) vers lequel le paquet est envoyé. La valeur par défaut est 1.

--ulog-prefix préfixe

Préfixe les messages du journal avec le préfixe indiqué ; jusqu’à 32 caractères de long, et très utile pour différencier les messages dans les journaux.

--ulog-cprange taille

Nombre d’octets à copier dans l’espace utilisateur. Une valeur de 0 copie le paquet entier, sans tenir compte de sa taille. La valeur par défaut est 0.

--ulog-qthreshold taille

Nombre de paquets à mettre dans la file d’attente du noyau. Fixer cette valeur par exemple à 10, accumule 10 paquets dans le noyau et les transmet en un seul message «netlink» de multi-contenus (type «multipart») vers l’espace utilisateur. La valeur par défaut est 1 (pour la rétro-compatibilité, c’est-à -dire avec les implémentations précédentes).

DIAGNOSTICS

Divers messages d’erreur sont envoyés vers la sortie d’erreur standard. Un code de sortie de 0 correspond à un fonctionnement normal. Une ligne de commande contenant des paramètres invalides ou abusifs génère un code de sortie égal à 2, et les autres erreurs renvoient un code de sortie égal à 1.

BOGUES

Des bogues ? Qu’est-ce que c’est ? ;-) Bon... les compteurs ne sont pas fiables sur l’architecture sparc64.

COMPATIBILITÃ AVEC IPCHAINS

Cet iptables est très similaire à l’ipchains de Rusty Russell. La différence principale est que les chaînes INPUT et OUTPUT sont uniquement traversées, respectivement par les paquets entrant dans la machine locale et sortant de la machine locale. Par conséquent, tous les paquets passent uniquement par une seule des trois chaînes (sauf le trafic vers la boucle locale, qui implique à la fois les chaînes INPUT et OUTPUT) ; auparavant, un paquet redirigé serait passé par les trois chaînes.

L’autre différence principale est que -i fait référence à l’interface d’entrée ; -o fait référence à l’interface de sortie, et toutes les deux sont disponibles pour les paquets entrant dans la chaîne FORWARD.

iptables est un pur filtre à paquets lorsqu’il utilise la table par défaut «filter», avec d’éventuels modules d’extensions. Cela devrait éliminer la confusion qu’il pouvait y avoir avec la combinaison du camouflage d’adresses IP et du filtrage de paquets vu précédemment. Les options suivantes sont donc gérées différemment :

 -j MASQ
 -M -S
 -M -L

Il y a quelques autres changements dans iptables.

VOIR AUSSI

iptables-save(8), iptables-restore(8), ip6tables(8), ip6tables-save(8), ip6tables-restore(8).

Le «Guide pratique du filtrage de paquets» (Packet-Filtering-HOWTO) qui détaille l’utilisation d’iptables pour les techniques de filtrage, le «Guide pratique de la traduction d’adresses réseau» (NAT-HOWTO) qui détaille la traduction d’adresse réseau, et le Netfilter-Hacking-HOWTO qui détaille le fonctionnement interne de Netfilter.
Consulter http://www.netfilter.org/.

TRADUCTION

Christophe Donnier (mars 2002), Guillaume Audirac (août 2004)

AUTEURS

Rusty Russell a écrit iptables, avec la collaboration de Michael Neuling.

Marc Boucher a suggéré à Rusty l’abandon d’ipnatctl en proposant une structure générique de sélection de paquets dans iptables, puis il écrivit la table mangle, la correspondance avec le propriétaire, des choses sur le marquage, puis s’en fut faire d’autres choses géniales un peu partout.

James Morris a écrit la cible du Type de Service (TOS) et les correspondances de TOS.

Jozsef Kadlecsik a écrit la cible REJECT.

Harald Welte a écrit la cible ULOG, les correspondances et les cibles TTL, DSCP, ECN.

L’équipe principale de Netfilter est composée de : Marc Boucher, Martin Josefsson, Jozsef Kadlecsik, James Morris, Harald Welte et Rusty Russell.

La page de manuel a été écrite par Hervé Eychenne <rv@wallfire.org>.

AVERTISSEMENT SUR LA TRADUCTION

Il est possible que cette traduction soit imparfaite ou périmée. En cas de doute, veuillez vous reporter au document original en langue anglaise fourni avec le programme.


iptables(8)