IPTABLES(8) iptables 1.8.10 IPTABLES(8) NOM iptables/ip6tables -- Outil d'administration pour le filtrage et le NAT des paquets IPv4/IPv6 SYNOPSIS iptables [-t table] {-A|-C|-D|-V} chaine specification_de_regle ip6tables [-t table] {-A|-C|-D|-V} chaine specification_de_regle iptables [-t table] -I chaine [numero_de_regle] specification_de_regle iptables [-t table] -R chaine numero_de_regle specification_de_regle iptables [-t table] -D chaine numero_de_regle iptables [-t table] -S [chaine [numero_de_regle]] iptables [-t table] {-F|-L|-Z} [chaine [numero_de_regle]] [options...] iptables [-t table] -N chaine iptables [-t table] -X [chaine] iptables [-t table] -P chaine cible iptables [-t table] -E ancienne_chaine nouvelle_chaine specification_de_regle = [correspondances...] [cible] correspondance = -m nom_correspondance [options_par_correspondance] cible = -j nom_cible [options_par_cible] DESCRIPTION Iptables et ip6tables permettent de definir, entretenir et inspecter les tables de regles de filtrage des paquets IPv4 et IPv6 dans le noyau Linux. Plusieurs tables peuvent etre definies. Chaque table contient des chaines predefinies, mais peut aussi contenir des chaines definies par l'utilisateur. Chaque chaine est une liste de regles qui peuvent s'appliquer a un ensemble de paquets. Chaque regle specifie quoi faire d'un paquet qui correspond. Cette action que l'on nomme << cible >> peut etre un saut vers une chaine definie par l'utilisateur dans la meme table. CIBLES Une regle de pare-feu specifie des criteres pour un paquet et une cible. Si un paquet ne correspond pas, la regle suivante dans la chaine est examinee ; s'il correspond, la regle suivante est specifiee par la valeur de la cible qui peut etre le nom d'une chaine definie par l'utilisateur, une des cibles decrites dans iptables-extensions(8) ou une des valeurs speciales ACCEPT, DROP ou RETURN. ACCEPT signifie que le paquet peut passer. DROP signifie que le paquet doit etre rejete. RETURN signifie que l'on doit arreter de parcourir cette chaine et reprendre a la regle suivante de la chaine precedente (appelante). Si la fin d'une chaine predefinie est atteinte ou si une regle d'une chaine predefinie ayant pour cible RETURN s'applique, la cible par defaut de la chaine determinera le sort du paquet. TABLES Il existe actuellement cinq tables independantes (la liste des tables presentes a tout moment depend des options de configuration du noyau et de la liste des modules presents). -t, --table table Cette option specifie la table de correspondance des paquets sur laquelle la commande doit operer. Si le noyau est configure pour charger les modules automatiquement, il tentera de charger le module approprie a cette table, s'il ne l'est pas deja. Les tables sont les suivantes : filter : Il s'agit de la table par defaut (dans le cas ou aucune option -t n'est specifiee). Elle contient les chaines predefinies INPUT (pour les paquets destines aux sockets locaux), FORWARD (pour les paquets routes par la machine) et OUTPUT (pour les paquets generes localement). nat : Cette table est consultee quand arrive un paquet qui cree une nouvelle connexion. Elle comporte quatre chaines predefinies : PREROUTING (pour modifier les paquets des leur entree), INPUT (pour modifier les paquets destines aux sockets locaux), OUTPUT (pour modifier les paquets generes localement avant leur routage) et POSTROUTING (pour modifier les paquets lorsqu'ils sont sur le point de sortir). Le NAT IPv6 est pris en charge depuis la version 3.7 du noyau. mangle : Cette table est utilisee pour une modification specialisee des paquets. Jusqu'a la version 2.4.17 du noyau, elle comportait deux chaines predefinies : PREROUTING (pour la modification des paquets entrants avant leur routage) et OUTPUT (pour la modification des paquets generes localement avant leur routage). Depuis la version 2.4.18, trois autres chaines predefinies sont prises en charge : INPUT (pour les paquets entrant dans la machine elle-meme), FORWARD (pour la modification des paquets routes a travers la machine) et POSTROUTING (pour modifier les paquets lorsqu'ils sont sur le point de sortir). raw : Cette table est principalement utilisee pour configurer les exemptions de suivi de connexion en combinaison avec la cible NOTRACK. Elle s'enregistre aux accroches netfilter avec une priorite superieure et est ainsi appelee avant ip_conntrack ou toute autre table IP. Elle comporte les chaines predefinies suivantes : PREROUTING (pour les paquets arrivant par toute interface reseau) et OUTPUT (pour les paquets generes par des processus locaux). security : Cette table est utilisee pour les regles Mandatory Access Control (MAC), comme celles qui sont activees par les cibles SECMARK et CONNSECMARK. Mandatory Access Control est implemente par les modules de securite Linux comme SELinux. La table security est appelee apres la table filter, ce qui permet a toute regle Discretionary Access Control (DAC) de la table filter de prendre effet avant les regles MAC. Elle comporte les chaines predefinies suivantes : INPUT (pour les paquets entrant dans la machine elle-meme), OUTPUT (pour la modification des paquets generes localement avant leur routage) et FORWARD (pour la modification des paquets routes a travers la machine). OPTIONS Les options reconnues par iptables et ip6tables peuvent etre reparties en plusieurs groupes. COMMANDES Ces options specifient l'action a executer. Sauf indications contraires precisees plus loin, la ligne de commande ne peut comporter qu'une seule de ces options. Pour les versions longues des noms de commande et d'option, il vous suffit de preciser suffisamment de lettres pour etre sur qu'iptables puisse les differencier des autres commandes et options. -A, --append chaine specification_de_regle Ajouter une ou plusieurs regles a la fin de la chaine indiquee. Lorsque les noms de source et/ou destination se resolvent en plusieurs adresses, une regle sera ajoutee pour chaque combinaison d'adresses possible. -C, --check chaine specification_de_regle Verifier si une regle correspondant a la specification existe dans la chaine indiquee. Cette commande utilise la meme logique que -D pour trouver une entree qui correspond, mais ne modifie pas la configuration d'iptables existante et utilise son code de retour pour indiquer un succes ou un echec. -D, --delete chaine specification_de_regle -D, --delete chaine numero_de_regle Supprimer une ou plusieurs regles de la chaine indiquee. Il existe deux versions de cette commande : la regle peut etre referencee par son numero dans la chaine (en commencant par 1 pour la premiere regle) ou par une correspondance avec une certaine regle. -I, --insert chaine [numero_de_regle] specification_de_regle Inserer une ou plusieurs regles dans la chaine indiquee avec le numero de regle donne. Ainsi, si le numero donne est 1, la(les) regle(s) sont inserees en tete de chaine. Il s'agit d'ailleurs du comportement par defaut si aucun numero de regle n'est donne. -R, --replace chaine numero_de_regle specification_de_regle Remplacer une regle dans la chaine indiquee. Si les noms de source et/ou de destination se resolvent en plusieurs adresses, la commande echouera. Les regles sont numerotees a partir de 1. -L, --list [chaine] Lister toutes les regles de la chaine indiquee. Si aucune chaine n'est indiquee, toutes les chaines sont listees. Cette commande, comme toutes les autres commandes d'iptables, s'applique a la table indiquee (la table par defaut est filter) ; ainsi, les regles de NAT peuvent etre listees par iptables -t nat -n -L Veuillez noter que cette option est souvent utilisee en combinaison avec l'option -n afin d'eviter de longues recherches DNS inverses. On peut aussi specifier l'option -Z (zero), auquel cas la(les) chaine(s) seront automatiquement listees puis mises a zero. La sortie exacte depend des autres options specifiees. Les regles exactes sont supprimees a moins que vous n'utilisiez iptables -L -v ou iptables-save(8). -S, --list-rules [chaine] Afficher toutes les regles de la chaine indiquee. Si aucune chaine n'est indiquee, toutes les chaines sont affichees comme avec iptables-save. Cette commande, comme toutes les autres commandes d'iptables, s'applique a la table indiquee (la table par defaut est filter). -F, --flush [chaine] Vider la chaine indiquee (ou toutes les chaines de la table si aucune chaine n'est indiquee). Cette option produit le meme effet qu'un effacement de toutes les regles une par une. -Z, --zero [chaine [numero_de_regle]] Remettre a zero les compteurs de paquets et d'octets de toutes les chaines, ou seulement de la chaine indiquee, ou seulement de la regle indiquee dans une chaine donnee. On peut aussi ajouter l'option -L, --list (list) pour voir les compteurs juste avant leur reinitialisation (voir plus haut). -N, --new-chain chaine Creer une nouvelle chaine definie par l'utilisateur avec le nom donne. Il ne doit pas exister de cible avec le meme nom. -X, --delete-chain [chaine] Supprimer la chaine indiquee. Il ne doit pas exister de references a cette chaine. S'il en existe, vous devez supprimer ou remplacer les regles contenant ces references pour que la chaine puisse etre supprimee. La chaine doit etre vide, autrement dit ne contenir aucune regle. Si aucune chaine n'est indiquee, cette option va supprimer toutes les chaines vides de la table. Les chaines predefinies vides ne peuvent etre supprimees qu'a l'aide de iptables-nft. -P, --policy chaine cible Definir l'action par defaut de la chaine predefinie (non definie par l'utilisateur) avec la cible donnee. La cible de l'action par defaut est soit ACCEPT, soit DROP. -E, --rename-chain ancienne_chaine nouvelle_chaine Renommer la chaine specifiee avec le nouveau nom donne. Cette action est cosmetique et n'a aucun effet sur la structure de la table. -h Afficher l'aide. Donner une description (actuellement tres breve) de la syntaxe de la commande. PARAMETRES Les parametres suivants completent l'enonce d'une regle (lorsqu'ils sont utilises dans une des commandes add, delete, insert, replace et append). -4, --ipv4 Ce parametre n'a aucun effet avec iptables et iptables-restore. Si une regle utilisant le parametre -4 est inseree a l'aide de (et seulement de) ip6tables-restore, elle sera ignoree silencieusement. Toutes les autres utilisations provoqueront une erreur. Ce parametre permet d'inscrire des regles IPv4 et IPv6 dans un seul fichier de regles a utiliser avec iptables-restore et ip6tables-restore. -6, --ipv6 Si une regle utilisant le parametre -6 est inseree a l'aide de (et seulement de) iptables-restore, elle sera ignoree silencieusement. Toutes les autres utilisations provoqueront une erreur. Ce parametre permet d'inscrire des regles IPv4 et IPv6 dans un seul fichier de regles a utiliser avec iptables-restore et ip6tables-restore. Ce parametre n'a aucun effet avec ip6tables et ip6tables-restore. [!] -p, --protocol protocole Le protocole de la regle ou du paquet a verifier. Le protocole specifie peut etre tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh, ou le mot-cle special << all >>, ou une valeur numerique representant un des protocoles precites ou un protocole different. Un nom de protocole issu de /etc/protocols est aussi autorise. Un argument << ! >> avant le protocole inverse le test. Le nombre zero est equivalent a all. << all >> correspond a tous les protocoles et c'est la valeur du parametre par defaut si ce dernier est omis. Notez que dans ip6tables, a l'exception de esp, les en-tetes d'extensions IPv6 ne sont pas autorises. esp et ipv6-nonext peuvent etre utilises a partir de la version 2.6.11 du noyau. Le nombre zero est equivalent a all, ce qui implique que vous ne pouvez pas tester le champ protocole pour la valeur 0 directement. Pour rechercher une correspondance avec un en-tete HBH, meme s'il s'agissait du dernier, vous ne pouvez pas utiliser -p 0 ; vous devrez toujours utiliser -m hbh. [!] -s, --source adresse[/masque][,...] Specifier la source. Address peut etre un nom de reseau, un nom d'hote, une adresse reseau IP (avec /mask) ou une adresse IP complete. Les noms d'hotes ne seront resolus qu'une seule fois avant que la regle ne soit soumise au noyau. Notez que specifier un nom devant etre resolu a distance, par exemple par DNS, est vraiment une mauvaise idee. mask peut etre soit un masque reseau ipv4 (pour iptables), soit un nombre indiquant le nombre de bits a 1 en partant de la gauche du masque reseau. Ainsi, un masque iptables de 24 est equivalent a 255.255.255.0. Un argument << ! >> avant la specification de l'adresse inverse les criteres de selection de cette adresse. --src est un alias pour ce parametre. On peut specifier plusieurs adresses, mais cela entrainera la creation de plusieurs regles (lors d'un ajout avec -A) ou la suppression de plusieurs regles (avec -D). [!] -d, --destination adresse[/masque][,...] Specifier la destination. Voir la description du parametre -s (source) pour une description detaillee de la syntaxe. --dst est un alias pour ce parametre. -m, --match correspondance Specifier une correspondance a utiliser, c'est-a-dire un module d'extension qui verifie une propriete specifique. L'ensemble de correspondances constitue la condition a laquelle une cible sera invoquee. Les correspondances sont evaluees de la premiere a la derniere selon leurs specifications dans la ligne de commande et travaillent en mode court-circuit ; c'est-a-dire que si l'une d'entre elles a pour resultat << faux >>, l'evaluation s'arrete. -j, --jump cible Specifier la cible de la regle ; c'est-a-dire quoi faire si le paquet correspond aux criteres de selection. La cible peut etre une chaine definie par l'utilisateur (differente de celle dans laquelle se trouve la regle), une des cibles predefinies speciales qui decident du sort du paquet immediatement ou une extension (voir plus loin EXTENSIONS DE CORRESPONDANCE ET DE CIBLE). Si ce parametre est omis pour une regle (et si -g n'est pas utilise), la recherche de correspondance de la regle au paquet n'aura aucun effet sur le sort de ce dernier, mais les compteurs de la regle seront incrementes. -g, --goto chaine Specifier que le traitement doit continuer dans la chaine donnee. Contrairement a l'utilisation de l'option --jump, RETURN ne poursuivra pas le traitement dans cette chaine, mais plutot dans la chaine qui nous a appele a l'aide de --jump. [!] -i, --in-interface nom Le nom de l'interface sur laquelle le paquet a ete recu (seulement pour les paquets qui entrent dans les chaines INPUT, FORWARD ou PREROUTING). Si l'argument << ! >> precede le nom de l'interface, le critere de selection sera inverse. Si le nom de l'interface se termine par un << + >>, toute interface qui commence par ce nom correspondra. Si ce parametre est omis, toute interface correspondra. [!] -o, --out-interface nom Le nom de l'interface par laquelle le paquet est sur le point d'etre envoye (seulement pour les paquets entrant dans les chaines FORWARD, OUTPUT ou POSTROUTING). Si l'argument << ! >> precede le nom de l'interface, le critere de selection sera inverse. Si le nom de l'interface se termine par un << + >>, toute interface qui commence par ce nom correspondra. Si ce parametre est omis, toute interface correspondra. [!] -f, --fragment Specifier ce parametre signifie que la regle ne fait reference qu'au second fragment IPv4 et les suivants des paquets fragmentes. Comme il n'y a aucun moyen de determiner les ports source ou destination d'un tel paquet (ou le type ICMP), ce paquet ne correspondra a aucune regle qui specifie des ports. Si l'argument << ! >> precede le symbole << -f >>, la regle ne recherchera de correspondance qu'avec les fragments d'en-tete ou les paquets non fragmentes. Ce parametre est specifique a IPv4 et n'est pas disponible dans ip6tables. -c, --set-counters paquets octets Ce parametre permet a l'administrateur d'initialiser les compteurs de paquets et d'octets d'une regle (au cours des operations INSERT, APPEND et REPLACE). AUTRES OPTIONS Les options supplementaires suivantes peuvent etre specifiees : -v, --verbose Affichage detaille. Avec cette option, la commande list affiche le nom de l'interface, les options des regles (s'il y en a) et les masques TOS (Type Of Service). Les compteurs de paquets et d'octets sont aussi affiches avec le suffixe << K >>, << M >> ou << G >> pour les multiplicateurs 1 000, 1 000 000 et 1 000 000 000, respectivement (voir cependant le drapeau -x pour modifier cela). Dans le cas d'un ajout, d'une insertion, d'une suppression ou d'un remplacement, cette option provoque l'affichage d'informations detaillees a propos de la ou les regle(s). -v peut aussi etre specifiee plusieurs fois pour eventuellement afficher des instructions de debogage plus detaillees : si elle est specifiee deux fois, iptables-legacy affichera les informations et les entrees de la table dans le style libiptc, et iptables-nft affichera les regles dans le style netlink (code VM) ; si elle est specifiee trois fois, iptables-nft affichera aussi tout message netlink envoye au noyau. -V, --version Afficher la version du programme et l'API du noyau utilisee. -w, --wait [secondes] Attendre le verrouillage de xtables. Pour prevenir l'execution simultanee de plusieurs instances du programme, ce dernier va tenter d'obtenir un verrouillage exclusif a son lancement. Par defaut, le programme s'arretera s'il ne peut pas obtenir le verrouillage. Avec cette option, le programme attendra (indefiniment ou pendant une duree definie par l'argument facultatif secondes) jusqu'a ce qu'il obtienne le verrouillage exclusif. -n, --numeric Afficher les informations sous forme numerique. Les adresses IP et les numeros de port seront affiches au format numerique. Par defaut, le programme tente de les afficher sous la forme de nom d'hote, de nom de reseau ou de service (lorsque c'est possible). -x, --exact Afficher les nombres sous forme etendue. Afficher la valeur exacte des compteurs de paquets et d'octets au lieu de leur valeur arrondie au Ko (multiple de 1000), au Mo (multiple de 1000K) ou au Go (multiple de 1000M). Cette option n'est pertinente que pour la commande -L. --line-numbers Lors de l'affichage des regles, ajouter, au debut de chacune d'entre elles, les numeros de ligne qui correspondent a la position de la regle dans la chaine. --modprobe=commande Lors de l'ajout ou de l'insertion de regles dans une chaine, utiliser commande pour charger tout module necessaire (cibles, extensions de correspondance, etc.). FICHIER VERROU iptables utilise le fichier /run/xtables.lock pour obtenir un verrouillage exclusif a son lancement. On peut utiliser la variable d'environnement XTABLES_LOCKFILE pour modifier le comportement par defaut. EXTENSIONS DE CORRESPONDANCE ET DE CIBLE iptables peut utiliser des versions etendues des recherches de correspondance de paquets et des modules de cibles. Une liste de ces extensions est disponible dans la page de manuel iptables-extensions(8). DIAGNOSTICS Differents messages d'erreur peuvent s'afficher sur la sortie d'erreur standard. Le code de retour de 0 indique un fonctionnement correct. Les erreurs qui semblent etre causees par des parametres de la ligne de commande non valables ou non pertinents generent un code de retour de 2. Les erreurs qui indiquent une incompatibilite entre le noyau et l'espace utilisateur generent un code de retour de 3. Les erreurs qui indiquent un probleme de ressource, comme un verrou occupe, un echec d'allocation de memoire ou des messages d'erreur du noyau generent un code de retour de 4. Enfin, les autres erreurs generent un code de retour de 1. BOGUES Des bogues ? Qu'est-ce que c'est ? ;-) Ok, vous devriez jeter un coup d'oeil a https://bugzilla.netfilter.org/. iptables s'arretera avec un code d'erreur de 111 s'il voit qu'il a ete appele en tant que programme setuid-to-root. iptables ne peut pas etre utilise en toute securite de cette maniere, car il fait confiance aux bibliotheques partagees (correspondances, cibles) chargees a l'execution ; le chemin de recherche peut etre defini en utilisant des variables d'environnement. COMPATIBILITE AVEC IPCHAINS iptables est tres similaire a ipchains de Rusty Russell. La principale difference reside dans le fait que les chaines INPUT et OUTPUT ne sont parcourues que par les paquets entrant dans l'hote local et generes par l'hote local, respectivement. Ainsi, tout paquet ne parcourt qu'une des trois chaines (sauf pour le trafic loopback qui implique les deux chaines INPUT et OUTPUT) ; auparavant, un paquet transfere passait par les trois chaines. Une autre difference importante reside dans le fait que -i fait reference a l'interface d'entree, que -o fait reference a l'interface de sortie et que les deux sont valables pour les paquets qui entrent dans la chaine FORWARD. Les differentes formes de NAT ont ete separees ; iptables est un pur filtre de paquets lorsqu'il utilise la table par defaut << filter >> avec des modules d'extension optionnels. Cela devrait eviter l'essentiel de la confusion sur la combinaison du camouflage d'IP (masquerading) et du filtrage de paquets vue auparavant. Les options suivantes sont donc maintenant gerees differemment : -j MASQ -M -S -M -L Il y a plusieurs autres changements dans iptables. VOIR AUSSI iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8), Le packet-filtering-HOWTO detaille l'utilisation d'iptables pour le filtrage de paquets, le NAT-HOWTO detaille le NAT, le netfilter-extensions-HOWTO detaille les extensions qui ne font pas partie de la distribution standard et le netfilter-hacking-HOWTO detaille le fonctionnement interne de netfilter. Voir https://www.netfilter.org/. AUTEURS Rusty Russell est a l'origine de l'ecriture d'iptables en consultation prealable avec Michael Neuling. Marc Boucher a pousse Rusty a abandonner ipnatctl en mettant en avant un cadriciel de selection de paquets generique dans iptables ; puis il a ecrit la table mangle, la correspondance basee sur le proprietaire, le dispositif de marquage et s'est investi ca et la en developpant des trucs sympas dans tous les domaines. James Morris a ecrit la cible TOS et la correspondance basee sur tos. Jozsef Kadlecsik a ecrit la cible REJECT. Harald Welte a ecrit les cibles ULOG et NFQUEUE, la nouvelle bibliotheque libiptc, ainsi que les correspondances et cibles TTL, DSCP et ECN. L'Equipe Centrale Netfilter se compose de : Jozsef Kadlecsik, Pablo Neira Ayuso, Eric Leblond, Florian Westphal et Arturo Borrero Gonzalez. Les membres emerites de l'Equipe Centrale sont : Marc Boucher, Martin Josefsson, Yasuyuki Kozakai, James Morris, Harald Welte et Rusty Russell. Page de manuel initialement ecrite par Herve Eychenne . VERSION Cette page de manuel s'applique a iptables/ip6tables 1.8.10. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Donnier, Guillaume Audirac et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . iptables 1.8.10 IPTABLES(8)