Linux |
CentOS 5.3 |
|
ip6tables(8) |
ip6tables − outil d’administration pour le filtrage de paquets IPv6 |
ip6tables [-t table] -[AD] chaîne
règle [options] |
ip6tables est utilisé pour mettre en place, maintenir et inspecter les tables des règles de filtrage des paquets IPv6 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. |
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. |
Il y a actuellement deux tables indépendantes (le moment où sont présentes les tables dépend des options de configuration du noyau et des modules chargés), puisque la tables nat n’est pas encore implémentée. |
-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). |
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). |
Les options reconnues par ip6tables 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’ ip6tables 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 |
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 mangle sont listées avec ip6tables -t mangle -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 ip6tables -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, ipv6-icmp|icmpv6, 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 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 IPv6 (avec /masque) ou une simple adresse IPv6 (un nom de réseau n’est pas encore pris en charge). 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 64 est équivalent à ffff:ffff:ffff:ffff:0000:0000:0000:0000. 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 et OUTPUT). 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. |
-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 IPv6 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 de 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). |
ip6tables 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. |
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 ip6tables -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. |
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. |
ipv6-icmp |
Cette extension est chargée si «--protocol ipv6-icmp» ou «--protocol icmpv6» est spécifié. Elle procure l’option suivante : |
--icmpv6-type [!] nom_du_type |
Ceci autorise la spécification d’un type ICMP, soit avec un type IPv6-ICMP numérique, soit avec l’un des noms de type IPv6-ICMP fournis par la commande ip6tables -p ipv6-icmp -h |
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. |
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. |
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. |
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). |
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. Ceci est considéré comme expérimental. |
--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é. |
ip6tables peut utiliser des modules de cible additionnels : les suivants sont inclus dans la distribution standard. |
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 IPv6) 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 IPv6. |
MARK |
Ceci est utilisé pour activer la valeur de marquage de Netfilter associée au paquet. Ceci est valide uniquement avec la table mangle. |
--set-mark marque |
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 icmp6-no-route, no-route (absence de route), icmp6-adm-prohibited, adm-prohibited (communication interdite par l’administrateur), icmp6-addr-unreachable, addr-unreach (adresse introuvable), icmp6-port-unreachable ou port-unreach (port inaccessible), chacun retournant le message d’erreur IPv6-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). |
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. |
Des bogues ? Qu’est-ce que c’est ? ;-) Bon... les compteurs ne sont pas fiables sur l’architecture sparc64. |
Cet ip6tables 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. Il y a quelques autres changements dans ip6tables. |
ip6tables-save(8), ip6tables-restore(8), iptables(8), iptables-save(8), iptables-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, le
Netfilter-extensions-HOWTO qui détaille les
extensions absentes de la distribution standard, et le
Netfilter-Hacking-HOWTO qui détaille le
fonctionnement interne de Netfilter. |
Christophe Donnier (mars 2002), Guillaume Audirac (août 2004) |
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, et libipulog. 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 ip6tables a été créée par Andras Kis-Szabo, à partir de la page de manuel iptables écrite par Hervé Eychenne <rv@wallfire.org>. |
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. |
ip6tables(8) |