iptables-extensions(8) iptables 1.8.10 iptables-extensions(8) NOM iptables-extensions -- Liste des extensions dans la distribution standard d'iptables SYNOPSIS ip6tables [-m nom [options_module...]] [-j nom_action [options_action...] iptables [-m nom [options_module...]] [-j nom_action [options_action...] EXTENSIONS DE COMPARAISON iptables peut utiliser des modules de comparaison etendue de paquets a l'aide des options -m ou --match suivies du nom du module de comparaison ; differentes options de ligne de commande complementaires sont alors disponibles en fonction du module specifique. Vous pouvez specifier plusieurs modules de comparaison etendue sur une seule ligne, et vous pouvez utiliser l'options -h ou --help, une fois le module specifie, afin d'obtenir une aide specifique a ce dernier. Les modules de comparaison etendue sont pris en compte dans l'ordre selon lequel ils sont specifies dans la regle. Si l'option -p ou --protocol a ete specifiee et si et seulement si une option inconnue est rencontree, iptables va essayer de charger un module de comparaison de meme nom que celui du protocole pour tenter de rendre l'option disponible. addrtype Ce module verifie la correspondance des paquets en fonction de leur type d'adresse. Les types d'adresse sont utilises dans la pile reseau du noyau et classent les adresses en plusieurs groupes. La definition exacte de ces groupes depend du protocole specifique de couche trois. Les types d'adresse valables sont les suivants : UNSPEC une adresse non specifiee (par exemple 0.0.0.0) UNICAST une adresse unicast (connexion point-a-point) LOCAL une adresse locale BROADCAST une adresse de broadcast (diffusion generale) ANYCAST un paquet anycast (une adresse pour plusieurs destinataires) MULTICAST une adresse multicast (diffusion vers un groupe de destinataires) BLACKHOLE une adresse blackhole (trou noir) UNREACHABLE une adresse inaccessible PROHIBIT une adresse interdite THROW FIXME NAT FIXME XRESOLVE [!] --src-type type Verifier si l'adresse source est du type donne [!] --dst-type type Verifier si l'adresse de destination est du type donne --limit-iface-in La verification du type d'adresse peut etre limitee a l'interface par laquelle entre le paquet. Cette option n'est valable que dans les chaines PREROUTING, INPUT et FORWARD. Elle ne peut pas etre specifiee en combinaison avec l'option --limit-iface-out. --limit-iface-out La verification du type d'adresse peut etre limitee a l'interface par laquelle sort le paquet. Cette option n'est valable que dans les chaines POSTROUTING, OUTPUT et FORWARD. Elle ne peut pas etre specifiee en combinaison avec l'option --limit-iface-in. ah (specifique a IPv6) Ce module verifie la correspondance des parametres dans l'en-tete Authentication des paquets IPsec. [!] --ahspi spi[:spi] Verifier la correspondance des SPI (Security Parameters Index -- Index des Parametres de Securite). [!] --ahlen taille Taille totale de cet en-tete en octets. --ahres Correspondance si le champ reserve est rempli avec des zeros. ah (specifique a IPv4) Ce module verifie la correspondance des SPI (Security Parameters Index -- Index des Parametres de Securite) dans l'en-tete Authentication des paquets IPsec. [!] --ahspi spi[:spi] bpf Verifier les correspondances en utilisant un filtre de socket Linux. Prend comme parametre le chemin d'un objet eBPF (Extended Berkeley Packet Filter) ou d'un programme cBPF (Classic Berkeley Packet Filter) au format decimal. --object-pinned chemin Specifier le chemin vers un objet eBPF epingle. Les applications chargent les programmes eBPF dans le noyau a l'aide de l'appel systeme bpf() et de la commande BPF_PROG_LOAD, et peuvent les epingler (referencer) dans un systeme de fichiers virtuel a l'aide de BPF_OBJ_PIN. Pour utiliser un objet epingle dans iptables, montez le systeme de fichiers bpf en utilisant mount -t bpf bpf ${BPF_MOUNT} puis inserez le filtre dans iptables avec son chemin : iptables -A OUTPUT -m bpf --object-pinned ${BPF_MOUNT}/{PINNED_PATH} -j ACCEPT --bytecode code Passer le format de bytecode (code intermediaire) BPF tel que genere par l'utilitaire nfbpf_compile. Le format de code est similaire a la sortie de la commande << tcpdump -ddd >> : une ligne qui indique le nombre d'instructions suivie d'une ligne pour chaque instruction. Les lignes d'instruction respectent le motif << u16 u8 u8 u32 >> en notation decimale. Les champs codent l'operation, le decalage de saut si vrai, le decalage de saut si faux et le champ multi-usage generique << K >>. Les commentaires ne sont pas pris en charge. Par exemple, pour ne lire que les paquets correspondant a << ip proto 6 >>, inserez ce qui suit, sans commentaires, ni blancs a la fin : 4 # nombre d'instructions 48 0 0 9 # charger le bytecode ip->proto 21 0 1 6 # saut egal a IPPROTO_TCP 6 0 0 1 # renvoyer reussite (different de zero) 6 0 0 0 # renvoyer echec (zero) Vous pouvez transmettre ce filtre a la verification de correspondance bpf a l'aide de la commande suivante : iptables -A OUTPUT -m bpf --bytecode '4,48 0 0 9,21 0 1 6,6 0 0 1,6 0 0 0' -j ACCEPT A la place, vous pouvez invoquer l'utilitaire nfbpf_compile. iptables -A OUTPUT -m bpf --bytecode "`nfbpf_compile RAW 'ip proto 6'`" -j ACCEPT Ou alors, utilisez tcpdump -ddd. Dans ce cas, generez un BPF ciblant un dispositif avec le meme type de liaison de donnees que la correspondance de xtables. iptables transmet les paquets de la couche reseau a la couche superieure, sans couche MAC. Selectionner un dispositif ayant pour type de liaison de donnees RAW, comme un dispositif << tun >> : ip tuntap add tun0 mode tun ip link set tun0 up tcpdump -ddd -i tun0 ip proto 6 Utilisez la commande << tcpdump -L -i $dev >> pour obtenir la liste des types de liaison de donnees connus pour un dispositif donne. Pour en apprendre davantage a propos de BPF, lisez la page de manuel bpf(4) de FreeBSD. cgroup [!] --path chemin Verifier la correspondance de l'appartenance a cgroup2. Chaque socket est associe au cgroup version 2 des processus de creation. Les paquets qui correspondent viennent de (ou vont vers) tous les sockets de la sous-hierarchie du chemin specifie. Le chemin doit etre relatif a la racine de la hierarchie cgroup2. [!] --cgroup identifiant_classe Verifier la correspondance a l'identifiant de classe net_cls de cgroup. L'identifiant de classe est le marqueur defini a l'aide du controleur net_cls de cgroup. Cette option ne peut pas etre utilisee en combinaison avec l'option --path. Exemple : iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --path service/serveur_HTTP -j DROP iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --cgroup 1 -j DROP IMPORTANT : lorsqu'il est utilise dans la chaine INPUT, le verificateur de correspondance cgroup n'est pas actuellement d'une grande utilite, car il ne verifie que la correspondance des paquets qui sont traites pour les sockets locaux a l'aide d'un demultiplexage de socket precoce. C'est pourquoi son utilisation dans la chaine INPUT n'est pas recommandee, sauf si ses implications sont bien comprises. Disponible a partir de Linux 3.14. cluster Ce module permet de deployer des grappes de passerelles et de dorsaux a partage de charge sans avoir besoin de repartiteurs de charge. Cette recherche de correspondance necessite que tous les noeuds voient les memes paquets. La correspondance << cluster >> pourra alors decider si ce noeud doit gerer un paquet en fonction des options suivantes : --cluster-total-nodes nombre Definir le nombre total de noeuds dans la grappe. [!] --cluster-local-node numero Definir l'identifiant du numero de noeud local. [!] --cluster-local-nodemask masque Definir le masque de l'identifiant du numero de noeud local. Vous pouvez utiliser cette option a la place de --cluster-local-node. --cluster-hash-seed valeur Definir la valeur de germe du hachage de Jenkins. Exemple : iptables -A PREROUTING -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP Et les commandes suivantes pour faire que tous les noeuds voient les memes paquets : ip maddr add 01:00:5e:00:01:01 dev eth1 ip maddr add 01:00:5e:00:01:02 dev eth2 arptables -A OUTPUT -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01 arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27 arptables -A OUTPUT -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02 arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27 NOTE : les commandes arptables ci-avant utilisent la syntaxe courante. Si vous utilisez arptables-jf fournie avec certaines versions de RedHat, CentOS et Fedora, vous ferez face a des erreurs de syntaxe. Dans ce cas, vous devrez adapter ces exemples a la syntaxe d'arptables-jf pour qu'ils puissent fonctionner. Dans le cas des connexions TCP, la fonctionnalite pickup doit etre desactivee pour eviter de marquer les paquets TCP ACK entrant dans le sens de la reponse comme valables. echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose comment Cette extension permet d'ajouter des commentaires (jusqu'a 256 caracteres) a toute regle. --comment commentaire Exemple : iptables -A INPUT -i eth1 -m comment --comment "mon reseau local" connbytes Verifier la correspondance en fonction du nombre d'octets ou de paquets qu'une connexion (ou un des deux flux constituant la connexion) a deja transmis, ou en fonction du nombre moyen d'octets par paquet. Les compteurs sont sur 64 bits et ne risquent donc pas de deborder ;) La principale utilisation consiste a detecter les telechargements de longue duree et a les marquer pour etre programmes avec une priorite inferieure dans le controle de trafic. Le nombre d'octets transferes par connexion peut etre visualise a l'aide de << conntrack -L >> et accede a l'aide de ctnetlink. Notez que pour les connexions qui ne possedent pas d'informations de comptage, la verification de correspondance renverra toujours faux. Le drapeau de sysctl << net.netfilter.nf_conntrack_acct >> definit si les nouvelles connexions feront l'objet d'un comptage d'octets et de paquets. Les flux des connexions existantes ne gagneront/perdront pas une/leur structure de comptage apres une bascule du drapeau de sysctl. [!] --connbytes mini[:maxi] Verifier la correspondance des paquets issus d'une connexion dont le nombre de paquets ou d'octets transmis, ou la taille moyenne des paquets est superieure a mini et inferieure a maxi octets. Si maxi est omis, seule la superiorite de la valeur a mini est verifiee. << ! >> permet de verifier la correspondance des paquets qui ne correspondent pas a l'intervalle specifie. --connbytes-dir {original|reply|both} Paquets a prendre en compte --connbytes-mode {packets|bytes|avgpkt} Cette option permet de definir s'il faut verifier le nombre de paquets ou d'octets transmis, ou la taille moyenne (en octets) de tous les paquets deja recus. Notez que lorsque << both << est utilise en combinaison avec << avgpkt >>, et si les donnees transitent principalement dans une seule direction (comme par exemple avec HTTP), la taille moyenne des paquets sera a peu pres egale a la moitie de celle des paquets de donnees proprement dits. Exemple : iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ... connlabel Ce module fait correspondre ou ajoute des connlabels (etiquettes de connexion) a une connexion. Les connlabels sont similaires aux connmarks, sauf que les etiquettes sont basees sur des bits ; c'est-a-dire que toutes les etiquettes peuvent etre attachees a un flux en meme temps. Ce module prend actuellement en charge jusqu'a 128 etiquettes uniques. [!] --label nom Correspondance si l'etiquette nom a ete definie pour la connexion. On peut utiliser un nombre a la place d'un nom (lequel sera converti en nombre, voir EXEMPLE ci-apres). Utiliser un nombre outrepasse toujours le fichier connlabel.conf. --set Definir une etiquette pour une connexion si elle ne l'est pas deja. Noter que definir une etiquette peut echouer, car le noyau alloue la zone de stockage de l'etiquette conntrack a la creation de la connexion, et il ne reserve que la quantite de memoire requise par le jeu de regles existant a la creation de la connexion. Dans ce cas, la correspondance echouera (ou reussira en cas de negation de l'option --label). Cette verification de correspondance requiert libnetfilter_conntrack version 1.0.4 ou ulterieure. La traduction d'etiquette est effectuee a l'aide du fichier de configuration /etc/xtables/connlabel.conf. Exemple : 0 eth0-in 1 eth0-out 2 ppp-in 3 ppp-out 4 bulk-traffic 5 interactive connlimit Ce module vous permet de limiter le nombre de connexions simultanees a un serveur par adresse IP client (ou bloc d'adresses client). --connlimit-upto n Correspondance si le nombre de connexions existantes est inferieur ou egal a n. --connlimit-above n Correspondance si le nombre de connexions existantes est strictement superieur a n. --connlimit-mask taille_prefixe Regrouper les hotes en fonction de la taille du prefixe. Pour IPv4, cette taille doit etre un nombre entre 0 et 32 inclus (ou entre 0 et 128 pour IPv6). Par defaut, c'est la taille maximale de prefixe pour le protocole applicable qui sera utilisee. --connlimit-saddr Appliquer la limite au groupe source. Il s'agit du comportement par defaut si --connlimit-daddr n'est pas specifiee. --connlimit-daddr Appliquer la limite au groupe destination. Exemples : # permettre 2 connexions telnet par hote client : iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT # vous pouvez aussi utiliser l'option inverse : iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT # limiter le nombre de requetes HTTP simultanees a 16 par reseau source de classe C (masque reseau de 24 bits) : iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT # limiter le nombre de requetes HTTP simultanees a 16 pour le reseau de liaison locale (link local) : (ipv6) ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT # limiter le nombre de connexions vers un hote particulier : ip6tables -p tcp --syn --dport 49152:65535 -d 2001:db8::1 -m connlimit --connlimit-above 100 -j REJECT connmark Ce module recherche une correspondance du champ << mark >> de netfilter associe a une connexion (et qui peut etre defini a l'aide de l'action CONNMARK ci-apres). [!] --mark valeur[/masque] Verifier la correspondance des paquets dans les connexions possedant la valeur de << mark >> donnee (si un masque est specifie, il est combine a l'aide d'un ET logique avec la valeur de << mark >> avant la comparaison). conntrack Ce module, lorsque combine avec le tracage de connexion, permet d'acceder a l'etat du tracage de connexion pour ce paquet ou cette connexion. [!] --ctstate liste_etats liste_etats est une liste, separee par des virgules, des etats de connexion a comparer. Les etats possibles sont enumeres ci-apres. [!] --ctproto l4proto Protocol de la couche 4 a comparer (sous forme de numero ou de nom). [!] --ctorigsrc adresse[/masque] [!] --ctorigdst adresse[/masque] [!] --ctreplsrc adresse[/masque] [!] --ctrepldst adresse[/masque] Comparaison avec l'adresse originelle/reponse source/destination. [!] --ctorigsrcport port[:port] [!] --ctorigdstport port[:port] [!] --ctreplsrcport port[:port] [!] --ctrepldstport port[:port] Comparaison avec le port originel/reponse source/destination (TCP/UDP/etc.) ou la cle GRE. La comparaison avec des plages de port n'est prise en charge que pour les versions du noyau superieures a 2.6.38. [!] --ctstatus liste_etats statuslist est une liste, separee par des virgules, des etats de connexion a comparer. Les etats possibles sont enumeres ci-apres. [!] --ctexpire duree[:duree] Comparaison entre la duree de vie restante en secondes et la valeur ou l'intervalle de valeurs (incluses) donne. --ctdir {ORIGINAL|REPLY} Verifier la correspondance des paquets qui cheminent dans la direction specifiee. Si ce drapeau n'est pas specifie, les paquets qui cheminent dans les deux directions correspondent. Etats pour --ctstate : INVALID Le paquet n'est associe a aucune connexion connue. NEW Le paquet a initie une nouvelle connexion ou est associe a une connexion qui n'a pas vu de paquets dans les deux directions. ESTABLISHED Le paquet est associe a une connexion qui a vu des paquets dans les deux directions. RELATED Le paquet initie une nouvelle connexion mais est deja associe a une connexion existante, telle qu'un transfert de donnees FTP ou une erreur ICMP. UNTRACKED Le paquet n'est pas trace, ce qui se produit si vous indiquez explicitement de ne pas le tracer en utilisant << -j CT --notrack >> dans la table << raw >>. SNAT Un etat virtuel qui correspond si l'adresse source originelle differe de l'adresse destination de reponse. DNAT Un etat virtuel qui correspond si l'adresse destination originelle differe de l'adresse source de reponse. Etats pour --ctstatus : NONE Aucun des etats ci-apres. EXPECTED Il s'agit d'une connexion attendue (c'est-a-dire qu'un assistant de conntrack l'a etablie). SEEN_REPLY Conntrack a vu des paquets dans les deux directions. ASSURED L'entree de conntrack ne doit jamais etre perimee prematurement. CONFIRMED La connexion est confirmee : le paquet qui en est a l'origine a quitte la boite. cpu [!] --cpu numero Verifier le numero de CPU (central processing unit -- processeur) qui traite ce paquet. Les CPU sont numerotes de 0 a nombre_CPU - 1. Peut etre utilise en combinaison avec RPS (Remote Packet Steering -- Pilotage de paquets a distance) ou les cartes reseau a files d'attente multiples (multiqueue NIC) pour repartir le trafic reseau sur differentes files d'attente. Exemple : iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-ports 8080 iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-ports 8081 Disponible depuis Linux 2.6.36. dccp [!] --source-port,--sport port[:port] [!] --destination-port,--dport port[:port] [!] --dccp-types masque Correspondance si le type de paquet DCCP (Datagram Congestion Control Protocol -- Protocole de Controle de Congestion des Datagrammes) fait partie de masque. masque est une liste de types de paquet separes par des virgules. Les types de paquets sont : REQUEST, RESPONSE, DATA, ACK, DATAACK, CLOSEREQ, CLOSE, RESET, SYNC, SYNCACK et INVALID. [!] --dccp-option nombre Correspondance si l'option DCCP est definie. devgroup Verifier la correspondance du groupe de dispositifs de l'interface d'un paquet entrant/sortant. [!] --src-group nom Verifier la correspondance du groupe de dispositifs du dispositif entrant. [!] --dst-group nom Verifier la correspondance du groupe de dispositifs du dispositif sortant. dscp Ce module verifie la correspondance du champ DSCP (Differentiated Services Code Point -- champ permettant de differencier les services) sur 6 bits a l'interieur du champ TOS (Type Of Service) de l'en-tete IP. DSCP a supplante TOS au sein de l'IETF (Internet Engineering Task Force). [!] --dscp valeur Verifier la correspondance avec une valeur decimale ou hexadecimale comprise entre 0 et 63. [!] --dscp-class classe Verifier la correspondance avec la classe DiffServ (Differentiated Services -- Services Differencies). Les classes valables sont BE, EF, AFxx ou CSx. Elles sont ensuite converties vers leurs valeurs numeriques respectives. dst (specifique a IPv6) Ce module verifie la correspondance des parametres de l'en-tete << Destination Options >>. [!] --dst-len taille Taille totale de cet en-tete en octets. --dst-opts type[:taille][,type[:taille]...] Type numerique de l'option et taille des donnees de l'option en octets. ecn Ce module permet de verifier la correspondance des bits ECN de l'en-tete IPv4/IPv6 et TCP. ECN (Explicit Congestion Notification) est le mecanisme de notification explicite de congestion decrit dans la RFC 3168. [!] --ecn-tcp-cwr Correspond si le bit TCP ECN CWR (Congestion Window Received -- fenetre de congestion recue) est positionne. [!] --ecn-tcp-ece Correspond si le bit TCP ECN ECE (ECN Echo -- paquet recu avec le bit CE positionne) est positionne. [!] --ecn-ip-ect nombre Verifie la correspondance d'un point de code IPv4/IPv6 ECT (ECN-Capable Transport) particulier. Vous devez specifier un nombre entre 0 et 3. esp Ce module verifie la correspondance des SPI (Security Parameters Index -- index des parametres de securite) de l'en-tete ESP (Encapsulation Security Payload -- encapsulation securisee de charge utile) des paquets IPsec. [!] --espspi spi[:spi] eui64 (Extended Unique Identifier -- identifiant unique etendu) ; specifique a IPv6. Ce module verifie la correspondance de la partie EUI-64 d'une adresse IPv6 autoconfiguree sans conservation d'etat (stateless). Il compare cette partie EUI-64 derivee de l'adresse MAC source dans la trame Ethernet avec les 64 bits les moins significatifs de l'adresse IPv6 source. Le bit << Universal/Local >> n'est cependant pas compare. Ce module ne verifie pas la correspondance d'autres trames de la couche liaison et n'est valable que dans les chaines PREROUTING, INPUT et FORWARD. frag (specifique a IPv6) Ce module verifie la correspondance des parametres de l'en-tete Fragment. [!] --fragid id[:id] Verifie la correspondance de l'identifiant ou de la plage d'identifiant donne. [!] --fraglen taille Cette option ne peut pas etre utilisee avec un noyau de version 2.6.10 ou ulterieure. La taille de l'en-tete Fragment est statique et cette option n'est donc pas pertinente. --fragres Correspond si les champs reserves sont remplis de zeros. --fragfirst Verifier s'il s'agit du premier fragment. --fragmore Correspond s'il y a encore des fragments. --fraglast Correspond s'il s'agit du dernier fragment. hashlimit hashlimit utilise des compartiments de hachage (hash buckets) pour exprimer une correspondance de limitation de debit (comme la correspondance de limit) pour un groupe de connexions utilisant une seule regle iptables. Le groupement peut s'effectuer par groupe d'hotes (adresse source et/ou destination) et/ou par port. Ce module permet d'exprimer << N paquets par unite de temps et par groupe >> ou << N octets par seconde >> (voir les exemples ci-apres). Les options de limite de hachage (--hashlimit-upto, --hashlimit-above) et --hashlimit-name sont obligatoires. --hashlimit-upto quantite[/second|/minute|/hour|/day] Correspond si le debit est inferieur ou egal a quantite/unite de temps. Ce debit est specifie sous la forme d'un nombre avec un suffixe d'unite de temps facultatif (la valeur par defaut est 3/hour), ou sous la forme quantiteb/second (nombre d'octets par seconde). --hashlimit-above quantite[/second|/minute|/hour|/day] Correspond si le debit est superieur a quantite/unite de temps. --hashlimit-burst quantite Nombre initial maximal de paquets a comparer : ce nombre est incremente de 1 tant que la limite specifiee ci-avant n'est pas atteinte, et ce jusqu'a ce que cette limite soit atteinte ; la valeur par defaut est 5. Lorsqu'une verification de correspondance de debit en octets est demandee, cette option specifie la quantite d'octets dont le debit donne peut exceder. Cette option doit etre utilisee avec precaution -- si l'entree arrive a expiration, cette valeur est aussi reinitialisee. --hashlimit-mode {srcip|srcport|dstip|dstport},... Une liste, separee par des virgules, d'objets a prendre en consideration. Si aucune option --hashlimit-mode n'est specifiee, hashlimit agit comme limit, au prix de devoir faire le menage du hachage. --hashlimit-srcmask prefixe Lorsque << --hashlimit-mode srcip >> est specifie, toutes les adresses source rencontrees seront regroupees en fonction de la taille du prefixe donne, et le sous-reseau ainsi cree sera soumis a hashlimit. prefixe doit etre entre 0 et 32 inclus. Notez que << --hashlimit-srcmask 0 >> produit le meme effet que ne pas specifier srcip pour --hashlimit-mode, mais consomme plus de ressources. --hashlimit-dstmask prefixe Comme --hashlimit-srcmask, mais pour les adresses destination. --hashlimit-name nom_limite Le nom pour l'entree /proc/net/ipt_hashlimit/nom_limite --hashlimit-htable-size compartiments Le nombre de compartiments dans la table de hachages. --hashlimit-htable-max entrees Le nombre maximal d'entrees dans le hachage. --hashlimit-htable-expire msec Delai d'expiration des entrees du hachage en millisecondes. --hashlimit-htable-gcinterval msec Nombre de millisecondes entre chaque ramassage des dechets. --hashlimit-rate-match Categoriser le flux au lieu de limiter son debit. L'action de cette option consiste a evaluer a vrai ou faux le fait que le debit est au-dessus ou en-dessous d'une certaine valeur. --hashlimit-rate-interval sec Combinee avec --hashlimit-rate-match, cette option permet de specifier le pas selon lequel le debit doit etre echantillonne. Exemples : correspondance au niveau de l'hote source << 1000 paquets par seconde pour chaque hote de 192.168.0.0/16 >> => -s 192.168.0.0/16 --hashlimit-mode srcip --hashlimit-upto 1000/sec correspondance au niveau du port << 100 paquets par seconde pour chaque service de 192.168.1.1 >> => -s 192.168.1.1 --hashlimit-mode srcport --hashlimit-upto 100/sec correspondance au niveau du sous-reseau << 10000 paquets par minute pour chaque sous-reseau /28 (groupes de 8 adresses) de 10.0.0.0/8 >> => -s 10.0.0.0/8 --hashlimit-mask 28 --hashlimit-upto 10000/min correspondance au niveau du debit en octets par seconde << debits excedant 512 ko/s >> => --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s correspondance au niveau du debit en octets par seconde << debits excedant512 ko/s, mais permission d'aller jusqu'a 1 Mo sans recherche de correspondance >> => --hashlimit-mode dstip --hashlimit-above 512kb/s --hashlimit-burst 1mb hbh (specifique a IPv6) Ce module verifie la correspondance des parametres de l'en-tete des options Hop-by-Hop. [!] --hbh-len taille Taille totale de cet en-tete en octets. --hbh-opts type[:taille][,type[:taille]...] Type numerique de l'option et taille des donnees de l'option en octets. helper Ce module verifie la correspondance des paquets en relation avec un assistant de conntrack (conntrack-helper) specifique. [!] --helper chaine Correspond aux paquets en relation avec l'assistant de conntrack specifie. chaine peut contenir << ftp >> pour les paquets en relation avec une session ftp sur le port par defaut. Pour un port different, ajoutez << -num_port >> a la chaine (par exemple, << ftp-2121 >>). Les memes regles s'appliquent pour les autres assistants de conntrack. hl (specifique a IPv6) Ce module verifie la correspondance du champ Hop Limit de l'en-tete IPv6. [!] --hl-eq valeur Correspond si le champ Hop Limit contient la valeur specifiee. --hl-lt valeur Correspond si la valeur contenue dans le champ Hop Limit est inferieure a valeur. --hl-gt valeur Correspond si la valeur contenue dans le champ Hop Limit est superieure a valeur. icmp (specifique a IPv4) Cette extension peut etre utilisee si << --protocol icmp >> est specifie. Elle fournit l'option suivante : [!] --icmp-type {type[/code]|nom_type} Cette option permet de specifier le type ICMP sous la forme d'un type ICMP numerique, d'une paire type/code ou d'un des noms de type ICMP nom_type affiches par la commande iptables -p icmp -h icmp6 (specifique a IPv6) Cette extension peut etre utilisee si << --protocol ipv6-icmp >> ou << --protocol icmpv6 >> est specifie. Elle fournit l'option suivante : [!] --icmpv6-type type[/code]|nom_type Cette option permet de specifier le type ICMPv6 sous la forme d'un type ICMPv6 numerique, d'une paire type/code ou d'un des noms de type ICMPv6 nom_type affiches par la commande ip6tables -p ipv6-icmp -h iprange Ce module verifie la correspondance de la plage d'adresses IP arbitraire donne. [!] --src-range de[-a] Correspond si l'adresse IP source appartient a la plage specifie. [!] --dst-range de[-a] Correspond si l'adresse IP destination appartient a la plage specifie. ipv6header (specifique a IPv6) Ce module verifie la correspondance des en-tetes d'extension IPv6 et/ou l'en-tete de la couche superieure. --soft Correspond si le paquet contient au moins un des en-tetes specifies a l'aide de l'option --header. [!] --header en-tete[,en-tete...] Correspond aux paquets qui contiennent EXACTEMENT tous les en-tetes specifies. Les en-tetes encapsules avec l'en-tete ESP ne sont pas concernes. Les valeurs possibles d'en-tete sont : hop|hop-by-hop En-tete des options Hop-by-Hop dst En-tete des options de destination route En-tete de routage frag En-tete de fragment auth En-tete d'authentification esp En-tete d'encapsulation securisee de la charge utile none Pas d'en-tete Next, ce qui correspond a la valeur 59 dans le << champ Next Header >> de l'en-tete IPv6 ou de tout en-tete d'extension IPv6. prot Correspondance a n'importe quel en-tete de protocole de la couche superieure. Un nom de protocole issu du fichier /etc/protocols ou une valeur numerique sont aussi autorises. Le nombre 255 est equivalent a prot. ipvs Ce module verifie la correspondance des proprietes de la connexion IPVS. [!] --ipvs le paquet appartient a une connexion IPVS (IP Virtual Server -- serveur IP virtuel) Toutes les options suivantes impliquent --ipvs (meme si elles sont precedees d'une negation) [!] --vproto protocole protocole VIP (Virtual IP) a comparer ; par numero ou par nom, par exemple << tcp >> [!] --vaddr adresse[/masque] adresse VIP a comparer [!] --vport port port VIP a comparer ; par numero ou par nom, par exemple << http >> --vdir {ORIGINAL|REPLY} sens de deplacement du paquet [!] --vmethod {GATE|IPIP|MASQ} methode de redirection IPVS utilisee [!] --vportctl port port VIP de la connexion de controle a comparer, par exemple 21 pour FTP length Ce module permet de comparer la taille de la charge utile de la couche 3 d'un paquet (par exemple, un paquet de niveau 4) avec une valeur ou un intervalle de valeurs donnes. [!] --length taille[:taille] limit Ce module verifie la correspondance d'un debit limite en utilisant un filtre de type << seau a jetons >> (token bucket). Une regle utilisant cette extension correspondra jusqu'a ce que cette limite soit atteinte. Ce module peut etre utilise en combinaison avec l'action LOG pour fournir une journalisation limitee, par exemple. xt_limit ne prend pas en charge la negation ; pour appliquer cette derniere, vous devrez utiliser << -m hashlimit ! --hashlimit debit >> tout en omettant --hashlimit-mode. --limit debit[/second|/minute|/hour|/day] Debit moyen maximal de comparaison : specifie sous forme de nombre avec un suffixe facultatif << /second >>, << /minute >>, << /hour >> ou << /day >>, la valeur par defaut etant 3/hour. --limit-burst nombre Nombre initial maximal de paquets a comparer : ce nombre est incremente de 1 tant que la limite specifiee ci-avant n'est pas atteinte, et ce jusqu'a ce que cette limite soit atteinte ; la valeur par defaut est 5. mac [!] --mac-source adresse Cette option permet de verifier la correspondance de l'adresse MAC source (Media Access Control). Cette derniere doit etre de la forme XX:XX:XX:XX:XX:XX. Notez que cette option n'est pertinente que pour les paquets provenant d'un dispositif Ethernet et entrant dans les chaines PREROUTING, FORWARD ou INPUT. mark Ce module verifie la correspondance du champ de netfilter << mark >> associe a un paquet (et qui peut etre defini a l'aide de l'action MARK ci-apres). [!] --mark valeur[/masque] Correspond aux paquets possedant la valeur de << mark >> non signee donnee (si un masque est specifie, il est combine a l'aide d'un ET logique avec le masque avant la comparaison). mh (specifique a IPv6) Cette extension est chargee si << --protocol ipv6-mh >> ou << --protocol mh >> est specifiee. Elle fournit l'option suivante : [!] --mh-type type[:type] Cette option permet de specifier le type d'en-tete de mobilite (Mobility Header -- MH) sous forme d'un type de MH numerique ou d'un des noms de type de MH indiques par la commande ip6tables -p mh -h multiport Ce module verifie la correspondance d'un ensemble de ports source ou destination. Il est possible de specifier jusqu'a15 ports. Une plage de ports (port:port) compte pour deux ports. Ce module ne peut etre utilise qu'avec les protocoles suivants : tcp, udp, udplite, dccp et sctp. [!] --source-ports,--sports port[,port|,port:port]... Correspond si le port source fait partie des ports donnes. Le drapeau --sports est un alias de commodite pour cette option. Plusieurs ports ou plages de ports sont separes par des virgules et une plage de port est specifie en utilisant un deux-points << : >>. Par exemple, 53,1024:65535 correspondra au port 53 et a tous les ports de 1024 a 65535. [!] --destination-ports,--dports port[,port|,port:port]... Correspond si le port destination fait partie des ports donnes. Le drapeau --dports est un alias de commodite pour cette option. [!] --ports port[,port|,port:port]... Correspond si un des ports source ou destination est egal a un des ports donnes. nfacct Ce module fournit l'infrastructure de statistiques etendue pour iptables. Vous devez utiliser cette verification de correspondance avec l'utilitaire d'espace utilisateur autonome nfacct(8). La seule option valable pour cette verification de correspondance est la suivante : --nfacct-name nom Cette option permet de specifier le nom d'objet existant qui sera utilise pour effectuer des statistiques sur le trafic auquel ce jeu de regles correspond. Pour utiliser cette extension, vous devez creer un objet de statistiques : nfacct add http-traffic Ensuite, vous devez attacher l'extension a l'objet de statistiques a l'aide d'iptables : iptables -I INPUT -p tcp --sport 80 -m nfacct --nfacct-name http-traffic iptables -I OUTPUT -p tcp --dport 80 -m nfacct --nfacct-name http-traffic Enfin, vous pouvez consulter l'intensite du trafic auquel la regle correspond : nfacct get http-traffic { pkts = 00000000000000000156, bytes = 00000000000000151786 } = http-traffic; Vous pouvez telecharger nfacct(8) depuis https://www.netfilter.org ou depuis le depot git.netfilter.org. osf Le module osf effectue une prise d'empreinte passive du systeme d'exploitation. Il compare certaines donnees (taille de fenetre, MSS (Maximum Segment Size -- taille maximale de segment), les options et leur ordre, TTL (Time To Live -- duree de vie), le drapeau DF (Don't Fragment -- ne pas fragmenter), etc.) des paquets ayant le bit SYN positionne. [!] --genre chaine Cette option permet de verifier la correspondance d'un genre de systeme d'exploitation en utilisant une prise d'empreinte passive. --ttl niveau Effectuer des verifications additionnelles de duree de vie sur le paquet pour determiner le systeme d'exploitation. niveau peut prendre les valeurs suivantes : - 0 -- Veritable comparaison des durees de vie des adresses IP et de l'empreinte. Fonctionne en general pour les reseaux locaux. - 1 -- Verifier si la duree de vie de l'en-tete IP est inferieure a celle de l'empreinte. Fonctionne pour les adresses routables globalement. - 2 -- Ne pas comparer les durees de vie. --log niveau Journaliser les genres determines dans dmesg meme s'ils ne correspondent pas au genre souhaite. niveau peut prendre une des valeurs suivantes : - 0 -- Journaliser toutes les signatures correspondantes ou inconnues. - 1 -- Journaliser seulement la premiere. - 2 -- Journaliser toutes les signatures connues correspondantes. Vous pouvez voir apparaitre quelque chose de ce genre dans syslog : Windows [2000:SP3:Windows XP Pro SP1, 2000 SP3]: 11.22.33.55:4024 -> 11.22.33.44:139 hops=3 Linux [2.5-2.6:] : 1.2.3.4:42624 -> 1.2.3.5:22 hops=4 Les empreintes d'OS peuvent etre chargees a l'aide du programme nfnl_osf. Pour charger une empreinte a partir d'un fichier, utilisez : nfnl_osf -f /usr/share/xtables/pf.os et pour la supprimer a nouveau, nfnl_osf -f /usr/share/xtables/pf.os -d La base de donnees des empreintes peut etre telechargee depuis http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os. owner Ce module tente de verifier la correspondance de differentes caracteristiques du createur du paquet, pour les paquets generes localement. Cette recherche de correspondance n'est valable que dans les chaines OUTPUT et POSTROUTING. Les paquets rediriges n'ont pas de socket associe, a la difference des paquets en provenance des threads du noyau qui ont un socket, mais generalement pas de proprietaire. [!] --uid-owner nom_utilisateur [!] --uid-owner identifiant_utilisateur[-identifiant_utilisateur] Correspond si la structure du fichier de socket du paquet (si elle existe) est la propriete de l'utilisateur donne. Vous pouvez aussi specifier un UID numerique ou un intervalle d'UID. [!] --gid-owner nom_groupe [!] --gid-owner identifiant_groupe[-identifiant_groupe] Correspond si la structure du fichier de socket du paquet est la propriete du groupe donne. Vous pouvez aussi specifier un GID numerique ou un intervalle de GID. --suppl-groups Avec cette option, le(s) groupe(s) specifie(s) a l'aide de --gid-owner sont aussi compares avec les groupes supplementaires d'un processus. [!] --socket-exists Correspond si le paquet est associe a un socket. physdev Ce module verifie la correspondance des dispositifs d'entree et de sortie d'un port de pont asservis a un dispositif de pont. Ce module fait partie de l'infrastructure qui active un pare-feu IP de pontage transparent et n'est disponible que pour les versions 2.5.44 et ulterieures du noyau. [!] --physdev-in nom Le nom d'un port de pont par lequel un paquet est recu (seulement pour les paquets entrant dans les chaines INPUT, FORWARD ou PREROUTING). Si le nom de l'interface de termine par un << + >>, toute interface dont le nom commence par ce nom correspondra. Si le paquet n'est pas arrive par un dispositif de pont, il ne correspondra pas aux criteres de cette option, a moins que << ! >> ne soit specifie. [!] --physdev-out nom Le nom d'un port de pont par lequel un paquet est sur le point d'etre envoye (seulement pour les paquets ayant subi un pontage et entrant dans les chaines FORWARD et POSTROUTING). Si le nom de l'interface de termine par un << + >>, toute interface dont le nom commence par ce nom correspondra. [!] --physdev-is-in Correspond si le paquet est entre par une interface de pont. [!] --physdev-is-out Correspond si le paquet est sur le point de sortir par une interface de pont. [!] --physdev-is-bridged Correspond si le paquet subit un pontage et n'est donc pas route. Utile seulement dans les chaines FORWARD et POSTROUTING. pkttype Ce module verifie la correspondance du type du paquet au niveau de la couche liaison. [!] --pkt-type {unicast|broadcast|multicast} policy Ce module verifie la correspondance de la politique utilisee par IPsec pour gerer un paquet. --dir {in|out} Cette option permet de choisir si l'on doit verifier la correspondance de la politique utilisee pour la desencapsulation ou la politique qui sera utilisee pour l'encapsulation. in est valable dans les chaines PREROUTING, INPUT et FORWARD, alors que out l'est dans les chaines POSTROUTING, OUTPUT et FORWARD. --pol {none|ipsec} Correspond si le paquet est traite par IPsec. --pol none ne peut pas etre combine a --strict. --strict Cette option permet de choisir si l'integralite de la politique doit correspondre ou si au moins une des regles de la politique doit correspondre a la politique donnee. Pour chaque element de politique a decrire, il est possible d'utiliser une ou plusieurs des options suivantes. Lorsque --strict a ete specifiee, au moins une option doit etre utilisee pour chaque element. [!] --reqid identifiant Cette option permet de verifier la correspondance du << reqid >> de la regle de la politique. Le reqid peut etre specifie a l'aide de setkey(8) en utilisant unique:id comme niveau. [!] --spi spi Cette option permet de verifier la correspondance du SPI (Security Parameters Index -- index des parametres de securite) des SA (Security Associations -- associations de securites). [!] --proto {ah|esp|ipcomp} Cette option permet de verifier la correspondance du protocole d'encapsulation. [!] --mode {tunnel|transport} Cette option permet de verifier la correspondance du mode d'encapsulation. [!] --tunnel-src adresse[/masque] Cette option permet de verifier la correspondance de l'adresse de l'extremite source d'une SA en mode tunnel. Valable seulement avec --mode tunnel. [!] --tunnel-dst adresse[/masque] Cette option permet de verifier la correspondance de l'adresse de l'extremite destination d'une SA en mode tunnel. Valable seulement avec --mode tunnel. --next Demarrer l'element suivant dans la specification de la politique. Ne peut etre utilise qu'avec --strict. quota Ce module implemente les quotas reseau en decrementant un compteur d'octets avec chaque paquet. La condition est verifiee jusqu'a ce que le compteur d'octets atteigne zero. Ce comportement peut etre inverse par une negation (la condition ne sera alors verifiee que lorsque le compteur d'octets atteindra zero). [!] --quota octets Le quota en octets. rateest L'estimateur de debit peut verifier la correspondance des debits estimes comme ceux collectes a l'aide de l'action RATEEST. Il prend en charge la correspondance basee sur des valeurs de bps/pps absolues, la comparaison de deux estimateurs de debit et la correspondance basee sur la difference entre deux estimateurs de debit. Pour une meilleure comprehension des options valables, voici toutes les combinaisons possibles : - rateest operateur rateest-bps - rateest operateur rateest-pps - (rateest moins rateest-bps1) operateur rateest-bps2 - (rateest moins rateest-pps1) operateur rateest-pps2 - rateest1 operateur rateest2 rateest-bps(sans debit !) - rateest1 operateur rateest2 rateest-pps(sans debit !) - (rateest1 moins rateest-bps1) operateur (rateest2 moins rateest-bps2) - (rateest1 moins rateest-pps1) operateur (rateest2 moins rateest-pps2) --rateest-delta Pour chaque estimateur (en mode relatif ou absolu), calculer la difference entre le debit du flux determine par l'estimateur et la valeur statique specifiee a l'aide des options BPS/PPS. Si le debit du flux est plus eleve que la valeur specifiee en BPS/PPS,0 sera utilise a la place d'une valeur negative. Autrement dit, la valeur utilisee sera le resultat de << max(0, rateest#_rate - rateest#_bps) >>. [!] --rateest-lt Correspond si le debit est inferieur au debit par estimateur donne. [!] --rateest-gt Correspond si le debit est superieur au debit par estimateur donne. [!] --rateest-eq Correspond si le debit est egal au debit par estimateur donne. Dans le mode dit << mode absolu >>, un seul estimateur est utilise et compare avec une valeur statique, tandis qu'en << mode relatif >>, deux estimateurs de debit sont compares avec un autre. --rateest nom Nom de l'unique estimateur de debit pour le mode absolu. --rateest1 nom --rateest2 nom Les noms des deux estimateurs de debit pour le mode relatif. --rateest-bps [valeur] --rateest-pps [valeur] --rateest-bps1 [valeur] --rateest-bps2 [valeur] --rateest-pps1 [valeur] --rateest-pps2 [valeur] Comparer avec la valeur specifiee les valeurs fournies par le(s) estimateur(s) en octets ou paquets par seconde. Voir la liste ci-avant pour connaitre les options a utiliser dans chaque cas. Il est possible d'ajouter un suffixe d'unite ; les suffixes disponibles sont : bit, [kmgt]bit, [KMGT]ibit, Bps, [KMGT]Bps et [KMGT]iBps. Exemple : voici la commande qui peut etre utilisee pour router les connexions de donnees sortantes d'un serveur FTP sur deux lignes en fonction de la bande passante disponible au moment ou la connexion a ete etablie : # Estimer les debits sortants : iptables -t mangle -A POSTROUTING -o eth0 -j RATEEST --rateest-name eth0 --rateest-interval 250ms --rateest-ewma 0.5s iptables -t mangle -A POSTROUTING -o ppp0 -j RATEEST --rateest-name ppp0 --rateest-interval 250ms --rateest-ewma 0.5s # Marquer en fonction de la bande passante disponible : iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1 iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2 iptables -t mangle -A balance -j CONNMARK --restore-mark realm (specifique a IPv4) Ce module permet de verifier la correspondance du domaine (realm) de routage. Les domaines de routage sont utilises dans les configurations de routage complexes mettant en jeu des protocoles de routage dynamique comme BGP. [!] --realm valeur[/masque] Verifier la correspondance d'un numero de domaine donne (accompagne eventuellement d'un masque). Au lieu d'un numero, valeur peut etre un domaine nomme issu de /etc/iproute2/rt_realms (dans ce cas, le masque n'est pas autorise). valeur et masque sont des entiers non signes de 4 octets et peuvent etre specifies en decimal, hexadecimal (en ajoutant le prefixe << 0x >>) ou octal (en prefixant la valeur d'un zero). recent Ce module permet de creer dynamiquement une liste d'adresses IP et de verifier la correspondance de cette liste de differentes manieres. Par exemple, vous pouvez creer une liste << mechants >> des gens qui tentent de se connecter au port 139 sur votre pare-feu, et supprimer ensuite tous les paquets qui proviennent de ces derniers sans les examiner. --set, --rcheck, --update et --remove sont mutuellement exclusifs. --name nom Specifier la liste a utiliser pour les commandes. Si aucun nom n'est donne, DEFAULT sera utilise. [!] --set Cette option permet d'ajouter l'adresse source du paquet a la liste. Si l'adresse source est deja presente dans la liste, l'entree concernee sera mise a jour. Cette option renvoie toujours << succes >> (ou << echec >> si ! est specifie). --rsource Verifier la correspondance de/sauvegarder l'adresse source de chaque paquet de la liste << recent >>. Il s'agit du comportement par defaut. --rdest Verifier la correspondance de/sauvegarder l'adresse destination de chaque paquet de la liste << recent >>. --mask masque_sous_reseau Cette option permet de specifier le masque_sous_reseau qui sera applique a cette liste << recent >>. [!] --rcheck Cette option permet de verifier si l'adresse source du paquet est actuellement dans la liste. [!] --update Identique a --rcheck, excepte que si la correspondance est verifiee, l'horodatage << vu la derniere fois >> sera mis a jour. [!] --remove Cette option permet de verifier si l'adresse source du paquet est actuellement dans la liste et si c'est le cas, supprimer cette adresse de la liste et la regle renverra << vrai >>. Si l'adresse n'est pas trouvee, la regle renverra << faux >>. --seconds secondes Cette option doit etre utilisee en combinaison avec une des options --rcheck ou --update. Lorsqu'elle est utilisee, la correspondance ne sera verifiee que si l'adresse est dans la liste et si elle a ete vue au cours du dernier nombre de secondes donne. --reap Cette option ne peut etre utilisee qu'en combinaison avec l'option --seconds. Lorsqu'elle est utilisee, les entrees plus anciennes que le nombre de secondes donne seront videes. --hitcount correspondances Cette option ne peut etre utilisee qu'en combinaison avec les options --rcheck ou --update. Lorsqu'elle est utilisee, la correspondance ne sera verifiee que si l'adresse est dans la liste et si les paquets ont ete recus un nombre de fois superieur ou egal a la valeur donnee. Elle peut etre utilisee en combinaison avec l'option --seconds pour creer une condition de correspondance encore plus restrictive necessitant un certain nombre d'interceptions dans un intervalle de temps donne. La valeur maximale de l'option --hitcount est donnee par le parametre << ip_pkt_list_tot >> du module du noyau xt_recent. Depasser cette valeur sur la ligne de commande provoquera le rejet de la regle. --rttl Cette option ne peut etre utilisee qu'en combinaison avec une des options --rcheck ou --update. Lorsqu'elle est utilisee, la correspondance ne sera verifiee que si l'adresse est dans la liste et si la duree de vie du paquet actuel correspond a celle du paquet qui correspondait a la regle --set. Elle peut s'averer utile si vous rencontrer des problemes avec des gens qui contrefont leur adresse source pour effectuer une attaque de type DoS a l'aide de ce module dans le but d'empecher les autres utilisateurs d'acceder a votre site en vous envoyant des paquets bogues. Exemples : iptables -A FORWARD -m recent --name mechant --rcheck --seconds 60 -j DROP iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name mechant --set -j DROP /proc/net/xt_recent/* correspond aux listes actuelles d'adresses et d'informations a propos de chaque entree de chaque liste. Chaque fichier dans /proc/net/xt_recent/ peut etre consulte pour determiner la liste actuelle ou ecrit en utilisant les commandes suivantes pour modifier la liste : echo +adresse >/proc/net/xt_recent/DEFAULT pour ajouter adresse a la liste DEFAULT echo -adresse >/proc/net/xt_recent/DEFAULT pour supprimer adresse de la liste DEFAULT echo / >/proc/net/xt_recent/DEFAULT pour vider la liste DEFAULT (en supprimer toutes les entrees). Le module lui-meme accepte les parametres suivants (avec leur valeur par defaut) : ip_list_tot=100 Nombre d'adresses memorisees par table. ip_pkt_list_tot=20 Nombre de paquets memorises par adresse. ip_list_hash_size=0 Taille de la table de hachage. 0 signifie que cette taille doit etre calculee en fonction de ip_list_tot ; la valeur par defaut est 512. ip_list_perms=0644 Permissions des fichiers /proc/net/xt_recent/*. ip_list_uid=0 UID numerique du proprietaire des fichiers /proc/net/xt_recent/*. ip_list_gid=0 GID numerique du proprietaire des fichiers /proc/net/xt_recent/*. rpfilter Ce module effectue un test par filtrage par chemin inverse sur un paquet. Si la reponse a un paquet devrait etre envoyee par la meme interface que celle par laquelle il est arrive, le paquet correspondra. Notez qu'a la difference du filtrage par chemin inverse (rp_filter) integre au noyau, les paquets proteges par IPSec ne font pas l'objet d'un traitement particulier. Si tel est votre souhait, combinez cette verification de correspondance avec celle du module << policy >>. De meme, les paquets arrivant par l'interface loopback sont toujours autorises. Cette verification de correspondance ne peut etre utilisee que dans la chaine PREROUTING des tables raw ou mangle. --loose Cette option permet de specifier que le test de filtrage par chemin inverse doit reussir meme si le dispositif de sortie selectionne n'est pas celui attendu. --validmark Utiliser aussi la valeur de << nfmark >> du paquet lors de la determination de la route du chemin inverse. --accept-local Cette option permet d'accepter les paquets arrivant du reseau avec une adresse source qui est aussi assignee a la machine locale. --invert Cette option permet d'inverser le resultat de la verification de correspondance. Cette derniere sera positive pour les paquets qui ont echoue au test de filtrage par chemin inverse au lieu de l'etre pour ceux qui ont reussi le test. L'exemple suivant montre comment journaliser et supprimer les paquets qui echouent au test de filtrage par chemin inverse : iptables -t raw -N RPFILTER iptables -t raw -A RPFILTER -m rpfilter -j RETURN iptables -t raw -A RPFILTER -m limit --limit 10/minute -j NFLOG --nflog-prefix "rpfilter drop" iptables -t raw -A RPFILTER -j DROP iptables -t raw -A PREROUTING -j RPFILTER L'exemple suivant montre comment supprimer les paquets qui ont echoue, sans journalisation : iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP rt (specifique a IPv6) Ce module permet de verifier la correspondance de l'en-tete de routage IPv6. [!] --rt-type type Cette option permet de verifier la correspondance du type (numerique). [!] --rt-segsleft numero[:numero] Cette option permet de verifier la correspondance du champ << segments restants >> (intervalle). [!] --rt-len taille Cette option permet de verifier la correspondance de la taille de cet en-tete. --rt-0-res Verifier aussi la correspondance du champ reserve (type=0). --rt-0-addrs adresse[,adresse...] Cette option permet de verifier la correspondance des adresses type=0 (liste). --rt-0-not-strict Cette option permet d'indiquer que la liste d'adresses type=0 n'est pas une liste stricte. sctp Ce module permet de verifier la correspondance des en-tetes du SCTP (Stream Control Transmission Protocol -- protocole de transmission avec controle de flux). [!] --source-port,--sport port[:port] [!] --destination-port,--dport port[:port] [!] --chunk-types {all|any|only} type_fragment[:drapeaux] [...] Si la lettre de drapeau est en capitale, le drapeau doit etre compare s'il est defini, sinon le drapeau doit etre compare s'il n'est pas defini. Types de verification de correspondance : all Correspondance si tous les types de fragment donnes sont presents et si les drapeaux correspondent. any Correspondance si au moins un des types de fragment donnes est present avec les drapeaux donnes. only Correspondance si seuls les types de fragment donnes sont presents avec les drapeaux donnes et si aucun ne manque. Types de fragment : DATA, INIT, INIT_ACK, SACK, HEARTBEAT, HEARTBEAT_ACK, ABORT, SHUTDOWN, SHUTDOWN_ACK, ERROR, COOKIE_ECHO, COOKIE_ACK, ECN_ECNE, ECN_CWR, SHUTDOWN_COMPLETE, I_DATA, RE_CONFIG, PAD, ASCONF, ASCONF_ACK FORWARD_TSN et I_FORWARD_TSN. drapeaux de type de fragment disponibles DATA I U B E i u b e I_DATA I U B E i u b e ABORT T t SHUTDOWN_COMPLETE T t Les minuscules signifient que le drapeau doit etre a << off >>, les capitales que le drapeau doit etre a << on >>. Exemples : iptables -A INPUT -p sctp --dport 80 -j DROP iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT set Ce module permet de verifier la correspondance d'ensembles d'adresses IP qui peuvent etre definis a l'aide de ipset(8). [!] --match-set nom_ensemble drapeau[,drapeau]... ou drapeau[,drapeau]... est une liste de specifications src et/ou dst separees par des virgules et dont le nombre est limite a 6. Ainsi la regle iptables -A FORWARD -m set --match-set test src,dst correspondra aux paquets pour lesquels (si le type d'ensemble est ipportmap) la paire adresse source/port destination existe dans l'ensemble specifie. Si le type d'ensemble de l'ensemble specifie est unidimensionnel (par exemple ipmap), la regle correspondra aux paquets pour lesquels l'adresse source existe dans l'ensemble specifie. --return-nomatch Si l'option --return-nomatch est specifiee et si le type d'ensemble prend en charge le drapeau nomatch, la verification de correspondance est inversee ; une correspondance verifiee avec un element ayant le drapeau nomatch active renverra true, alors qu'une correspondance verifiee avec un element simple reverra false. ! --update-counters Si le drapeau --update-counters est inverse par negation, les compteurs d'octets et de paquets de l'element qui correspond dans l'ensemble ne seront pas mis a jour. Par defaut, compteurs d'octets et de paquets sont mis a jour. ! --update-subcounters Si le drapeau --update-subcounters est inverse par negation, les compteurs d'octets et de paquets de l'element qui correspond dans l'ensemble des membres d'un type de liste d'ensemble ne seront pas mis a jour. Par defaut, compteurs d'octets et de paquets sont mis a jour. [!] --packets-eq valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur de paquets de l'element est egale a la valeur donnee. --packets-lt valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur de paquets de l'element est inferieure a la valeur donnee. --packets-gt valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur de paquets de l'element est superieure a la valeur donnee. [!] --bytes-eq valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur d'octets est egale a la valeur donnee. --bytes-lt valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur d'octets de l'element est inferieure a la valeur donnee. --bytes-gt valeur Si le paquet correspond a un element de l'ensemble, la correspondance ne sera verifiee que si en plus la valeur du compteur d'octets de l'element est superieure a la valeur donnee. Les drapeaux et options en rapport avec les compteurs de paquets et d'octets sont ignores lorsque l'ensemble a ete defini sans prise en charge du comptage. L'option --match-set peut etre remplacee par --set si cela n'interfere pas avec une option d'une autre extension. L'utilisation de << -m set >> necessite que le noyau prenne en charge le module ipset, ce qui est le cas, pour les noyaux standards, depuis Linux 2.6.39. socket Ce module permet de verifier la correspondance d'un paquet s'il est possible de trouver un socket TCP/UDP ouvert en effectuant une recherche de socket sur ce paquet. La correspondance est verifiee s'il existe un socket en ecoute etabli ou a lien non nul (eventuellement avec une adresse non locale). La recherche est effectuee en utilisant le tuple packet des paquets TCP/UDP ou l'en-tete TCP/UDP original embedded dans un paquet d'erreur ICMP/ICPMv6. --transparent Ignorer les sockets non transparents. --nowildcard Ne pas ignorer les sockets lies a << n'importe quelle >> adresse. Par defaut, la correspondance de socket n'acceptera pas de socket en ecoute non lie, car dans ce cas, des services locaux pourraient intercepter le trafic qui autrement aurait ete redirige. Cette option presente donc des implications de securite lorsqu'elle est utilisee pour verifier la correspondance d'un trafic redirige pour renvoyer de tels paquets a la machine locale avec routage de politique. Lorsqu'on utilise la correspondance de socket pour implementer des mandataires completement transparents lies a des adresses non locales, il est recommande d'utiliser plutot l'option --transparent. Exemple (en supposant que les paquets marques 1 sont delivres localement) : -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1 --restore-skmark Cette option permet de definir la marque du paquet avec la marque du socket correspondant. Elle peut etre utilisee en combinaison avec les options --transparent et --nowildcard pour restreindre la correspondance des sockets au cas ou la marque du paquet est restauree. Exemple : une application ouvre 2 sockets transparents (IP_TRANSPARENT) et leur definit une marque a l'aide de l'option de socket SO_MARK. Nous pouvons filtrer les paquets correspondants : -t mangle -I PREROUTING -m socket --transparent --restore-skmark -j action -t mangle -A action -m mark --mark 10 -j action2 -t mangle -A action -m mark --mark 11 -j action3 etat L'extension << state >> est un sous-ensemble du module << conntrack >>. Elle permet d'acceder a l'etat du tracage de connexion pour le paquet concerne. [!] --state etat etat est une liste des etats de connexion a comparer separes par des virgules. Seulement ce sous-ensemble des etats pris en charge par << conntrack >> est reconnu : INVALID, ESTABLISHED, NEW, RELATED ou UNTRACKED. Pour leur description, voir la section << conntrack >> plus avant dans cette page de manuel. statistic Ce module verifie la correspondance des paquets en fonction de certaines conditions statistiques. Il prend en charge deux modes distincts qui peuvent etre definis a l'aide de l'option --mode. Options prises en charge : --mode mode Cette option permet de definir le mode de verification de correspondance de la regle ; les modes pris en charge sont random et nth. [!] --probability p Cette option permet de definir la probabilite pour qu'un paquet corresponde de maniere aleatoire. Elle ne peut etre utilisee que dans le mode random. p doit etre comprise entre 0.0 et 1.0. La granularite prise en charge possede un increment de 1/2147483648. [!] --every n Verifier la correspondance d'un paquet sur n. Cette option ne peut etre utilisee que dans le mode nth (voir aussi l'option --packet). --packet p Cette option permet de definir la valeur initiale du compteur pour le mode nth (0 <= p <= n-1, par defaut 0). string Ce module verifie la correspondance de la chaine donnee en utilisant une strategie de comparaison de motifs. Il necessite un noyau Linux de version superieure ou egale a 2.6.14. --algo {bm|kmp} Cette option permet de selectionner une strategie de comparaison de motifs (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris). --from decalage Cette option permet de definir le decalage a partir duquel la comparaison sera effectuee. La valeur par defaut est 0. --to decalage Cette option permet de definir le nombre d'octets, a partir de 0 qui seront compares. Autrement dit, seuls les octets de 0 a decalage-1 seront compares. La valeur par defaut est la taille du paquet. [!] --string motif Cette option permet de specifier le motif a comparer. [!] --hex-string motif Cette option permet de specifier le motif a comparer en notation hexadecimale. --icase Ignorer la casse lors de la comparaison. Exemples : # Le motif peut contenir du texte simple. iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG # Le motif en notation hexadecimale peut contenir des caracteres non imprimables comme |0D 0A| ou |0D0A|. iptables -p udp --dport 53 -m string --algo bm --from 40 --to 57 --hex-string '|03|www|09|netfilter|03|org|00|' Nota : etant donne que l'algorithme Boyer-Moore (BM) effectue sa comparaison de la droite vers la gauche, et que le noyau peut stocker un paquet sous forme de plusieurs blocs non contigus, il est possible qu'une comparaison soit repartie sur plusieurs blocs, auquel cas cet algorithme ne le trouvera pas. Pour vous assurer qu'une telle situation ne se presente jamais, utilisez plutot l'algorithme Knuth-Pratt-Morris (KMP). Pour resumer, choisissez l'algorithme de recherche de chaine approprie a votre cas concret. Par exemple, si vous utilisez le module pour le filtrage, NIDS ou tout filtrage similaire axe sur la securite, choisissez KMP. Par contre, si vous recherchez la performance -- par exemple, si vous classez les paquets pour appliquer des politiques de qualite de service (QoS) -- et si vous ne vous preoccupez pas de la perte eventuelle de paquets correspondants divises en plusieurs fragments, choisissez BM. tcp Ce module ne peut etre utilise que si << --protocol tcp >> a ete specifie. Il prend en charge les options suivantes : [!] --source-port,--sport port[:port] Cette option permet de specifier le port ou une plage de ports source. port peut etre un nom de service ou un numero de port. Il est aussi possible de specifier une plage fermee de ports sous la forme premier:dernier. Si premier est omis, la plage debutera a << 0 >> ; si dernier est omis, la plage finira a << 65535 >>. --sport est un alias pratique de cette option. [!] --destination-port,--dport port[:port] Cette option permet de specifier le port ou une plage de ports destination. --dport est un alias pratique de cette option. [!] --tcp-flags masque comp Correspondance lorsque les drapeaux TCP sont tels que specifies. Le premier argument masque contient les drapeaux qui doivent etre examines, sous forme d'une liste separee par des virgules ; le second argument comp est une liste des drapeaux separes par des virgules qui doit etre definie. Les drapeaux valables sont : SYN ACK FIN RST URG PSH ALL NONE. Ainsi la commande iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN ne concernera que les paquets dont le drapeau SYN est defini et dont les drapeaux ACK, FIN et RST ne le sont pas. [!] --syn Correspondance uniquement aux paquets dont le bit SYN est positionne et dont les bits ACK, RST et FIN ne le sont pas. De tels paquets sont utilises pour demander l'ouverture d'une connexion TCP ; par exemple, bloquer de tels paquets entrant par une interface empechera les connexions TCP entrantes, alors que les connexions TCP sortantes ne seront pas affectees. Cette option est equivalente a --tcp-flags SYN,RST,ACK,FIN SYN. [!] --tcp-option numero Correspondance si l'option TCP est definie. tcpmss Ce module permet de verifier la correspondance du champ TCP MSS (Maximum Segment Size -- taille maximale de segment) de l'en-tete TCP. Il ne peut etre utilise qu'avec les paquets TCP SYN ou SYN/ACK, car la MSS n'est negociee que durant la << poignee de main >> TCP au moment du lancement de la connexion. [!] --mss valeur[:valeur] Cette option permet de verifier la correspondance d'une valeur ou d'un intervalle de valeurs de TCP MSS. Si un intervalle est specifie, la seconde valeur doit etre superieure ou egale a la premiere. time Ce module permet de verifier la correspondance du moment d'arrivee d'un paquet avec un intervalle de temps donne. Toutes les options sont facultatives, mais elles sont combinees avec un ET logique si elles sont presentes. Tous les temps sont interpretes en UTC par defaut. --datestart AAAA[-MM[-JJ[Thh[:mm[:ss]]]]] --datestop AAAA[-MM[-JJ[Thh[:mm[:ss]]]]] Ces options permettent de specifier un intervalle de temps, exprime en notation << T >> de la norme ISO 8601, pendant lequel la correspondance d'un paquet sera verifiee. L'intervalle de temps maximal est 1970-01-01T00:00:00 a 2038-01-19T04:17:07. Si --datestart ou --datestop ne sont pas specifies, leur valeur par defaut sera 1970-01-01 et 2038-01-19, respectivement. --timestart hh:mm[:ss] --timestop hh:mm[:ss] Ces options permettent de specifier un intervalle de temps journalier pendant lequel la correspondance d'un paquet sera verifiee. L'intervalle de temps maximal est 00:00:00 a 23:59:59. Les valeurs commencant par zero sont autorisees (comme << 06:03 >>) et correctement interpretees en base 10. [!] --monthdays jour[,jour...] Cette option permet de specifier les jours du mois au cours desquels la correspondance d'un paquet sera verifiee. Les valeurs possibles vont de 1 a 31. Notez que specifier 31 ne correspondra pas pour les mois qui n'ont pas de 31eme jour ; meme remarque pour les mois de fevrier a 28 ou 29 jours. [!] --weekdays jour[,jour...] Cette option permet de specifier les jours de la semaine au cours desquels la correspondance d'un paquet sera verifiee. Les valeurs possibles sont Mon, Tue, Wed, Thu, Fri, Sat et Sun ou des nombres de 1 a 7, respectivement. Vous pouvez aussi utiliser des variantes a deux caracteres (Mo, Tu, etc.). --contiguous Lorsque --timestop est inferieur a --timestart, considerer cela comme un simple intervalle et non comme des intervalles distincts pour la comparaison. Voir EXEMPLES. --kerneltz Utiliser la zone horaire du noyau au lieu d'UTC pour determiner si un paquet correspond aux contraintes de temps. A propos des zone horaires du noyau : Linux conserve systematiquement l'heure systeme en UTC. Au demarrage, l'heure systeme est initialisee a partir d'une source de temps de reference. Lorsque cette source de temps n'a pas d'informations a propos de la zone horaire, comme l'horloge CMOS RTC d'x86, la zone UTC sera presumee. Si la source de temps n'est pas en UTC, l'espace utilisateur devra fournir l'heure systeme et la zone horaire correctes au noyau lorsqu'il aura obtenu cette information. L'heure locale est une fonctionnalite qui s'ajoute a l'heure systeme (independante de la zone horaire). Chaque processus possede sa propre idee du temps local defini a l'aide de la variable d'environnement TZ. Le noyau possede aussi sa propre variable exprimant le decalage de la zone horaire. La variable d'environnement en espace utilisateur TZ specifie comment l'heure systeme basee sur UTC est affichee, par exemple lorsque vous executez date(1) ou ce qu'affiche votre horloge de bureau. La chaine TZ peut presenter des decalages differents en fonction de la date, ce qui provoque un saut de temps automatique dans l'espace utilisateur lorsque le DST (Daylight Saving Time -- heure d'ete) change. La variable du noyau exprimant le decalage de la zone horaire lui permet de convertir des temps en provenance de sources non UTC, comme les systemes de fichiers FAT, vers des temps UTC (car c'est ces derniers qu'utilise le reste du systeme). Le probleme avec la zone horaire du noyau reside dans le fait que les distributions Linux peuvent ignorer la definition de la zone horaire du noyau et ne definir que l'heure systeme. Meme si une distribution particuliere definit la zone horaire au demarrage, elle ne maintient en general pas a jour le decalage de la zone horaire du noyau -- qui change avec l'heure d'ete. ntpd(8) n'affectant pas la zone horaire du noyau, il est inutile de l'executer pour resoudre ce probleme. Ainsi, il est possible d'avoir une zone horaire toujours egale a +0000 ou fausse pendant la moitie de l'annee ; c'est pourquoi l'utilisation de --kerneltz est fortement deconseillee. EXEMPLES. Pour que les paquets correspondent pendant les weekends, utilisez : -m time --weekdays Sa,Su Ou, pour que les paquets correspondent (une seule fois) pendant une periode de vacances nationales : -m time --datestart 2007-12-24 --datestop 2007-12-27 Comme l'heure de fin est exactement inclusive, vous devez utiliser le moment de fin suivant pour exclure de la correspondance la premiere seconde du jour suivant : -m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59 Pendant la pause dejeuner : -m time --timestart 12:30 --timestop 13:30 Le quatrieme vendredi du mois : -m time --weekdays Fr --monthdays 22,23,24,25,26,27,28 Notez que cet exemple exploite une certaine propriete mathematique. Il n'est pas possible d'exprimer << quatrieme jeudi OU quatrieme vendredi >> a l'aide d'une seule regle ; il est cependant possible de le faire a l'aide de plusieurs regles. Verifier une correspondance a cheval sur deux jours peut donner des resultats inattendus. Par exemple, << -m time --weekdays Mo --timestart 23:00 --timestop 01:00 >> correspondra a la periode du lundi pendant une heure de minuit a 1 heure du matin et pendant une autre heure a partir de 23 heures. Si ce n'est pas ce que vous souhaitez, par exemple si vous voulez << verifier la correspondance pendant deux heures a partir du lundi a 23 heures >>, vous devez ajouter l'option --contiguous dans cet exemple. tos Ce module verifie la correspondance du champ sur 8 bits << Type of Service >> de l'en-tete IPv4 (bits << Precedence >> inclus) ou du champ << Priority >> (aussi sur 8 bits) de l'en-tete IPv6. [!] --tos valeur[/masque] Cette option permet de verifier la correspondance des paquets avec la valeur de marque TOS donnee. Si un masque est specifie, il est combine a l'aide d'un ET logique avec la marque TOS avant la comparaison. [!] --tos symbole Vous pouvez aussi specifier un nom symbolique lors de la recherche de correspondance a l'aide du module tos pour IPv4. La liste des noms TOS reconnus peut etre obtenue en appelant iptables suivi de -m tos -h. Notez que cela implique un masque de 0x3F, c'est-a-dire tous les bits sauf les bits ECN (Explicit Congestion Notification -- notification explicite de congestion). ttl (specifique a IPv4) Ce module verifie la correspondance du champ duree de vie de l'en-tete IP. [!] --ttl-eq ttl Correspondance de la valeur de TTL donnee. --ttl-gt ttl Correspondance si la duree de vie du paquet est superieure a la valeur de TTL donnee. --ttl-lt ttl Correspondance si la duree de vie du paquet est inferieure a la valeur de TTL donnee. u32 Ce module teste si des quantites de4 octets maximum extraites d'un paquet possedent les valeurs specifiees. Specifier ce qu'il faut extraire suffit en general pour trouver des donnees a des decalages donnes dans les en-tetes tcp ou les charges utiles. [!] --u32 tests L'argument consiste en un programme dans un langage simple decrit ci-apres. tests := emplacement "=" valeur | tests "&&" emplacement "=" valeur valeur := intervalle | valeur "," intervalle intervalle := nombre | nombre ":" nombre un nombre seul, n, est interprete comme n:n. n:m est interprete comme l'intervalle des nombres >=n et <=m. emplacement := nombre | emplacement operateur nombre operateur := "&" | "<<" | ">>" | "@" Les operateurs &, <<, >> et && ont la meme signification qu'en C. L'operateur = est reellement un operateur d'appartenance a un ensemble et la syntaxe des valeurs decrit un ensemble. L'operateur @ permet de se deplacer vers l'en-tete suivant et est decrit plus loin. Il existe actuellement des limites d'implementation artificielles sur la taille des tests : - pas plus de 10 << = >> (et 9 << && >>) dans l'argument d'u32 - pas plus de 10 intervalles (et 9 virgules) par valeur - pas plus de 10 nombres (et 9 operateurs) par emplacement Pour expliquer la signification d'un emplacement, imaginez la machine suivante qui l'interprete. Il y a trois registres : A est de type char *, initialement l'adresse de l'en-tete IP B et C sont des entiers non signes sur 32 bits, initialement egaux a 0. Les instructions sont : nombre B = nombre; C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3) &nombre C = C & nombre << nombre C = C << nombre >> nombre C = C >> nombre @nombre A = A + C ; puis executez l'instruction nombre Tout acces a la memoire en dehors de [skb->data,skb->end] fera echouer la recherche de correspondance. Sinon, le resultat du calcul est la valeur finale de C. Les blancs sont autorises mais non obligatoires dans les tests. Cependant, les caracteres presents dans ces derniers sont susceptibles de necessiter une protection vis-a-vis de l'interpreteur de commande, et il est donc recommande d'entourer les arguments de guillemets. Exemple : rechercher les paquets IP d'une taille totale superieure ou egale a 256 octets. L'en-tete IP comporte un champ contenant la taille totale dans les octets 2 et 3. --u32 "0 & 0xFFFF = 0x100:0xFFFF" Lire les octets 0 a 3 Combiner ces derniers a l'aide d'un ET logique avec 0xFFFF (ce qui donne les octets 2 et 3), et tester si le resultat est compris dans l'intervalle [0x100:0xFFFF]. Exemple plus realiste, donc plus complique : rechercher les paquets avec un icmp de type 0 Tout d'abord, verifier s'il s'agit d'un paquet ICMP ; c'est le cas si l'octet 9 (protocole) est egal a 1. --u32 "6 & 0xFF = 1 && ... lire les octets 6 a 9, utiliser l'operateur & pour supprimer les octets 6 a 8 et comparer le resultat avec 1. Verifier ensuite qu'il ne s'agit pas d'un fragment (si c'est le cas, il pourra appartenir a un tel paquet, mais ce n'est pas systematique). Notez que ce test est en general necessaire si vous voulez verifier la correspondance de toute donnee au dela de l'en-tete IP. S'il s'agit d'un paquet complet (et non d'un fragment), les 6 derniers bits de l'octet 6 et tous ceux de l'octet 7 seront a 0. Autrement, vous pouvez autoriser les premiers fragments en ne testant que les 5 derniers bits de l'octet 6. ... 4 & 0x3FFF = 0 && ... Dernier test : le premier octet apres l'en-tete IP (le type) est a 0. C'est ici que nous devons utiliser l'operateur << @ >>. La taille de l'en-tete IP (IHL) en mots de 32 bits est stockee dans la moitie droite de l'octet 0 de l'en-tete IP lui-meme. ... 0 >> 22 & 0x3C @ 0 >> 24 = 0" Le premier 0 signifie << lire les octets 0 a 3 >>, et >>22 << decaler le resultat de 22 bits vers la droite. Un decalage de 24 bits donnerait le premier octet ; donc un decalage de seulement 22 bits correspond a quatre fois cela plus quelques octets supplementaires. Ensuite, &3C elimine les deux bits supplementaires a droite et les quatre premiers bits du premier octet. Par exemple, si IHL=5, la taille de l'en-tete IP est de 20 (4 x 5) octets. Dans notre cas, les octets 0 et 1 contiennent (en binaire) xxxx0101 yyzzzzzz, >>22 donne la valeur sur 10 bits xxxx0101yy et &3C donne 010100. @ indique qu'il faut utiliser ce nombre comme nouveau decalage dans le paquet et lire quatre octets a partir de cette nouvelle position. Ce sont les 4 premiers octets de la charge utile ICMP dont l'octet 0 correspond au type ICMP. Il ne nous reste donc qu'a decaler la valeur de 24 vers la droite pour tout eliminer, sauf le premier octet, et a comparer le resultat a 0. Exemple : Les octets 8 a 12 de la charge utile TCP ont pour valeur 1, 2, 5 ou 8. Tout d'abord, verifier qu'il s'agit d'un paquet TCP (similaire a ICMP). --u32 "6 & 0xFF = 6 && ... Ensuite, verifier qu'il ne s'agit pas d'un fragment (comme ci-avant). ... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8" Comme ci-avant, 0>>22&3C calcule le nombre d'octets contenus dans l'en-tete IP. L'operateur @ fait du resultat le nouveau decalage dans le paquet qui correspond au debut de l'en-tete TCP. La taille de l'en-tete TCP (toujours en mots de 32 bits) est stockee dans la moitie gauche de l'octet 12 de l'en-tete TCP. 12>>26&3C convertit cette longueur en octets (comme precedemment pour l'en-tete IP). << @ >> fait du resultat le nouveau decalage qui correspond au debut de la charge utile TCP. Enfin, << 8 >> lit les octets 8 a 12 de la charge utile et = verifie si le resultat est egal a 1, 2, 5 ou 8. udp Ce module ne peut etre utilise que si l'option << --protocol udp >> est specifiee. Il prend en charge les options suivantes : [!] --source-port,--sport port[:port] Cette option permet de specifier le port ou la plage de ports source. Voir la description de l'option --source-port de l'extension TCP pour les details. [!] --destination-port,--dport port[:port] Cette option permet de specifier le port ou la plage de ports destination. Voir la description de l'option --destination-port de l'extension TCP pour les details. ACTIONS ETENDUES iptables peut utiliser des modules d'action etendue ; les actions suivantes sont incluses dans la distribution standard : AUDIT Cette action cree des enregistrements d'audit pour les paquets qui l'atteignent. Elle permet d'enregistrer les paquets acceptes, elimines et rejetes. Voir auditd(8) pour plus de details. --type {accept|drop|reject} Cette option permet de definir le type d'enregistrement d'audit. A partir de Linux 4.12, cette option n'a plus d'effet sur les messages d'audit generes. Elle est encore acceptee par iptables pour des raisons de compatibilite, mais ignoree. Exemple : iptables -N AUDIT_DROP iptables -A AUDIT_DROP -j AUDIT iptables -A AUDIT_DROP -j DROP CHECKSUM Cette action contourne selectivement les applications defectueuses ou obsoletes. Elle ne peut etre utilisee que dans la table mangle. --checksum-fill Cette option permet de calculer et inscrire la somme de controle dans un paquet qui en est depourvu. Elle s'avere particulierement utile si vous devez contourner des applications anciennes comme les clients dhcp qui ne gerent pas bien les dechargements de somme de controle, et ne souhaitez pas desactiver le dechargement de somme de controle dans votre dispositif. CLASSIFY Cette action permet de definir la valeur de skb->priority, et ainsi ranger le paquet dans une classe CBQ (Class-Based Queuing -- mise en file d'attente en fonction de la classe) specifique. --set-class majeur:mineur Cette option permet de definir les valeurs majeure et mineure de la classe. Les valeurs sont toujours interpretees en hexadecimal, meme si le prefixe 0x n'est pas specifie. CLUSTERIP (specifique a IPv4) Cette action permet de configurer une grappe simple de noeuds qui partagent une adresse IP et MAC sans repartiteur de charge explicite en frontal. Les connexions sont reparties statistiquement entre les noeuds de cette grappe. Notez que l'action CLUSTERIP est consideree comme obsolete par rapport au module de correspondance cluster qui est plus souple et non limite a IPv4. --new Cette option permet de creer un nouveau ClusterIP. Vous devez toujours la definir dans la premiere regle concernant un ClusterIP donne. --hashmode mode Cette option permet de specifier le mode de hachage. Les valeurs possibles sont sourceip, sourceip-sourceport ou sourceip-sourceport-destport. --clustermac mac Cette option permet de specifier l'adresse MAC du ClusterIP. Ce doit etre une adresse multicast de la couche liaison. --total-nodes nombre Cette option permet de specifier le nombre total de noeuds que comporte cette grappe. --local-node numero Cette option permet de specifier le numero de noeud de la machine locale au sein de cette grappe. --hash-init alea Cette option permet de specifier la graine aleatoire utilisee pour l'initialisation du hachage. CONNMARK Cette action definit la valeur (sur 32 bits) de la marque netfilter associee a une connexion. --set-xmark valeur[/masque] Cette option met a zero les bits donnes par masque et effectue un XOR entre la ctmark (marque de connexion) et la valeur. --save-mark [--nfmask masque_nf] [--ctmask masque_ct] Cette option copie la marque de paquet (nfmark) vers la marque de connexion (ctmark) en utilisant les masques donnes. La nouvelle valeur de la marque de paquet nfmark est determinee comme suit : ctmark = (ctmark & ~masque_ct) ^ (nfmark & masque_nf) Autrement dit, masque_ct determine les bits a mettre a zero et masque_nf les bits de nfmark a combiner a l'aide d'un XOR avec la ctmark. La valeur par defaut de masque_ct et masque_nf est 0xFFFFFFFF. --restore-mark [--nfmask masque_nf] [--ctmask masque_ct] Cette option copie la marque de connexion (ctmark) vers la marque de paquet (nfmark) en utilisant les masques donnes. La nouvelle valeur de ctmark est determinee comme suit : nfmark = (nfmark & ~masque_nf) ^ (ctmark & masque_ct); Autrement dit, masque_nf determine les bits a mettre a zero et masque_ct les bits de ctmark a combiner a l'aide d'un XOR avec la nfmark. La valeur par defaut de masque_ct et masque_nf est 0xFFFFFFFF. --restore-mark ne peut etre utilisee que dans la table mangle. Les mnemoniques valables pour --set-xmark sont les suivants : --and-mark bits Effectuer un ET logique entre la ctmark et bits (le mnemonique pour --set-xmark 0/invbits ou invbits est la negation binaire de bits). --or-mark bits Effectuer un OU logique entre la ctmark et bits (le mnemonique pour --set-xmark bits/bits). --xor-mark bits Effectuer un XOR logique entre la ctmark et bits (le mnemonique pour --set-xmark bits/0). --set-mark valeur[/masque] Cette option permet de definir la marque de connexion. Si un masque est specifie, seuls les bits correspondant aux bits positionnes du masque seront modifies. --save-mark [--mask masque] Cette option permet de copier la marque de paquet nfmark vers la marque de connexion ctmark. Si un masque est specifie, seuls les bits correspondant aux bits positionnes du masque seront copies. --restore-mark [--mask masque] Cette option permet de copier la marque de connexion ctmark vers la marque de paquet nfmark. Si un masque est specifie, seuls les bits correspondant aux bits positionnes du masque seront copies. Cette option ne peut etre utilisee que dans la table mangle. CONNSECMARK Cette action permet de copier les marquages de securite depuis les paquets vers les connexions (si non etiquetees), et depuis les connexions vers les paquets (la encore, si non etiquetes). Utilisee en general en combinaison avec l'action SECMARK, elle peut etre utilisee dans la table security (a des fins de retrocompatibilite avec les noyaux plus anciens, elle peut aussi etre utilisee dans la table mangle). --save Si le paquet possede un marquage de securite, copier ce dernier vers la connexion si elle n'est pas marquee. --restore Si la connexion possede un marquage de securite, copier ce dernier vers le paquet s'il n'en possede pas deja un. CT L'action CT permet de definir les parametres d'un paquet ou de la connexion qui lui est associee. Elle attache un << modele >> d'entree de tracage de connexion au paquet, ce modele etant ensuite utilise par le coeur de conntrack lors de l'initialisation d'une nouvelle entree ct. Cette action ne peut donc etre utilisee que dans la table raw. --notrack Desactiver le tracage de connexion pour ce paquet. --helper nom Utiliser l'assistant identifie a l'aide de nom pour la connexion. Utiliser cette option est plus souple que charger les modules d'assistant de conntrack avec des ports predefinis. --ctevents evenement[,...] Ne generer que les evenements de conntrack specifies pour cette connexion. Les types d'evenement valables sont : new, related, destroy, reply, assured, protoinfo, helper, mark (ce type d'evenement fait reference a la ctmark, pas a la nfmark), natseqinfo et secmark (ctsecmark). --expevents evenement[,...] Ne generer que les evenements d'attente specifies pour cette connexion. Le type d'evenement valable est : new. --zone-orig {id|mark} Assigner ce paquet a la zone id pour le trafic venant de la direction ORIGINAL et n'effectuer des recherches que dans cette zone. Si mark est specifie a la place de id, la zone est derivee de la marque de paquet nfmark. --zone-reply {id|mark} Assigner ce paquet a la zone id pour le trafic venant de la direction REPLY et n'effectuer des recherches que dans cette zone. Si mark est specifie a la place de id, la zone est derivee de la marque de paquet nfmark. --zone {id|mark} Assigner ce paquet a la zone id et n'effectuer des recherches que dans cette zone. Si mark est specifie a la place de id, la zone est derivee de la marque de paquet nfmark. Par defaut les paquets ont pour zone 0. Cette option s'applique aux deux directions. --timeout nom Utiliser la politique de delai d'expiration identifiee par nom pour la connexion. Cette option permet une definition plus souple de la politique de delai d'expiration que les valeurs de delai d'expiration global disponibles dans /proc/sys/net/netfilter/nf_conntrack_*_timeout_*. DNAT Cette action ne peut etre utilisee que dans la table nat, dans les chaines PREROUTING et OUTPUT, et dans les chaines definies par l'utilisateur qui sont appelees depuis ces chaines. Elle indique que l'adresse de destination du paquet doit etre modifiee (et que tous les paquets ulterieurs de cette connexion seront aussi modifies), et que l'examen des regles doit cesser. Elle accepte les options suivantes : --to-destination [adr_ip[-adr_ip]][:port[-port[/port_de_base]]] Cette option permet de specifier une adresse IP de destination seule ou une plage inclusive d'adresses IP. Il est possible d'indiquer une plage de ports si la regle specifie aussi un des protocoles suivants : tcp, udp, dccp ou sctp. Si aucune plage de ports n'est specifiee, le port de destination ne sera jamais modifie. Si aucune adresse IP n'est specifiee, seul le port de destination sera modifie. Si port_de_base est specifie, la difference entre le port de destination d'origine et sa valeur sera utilisee comme decalage dans la plage de ports de redirection, ce qui permet de creer des plages de redirection de ports decales (disponible depuis la version 4.18 du noyau). Pour un seul port ou un port_de_base, il est possible d'utiliser un nom de service tel que ceux du fichier /etc/services. --random Rendre aleatoire la redirection du port source (noyaux >= 2.6.22). --persistent Attribuer a un client les memes adresses source et destination pour chaque connexion. Cette option l'emporte sur l'action SAME. La redirection persistante est prise en charge depuis la version 2.6.29-rc2. IPv6 est pris en charge depuis la version 3.7 du noyau Linux. DNPT (specifique a IPv6) Cette action permet d'effectuer une translation IPv6 a IPv6 sans conservation d'etat (stateless) du prefixe reseau de destination (comme decrit dans la RFC 6296). Vous devez utiliser cette action dans la table mangle, pas dans la table nat. Elle accepte les options suivantes : --src-pfx [prefixe/taille] Definir le prefixe source que vous voulez traduire, ainsi que sa taille. --dst-pfx [prefixe/taille] Definir le prefixe de destination que vous voulez utiliser dans la traduction, ainsi que sa taille. Pour annuler la traduction, vous devez utiliser l'action SNPT. Exemple : ip6tables -t mangle -I POSTROUTING -s fd00::/64 -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64 ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64 Vous devrez peut-etre activer le mandataire d'hotes voisins IPv6 : sysctl -w net.ipv6.conf.all.proxy_ndp=1 Vous devez aussi utiliser l'action NOTRACK pour desactiver le tracage de connexion pour les flux traduits. DSCP Cette action modifie la valeur des bits DSCP (Differentiated Services Code Point -- valeur de code des services differencies) au sein de l'en-tete TOS (Type of Service -- type de service) du paquet IPv4. Comme elle manipule un paquet, elle ne peut etre utilisee que dans la table mangle. --set-dscp valeur Affecter une valeur numerique au champ DSCP (en decimal ou hexadecimal). --set-dscp-class classe Affecter une classe de DiffServ (Differentiated Services) au champ DSCP. ECN (specifique a IPv4) Cette action contourne de maniere selective les trous noirs ECN (Explicit Congestion Notification -- notification explicite de congestion) connus. Elle ne peut etre utilisee que dans la table mangle. --ecn-tcp-remove Supprimer tous les bits ECN de l'en-tete TCP. Bien entendu, cette option ne peut etre utilisee qu'en combinaison avec -p tcp. HL (specifique a IPv6) Cette action permet de modifier le champ << Hop Limit >> de l'en-tete IPv6. Le champ << Hop Limit >> est similaire a la valeur de TTL (Time To Live -- duree de vie) en IPv4. Definir ou incrementer la valeur du champ << Hop Limit >> peut s'averer tres dangereux et il faut par consequent eviter de le faire a tout prix. Cette action ne peut etre utilisee que dans la table mangle. Ne definissez ou incrementez jamais cette valeur pour les paquets qui quittent votre reseau local ! --hl-set valeur Definir << Hop Limit >> a valeur. --hl-dec valeur Decrementer << Hop Limit >> un nombre de fois egal a valeur. --hl-inc valeur Incrementer << Hop Limit >> un nombre de fois egal a valeur. HMARK Cette action est similaire a MARK, c'est-a-dire qu'elle definit la marque fwmark (marque de pare-feu), mais que cette derniere est calculee en hachant le selecteur de paquet choisi. Vous devez aussi specifier la plage de marquage et eventuellement le decalage a partir duquel demarrer. Les messages d'erreur ICMP (Internet Control Message Protocol -- Protocole de message de controle sur Internet) sont inspectes et utilises pour calculer le hachage. Les options disponibles sont : --hmark-tuple tuple Les membres du tuple possibles sont : src pour adresse source (adresses IPv4 ou IPv6), dst pour adresse de destination (adresses IPv4 ou IPv6), sport pour port source (TCP, UDP, UDPlite, SCTP, DCCP), dport pour port de destination (TCP, UDP, UDPlite, SCTP, DCCP), spi pour << Security Parameter Index >> (AH, ESP) et ct pour utilisation du tuple conntrack a la place des selecteurs de paquet. --hmark-mod valeur (doit etre superieure a 0) Modulus pour le calcul du hachage (afin de limiter la plage de marques possibles). --hmark-offset valeur Decalage a partir duquel demarrer les marques. Pour une utilisation avancee, au lieu d'utiliser --hmark-tuple, vous pouvez specifier des prefixes et des masques personnalises : --hmark-src-prefix cidr Le masque d'adresse source en notation CIDR. --hmark-dst-prefix cidr Le masque d'adresse de destination en notation CIDR. --hmark-sport-mask valeur Un masque de port source sur 16 bits en hexadecimal. --hmark-dport-mask valeur Un masque de port de destination sur 16 bits en hexadecimal. --hmark-spi-mask valeur Un champ de 32 bits avec le masque spi. --hmark-proto-mask valeur Un champ sur 8 bits avec le numero du protocole de la couche 4. --hmark-rnd valeur Une valeur personnalisee quelconque sur 32 bits pour amorcer le calcul du hachage. Exemples : iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -j HMARK --hmark-tuple ct,src,dst,proto --hmark-offset 10000 --hmark-mod 10 --hmark-rnd 0xcafedeca iptables -t mangle -A PREROUTING -j HMARK --hmark-offset 10000 --hmark-tuple src,dst,proto --hmark-mod 10 --hmark-rnd 0xfadeface IDLETIMER Cette action permet de detecter le moment ou des interfaces sont inactives depuis un certain temps. Les minuteurs sont identifies par des etiquettes et sont crees lorsqu'une regle est definie avec une nouvelle etiquette. Les regles acceptent aussi une valeur de delai (en secondes) en tant qu'option. Si plusieurs regles utilisent la meme etiquette de minuteur, ce dernier sera redemarre chaque fois qu'une de ces regles s'applique a un paquet. Une entree est creee pour chaque minuteur dans sysfs(5). Cet attribut contient le temps restant avant expiration du minuteur. Les attributs sont situes sous la classe xt_idletimer : /sys/class/xt_idletimer/timers/<etiquette> Lorsque le minuteur arrive a expiration, le module de l'action envoie une notification sysfs(5) vers l'espace utilisateur, ce dernier pouvant alors decider quoi faire (par exemple se deconnecter pour economiser de l'energie). --timeout valeur La valeur de delai en secondes apres laquelle la notification sera envoyee. --label chaine Un identifiant unique pour chaque minuteur. La taille maximale de la chaine est de 27 caracteres. LED Cette action permet de creer un declencheur de LED (Light-Emitting Diode -- diode electroluminescente) qui peut alors etre relie aux voyants de l'indicateur du systeme en les allumant ou les faisant clignoter lorsque certains paquets traversent le systeme. Par exemple, une LED pourrait s'allumer pendant quelques minutes chaque fois qu'une connexion SSH est etablie avec la machine locale. Le comportement du declencheur peut etre controle a l'aide des options suivantes : --led-trigger-id nom Le nom donne au declencheur de LED. Le veritable nom du declencheur sera prefixe par << netfilter- >>. --led-delay ms Le temps (en millisecondes) pendant lequel la LED devra rester allumee lorsqu'un paquet arrive avant d'etre eteinte. La valeur par defaut est 0 (clignoter aussi vite que possible). Pour que la LED reste allumee en permanence une fois activee, utilisez la valeur speciale inf (dans ce cas, le declencheur devra etre detache et attache a nouveau manuellement au dispositif a LED pour eteindre cette derniere). --led-always-blink Toujours faire clignoter la LED a l'arrivee d'un paquet, meme si cette derniere est deja allumee. Cette option permet de notifier l'arrivee de nouveaux paquets, meme avec de grandes valeurs de delai (autrement, le delai serait simplement prolonge de maniere silencieuse). Exemple : Creer un declencheur de LED pour le trafic SSH entrant : iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh puis relier le nouveau declencheur a une LED : echo netfilter-ssh >/sys/class/leds/nom_led/trigger LOG Cette action permet d'activer la journalisation des paquets qui correspondent au niveau du noyau. Lorsqu'elle est utilisee dans une regle, le noyau Linux enregistre certaines informations a propos de tous les paquets qui correspondent (comme la plupart des champs d'en-tete IP/IPv6) dans le journal du noyau (d'ou elles peuvent etre consultees a l'aide de dmesg(1) ou lues dans le journal du systeme). Cette action est << non terminale >>, c'est-a-dire que le parcours des regles continue a la regle suivante. Ainsi, si vous voulez journaliser les paquets que vous refusez, utilisez deux regles separees avec les memes criteres de correspondance, la premiere utilisant l'action LOG et la seconde la cible DROP (ou REJECT). --log-level niveau Le niveau de journalisation qui peut etre un nombre (specifique au systeme) ou un mnemonique. Les valeurs possibles sont (dans l'ordre decroissant des priorites) : emerg, alert, crit, error, warning, notice, info ou debug. --log-prefix prefixe Faire debuter les messages de journalisation par le prefixe specifie (jusqu'a 29 lettres de long), ce qui permet de distinguer les messages dans les journaux. --log-tcp-sequence Journaliser les numeros de sequence TCP. Cette option induit un risque de securite si le journal est accessible en lecture pour les utilisateurs. --log-tcp-options Journaliser les options de l'en-tete du paquet TCP. --log-ip-options Journaliser les options de l'en-tete du paquet IP/IPv6. --log-uid Journaliser l'UID du processus qui a genere le paquet. --log-macdecode Journaliser les adresses MAC et le protocole. MARK Cette action permet de definir la valeur de la marque de Netfilter associee au paquet. Par exemple, vous pouvez l'utiliser conjointement avec un routage base sur la marque de pare-feu fwmark (necessite iproute2). Si vous envisagez de le faire, notez que pour affecter le routage, la marque doit etre definie soit dans la chaine PREROUTING, soit dans la chaine OUTPUT de la table mangle. La taille du champ de la marque est de 32 bits. --set-xmark valeur[/masque] Mettre a zero les bits donnes par masque et combiner valeur avec la marque de paquet (<< nfmark >>) a l'aide d'un XOR. Si masque est omis, sa valeur par defaut est 0xFFFFFFFF. --set-mark valeur[/masque] Mettre a zero les bits donnes par masque et combiner valeur avec la marque de paquet a l'aide d'un OU logique. Si masque est omis, sa valeur par defaut est 0xFFFFFFFF. Les mnemoniques suivants sont disponibles : --and-mark bits Combiner la nfmark avec bits a l'aide d'un ET logique (c'est le mnemonique pour --set-xmark 0/invbits ou invbits est la negation logique de bits). --or-mark bits Combiner la nfmark avec bits a l'aide d'un OU logique (c'est le mnemonique pour --set-xmark bits/bits). --xor-mark bits Combiner la nfmark avec bits a l'aide d'un XOR (c'est le mnemonique pour --set-xmark bits/0). MASQUERADE Cette action n'est valable que dans la table nat et la chaine POSTROUTING. Elle ne doit etre utilisee que pour les connexions avec adresse IP dynamiquement assignee (dialup -- acces commute) : si vous avez une adresse IP statique, vous devez utiliser l'action SNAT. La << mascarade >> (masquerading) consiste a specifier une association avec l'adresse IP de l'interface par laquelle sort le paquet, mais a aussi pour effet d'oublier les connexions lorsque l'interface est desactivee. C'est un comportement approprie lorsque les acces commutes ulterieurs ont peu de chance d'avoir la meme adresse d'interface (et que les connexions etablies seront perdues de toute facon). --to-ports port[-port] Cette option permet de specifier une plage de ports source a utiliser, outrepassant les heuristiques de selection de port source de SNAT (voir ci-avant). Elle ne peut etre utilisee que si la regle specifie aussi un des protocoles suivants : tcp, udp, dccp ou sctp. --random Rendre aleatoire la redirection de port source (noyaux de version >= 2.6.21). A partir de la version 5.0 du noyau, --random est identique a --random-fully. --random-fully Rendre totalement aleatoire la redirection de port source (noyaux de version >= 3.13). IPv6 est pris en charge depuis la version 3.7 du noyau Linux. NETMAP Cette action permet de rediriger statiquement tout un reseau d'adresses vers un autre reseau d'adresses. Elle ne peut etre utilisee que dans les regles de la table nat. --to adresse[/masque] Cette option permet de specifier le reseau d'adresses de redirection. L'adresse resultante est construite de la maniere suivante : tous les bits a 1 du masque sont remplaces par ceux de l'adresse de redirection specifiee, et tous les bits a 0 du masque par ceux de l'adresse d'origine. IPv6 est pris en charge depuis la version 3.7 du noyau Linux. NFLOG Cette action permet la journalisation des paquets qui correspondent. Lorsqu'elle est utilisee dans une regle, le noyau Linux transmet le paquet au dorsal de journalisation charge pour le journaliser. Cette action est en general utilisee conjointement avec nfnetlink_log comme dorsal de journalisation, lequel diffusera (multicast) le paquet a l'aide d'un socket netlink vers le groupe de multidiffusion specifie. Un ou plusieurs processus de l'espace utilisateur peuvent souscrire au groupe afin de recevoir les paquets. Comme LOG, c'est une action << non terminale >>, c'est-a-dire que le parcours des regles continue a la regle suivante. --nflog-group groupe_netlink Cette option permet de specifier le groupe netlink (0 - 2^16-1) auquel les paquets sont envoyes (applicable seulement a nfnetlink_log). La valeur par defaut est 0. --nflog-prefix prefixe Cette option permet de specifier un prefixe, d'une longueur maximale de 64 caracteres, a ajouter au message de journalisation pour faciliter la discrimination des messages dans les journaux. --nflog-range taille Cette option n'ayant jamais fonctionne, utilisez --nflog-size a la place. --nflog-size taille Cette option permet de specifier le nombre d'octets qui doivent etre copies vers l'espace utilisateur (applicable seulement pour nfnetlink_log). Des instances de nfnetlink_log pouvant specifier leur propre plage, cette option outrepasse cette derniere. --nflog-threshold taille Cette option permet de specifier le nombre de paquets a mettre en file d'attente dans le noyau avant de les envoyer vers l'espace utilisateur (applicable seulement pour nfnetlink_log). Une valeur elevee diminue la surcharge par paquet, mais augmente le delai avec lequel les paquets atteignent l'espace utilisateur. La valeur par defaut est 1. NFQUEUE Cette action transmet le paquet a l'espace utilisateur en utilisant le gestionnaire nfnetlink_queue. Le paquet est place dans la file d'attente identifiee par son numero sur 16 bits. L'espace utilisateur peut inspecter et modifier le paquet s'il le souhaite ; il devra alors supprimer ou reinjecter le paquet dans le noyau. Voir libnetfilter_queue pour les details. nfnetlink_queue a ete ajoute a Linux a partir de la version 2.6.14, queue-balance a partir de la version 2.6.31 et queue-bypass a partir de la version 2.6.39. --queue-num valeur Cette option permet de specifier le numero de file d'attente a utiliser qui doit etre compris entre 0 et 65535 inclus. La valeur par defaut est 0. --queue-balance valeur:valeur Cette option permet de specifier une plage de numeros de file d'attente a utiliser. Les paquets seront alors repartis entre ces dernieres. Cette option s'avere utile pour les systemes multicoeurs : lancer plusieurs instances du programme en espace utilisateur associes aux files d'attente x, x+1, ... x+n et utiliser << --queue-balance x:x+n >>. Les paquets appartenant a une meme connexion sont places dans la meme file d'attente de netfilter (nfqueue). A cause de certains details de l'implementation, une valeur de borne inferieure de la plage egale a 0 limite la valeur de la borne superieure a 65534, c'est-a-dire que le nombre de files d'attente entre lesquelles les paquets pourront etre repartis est de 65535. --queue-bypass Par defaut, si aucun programme de l'espace utilisateur n'est associe a une file d'attente de netfilter, tous les paquets qui doivent etre mis en file d'attente sont supprimes. Lorsque cette option est utilisee, la regle contenant l'action NFQUEUE se comportera comme la cible ACCEPT, et le paquet sera envoye a la table suivante. --queue-cpu-fanout Cette option est disponible a partir de la version 3.10 du noyau Linux. Lorsqu'elle est specifiee conjointement avec l'option --queue-balance, elle utilise l'identifiant de processeur comme un index pour associer les paquets a une file d'attente. Elle est concue sur l'idee selon laquelle on peut ameliorer les performances s'il y a une file d'attente par processeur. Vous devez specifier l'option --queue-balance pour pouvoir utiliser cette option. NOTRACK Cette action permet de desactiver le tracage des connexions pour tous les paquets qui correspondent a la regle actuelle. Elle est equivalente a << -j CT --notrack >>. Comme CT, NOTRACK ne peut etre utilisee que dans la table raw. RATEEST Cette action collecte des statistiques, effectue des estimations de debit et sauvegarde les resultats pour une evaluation ulterieure a l'aide du module rateest. --rateest-name nom Cette option permet d'enregistrer le decompte des paquets qui correspondent dans l'ensemble specifie par nom, ce dernier pouvant etre choisi arbitrairement. --rateest-interval quantite{s|ms|<micro>s} Cette option permet de specifier un intervalle de mesure de debit en secondes, millisecondes ou microsecondes. --rateest-ewmalog valeur Cette option permet de specifier avec quelle periode doit etre effectue le calcul de la moyenne de la mesure du debit. REDIRECT Cette action ne peut etre utilisee que dans les chaines PREROUTING et OUTPUT de la table nat, et dans les chaines definies par l'utilisateur qui ne sont appelees que depuis ces chaines. Elle redirige le paquet vers la machine elle-meme en remplacant l'adresse IP de destination par l'adresse primaire de l'interface d'entree (les paquets generes localement sont associes a l'adresse << localhost >>, 127.0.0.1 pour IPv4 et ::1 pour IPv6, et les paquets arrivant sur une interface qui n'ont pas d'adresse IP configuree sont supprimes). --to-ports port[-port] Cette option permet de specifier un port ou une plage de ports de destination a utiliser : sans cela, le port de destination ne sera jamais modifie. Elle ne peut etre utilisee que si la regle specifie aussi un des protocoles suivants : tcp, udp, dccp ou sctp. Pour un port unique, il est aussi possible de specifier un nom de service parmi ceux listes dans /etc/services. --random Rendre aleatoire la redirection du port source (noyaux >= 2.6.22). IPv6 est pris en charge a partir de la version 3.7 des noyaux Linux. REJECT (specifique a IPv6) Cette action permet de renvoyer un paquet d'erreur en reponse a un paquet qui correspondait a la regle ; cela mis a part, elle est equivalente a DROP ; il s'agit donc d'une action terminale qui interrompt le parcours des regles. Elle ne peut etre utilisee que dans les chaines INPUT, FORWARD et OUTPUT, et dans les chaines definies par l'utilisateur qui ne sont appelees que depuis ces chaines. Les options suivantes permettent de controler la nature du paquet d'erreur renvoye : --reject-with type Le type specifie peut etre icmp6-no-route, no-route, icmp6-adm-prohibited, adm-prohibited, icmp6-addr-unreachable, addr-unreach ou icmp6-port-unreachable qui renvoie le message d'erreur ICMPv6 approprie (la valeur par defaut est icmp6-port-unreachable). L'option tcp-reset peut etre utilisee dans les regles qui ne concernent que le protocole TCP : elle renvoie un paquet TCP RST. Cette option s'avere particulierement utile pour bloquer les tentatives ident (113/tcp) qui surviennent frequemment lors d'envois de courriels a des serveurs de messagerie defectueux (qui autrement n'accepteront pas votre courrier). tcp-reset ne peut etre utilisee que depuis la version 2.6.14 du noyau. Avertissement : vous ne devez pas appliquer sans discrimination l'action REJECT aux paquets dont l'etat de connexion est considere INVALID ; vous devez plutot les supprimer a l'aide de la cible DROP. Imaginez un hote source transmettant un paquet P, ce dernier subissant un retard de transmission si important que l'hote source effectue une retransmission sous la forme du paquet P_2, ce dernier atteignant sa destination avec succes et faisant progresser l'etat de connexion normalement. Il est concevable que le paquet P arrivant en retard soit considere comme non associe a une entree de tracage de connexion. Generer une reponse REJECT pour un tel paquet mettrait alors fin a la connexion saine. Donc, au lieu de : -A INPUT ... -j REJECT utilisez plutot : -A INPUT ... -m conntrack --ctstate INVALID -j DROP -A INPUT ... -j REJECT REJECT (specifique a IPv4) Cette action permet de renvoyer un paquet d'erreur en reponse a un paquet qui correspondait a la regle ; cela mis a part, elle est equivalente a DROP ; il s'agit donc d'une action terminale qui interrompt le parcours des regles. Elle ne peut etre utilisee que dans les chaines INPUT, FORWARD et OUTPUT, et dans les chaines definies par l'utilisateur qui ne sont appelees que depuis ces chaines. Les options suivantes permettent de controler la nature du paquet d'erreur renvoye : --reject-with type Le type specifie peut etre icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited ou icmp-admin-prohibited (*) qui renvoie le message d'erreur ICMP approprie (la valeur par defaut est icmp-port-unreachable). L'option tcp-reset peut etre utilisee dans les regles qui ne concernent que le protocole TCP : elle renvoie un paquet TCP RST. Cette option s'avere particulierement utile pour bloquer les tentatives ident (113/tcp) qui surviennent frequemment lors d'envois de courriels a des serveurs de messagerie defectueux (qui autrement n'accepteront pas votre courrier). (*) Utiliser icmp-admin-prohibited avec des noyaux qui ne le prennent pas en charge entrainera l'envoi vers la cible DROP au lieu de l'application de l'action REJECT. Avertissement : vous ne devez pas appliquer sans discrimination l'action REJECT aux paquets dont l'etat de connexion est considere INVALID ; vous devez plutot les supprimer a l'aide de la cible DROP. Imaginez un hote source transmettant un paquet P, ce dernier subissant un retard de transmission si important que l'hote source effectue une retransmission sous la forme du paquet P_2, ce dernier atteignant sa destination avec succes et faisant progresser l'etat de connexion normalement. Il est concevable que le paquet P arrivant en retard soit considere comme non associe a une entree de tracage de connexion. Generer une reponse REJECT pour un tel paquet mettrait alors fin a la connexion saine. Donc, au lieu de : -A INPUT ... -j REJECT utilisez plutot : -A INPUT ... -m conntrack --ctstate INVALID -j DROP -A INPUT ... -j REJECT SECMARK Ce module permet de definir la valeur de la marque de securite associee au paquet et destinee a etre utilisee par les sous-systemes de securite tels que SELinux. Il peut etre utilise dans la table security (ainsi que dans la table mangle a des fins de retrocompatibilite avec les noyaux plus anciens). La taille de la marque est de 32 bits. --selctx contexte_securite SET Ce module permet d'ajouter et/ou supprimer des entrees dans les ensembles d'adresses IP definis a l'aide d'ipset(8). --add-set nom_ensemble drapeau[,drapeau...] Cette option permet d'ajouter la(les) adresse(s)/port(s) du paquet a l'ensemble specifie. --del-set nom_ensemble drapeau[,drapeau...] Cette option permet de supprimer la(les) adresse(s)/port(s) du paquet de l'ensemble specifie. --map-set nom_ensemble drapeau[,drapeau...] [--map-mark] [--map-prio] [--map-queue] mappent les proprietes du paquet (marquage pare-feu, priorite tc (traffic control -- controle de trafic), file d'attente materiel) ou les drapeau(x), dont le nombre est limite a 6, sont des specifications src et/ou dst. --timeout valeur Lors de l'ajout d'une entree, cette option permet de definir la valeur du delai d'expiration a utiliser a la place de la valeur par defaut definie pour l'ensemble. --exist Lors de l'ajout d'une entree, si elle existe deja, cette option permet de reinitialiser la valeur du delai d'expiration a la valeur specifiee ou, a defaut, a celle definie pour l'ensemble. --map-set nom_ensemble nom_ensemble doit etre cree a l'aide de l'option --skbinfo. --map-mark mappe la marque de pare-feu avec le paquet en en recherchant la valeur dans l'ensemble. --map-prio mappe la priorite du controle de trafic avec le paquet en en recherchant la valeur dans l'ensemble. --map-queue mappe la file d'attente materiel de la NIC (Network Interface Card -- carte reseau) en en recherchant la valeur dans l'ensemble. L'option --map-set ne peut etre utilisee que dans la table mangle. Les options --map-prio et --map-queue peuvent etre utilisees dans les chaines OUTPUT, FORWARD et POSTROUTING. L'utilisation de << -j SET >> necessite la prise en charge d'ipset par le noyau, ce qui est le cas, pour les noyaux standards, a partir de Linux 2.6.39. SNAT Cette action ne peut etre utilisee que dans les chaines POSTROUTING et INPUT de la table nat, et dans les chaines definies par l'utilisateur qui ne sont appelees que depuis ces chaines. Elle indique que l'adresse source du paquet (ainsi que celle de tous les paquets ulterieurs de cette connexion) doit etre modifiee et que le parcours des regles doit cesser. Elle accepte les options suivantes : --to-source [adr_ip[-adr_ip]][:port[-port]] Cette option permet de specifier une seule nouvelle adresse IP source ou une plage inclusive d'adresses IP, et eventuellement une plage de ports, si la regle specifie aussi un des protocoles suivants : tcp, udp, dccp ou sctp. Si aucune plage de ports n'est specifiee, les ports source de numero inferieur a 512 seront rediriges vers d'autres ports de numero inferieur a 512, ceux dont les numeros sont compris entre 512 et 1023 inclus seront rediriges vers d'autres ports de numero inferieur a 1024 et les autres ports seront rediriges vers d'autres ports de numero superieur ou egal a 1024. Lorsque c'est possible, aucune modification de port n'est effectuee. --random Rendre aleatoire la redirection du port source grace a un algorithme base sur le hachage (noyaux de version >= 2.6.21). --random-fully Rendre totalement aleatoire la redirection du port source grace a un PRNG (Pseudorandom Number Generator -- generateur de nombres pseudo-aleatoires) ; disponible a partir de la version 3.14 du noyau. --persistent Attribuer a un client les memes adresses source et destination pour chaque connexion. Cette option l'emporte sur l'action SAME. La redirection persistante est prise en charge depuis la version 2.6.29-rc2. Les noyaux de version anterieure a 2.6.36-rc1 ne prennent pas en charge l'action SNAT dans la chaine INPUT. IPv6 est pris en charge depuis la version 3.7 du noyau Linux. SNPT (specifique a IPv6) Cette action permet d'effectuer une translation NPTv6 (IPv6 a IPv6 Network Prefix Translation) sans conservation d'etat (stateless) du prefixe reseau source (comme decrit dans la RFC 6296). Vous devez utiliser cette action dans la table mangle, pas dans la table nat. Elle accepte les options suivantes : --src-pfx [prefixe/taille] Definir le prefixe source que vous voulez traduire, ainsi que sa taille. --dst-pfx [prefixe/taille] Definir le prefixe de destination que vous voulez utiliser dans la traduction, ainsi que sa taille. Pour annuler la translation, vous devez utiliser l'action DNPT. Exemple : ip6tables -t mangle -I POSTROUTING -s fd00::/64 -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64 ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64 Vous devrez peut-etre activer le mandataire d'hotes voisins IPv6 : sysctl -w net.ipv6.conf.all.proxy_ndp=1 Vous devez aussi utiliser l'action NOTRACK pour desactiver le tracage de connexion pour les flux traduits. SYNPROXY Cette action permet de traiter la poignee de main TCP en trois temps (TCP three-way-handshake) en parallele dans le contexte netfilter pour proteger le systeme de la machine locale ou du dorsal. Elle necessite le tracage de connexion, car les numeros de sequence doivent etre traduits. La capacite des noyaux a absorber les attaques SYNFLOOD ayant ete considerablement amelioree avec la version 4.4, cette action ne devrait plus etre necessaire pour proteger les serveurs Linux. --mss taille_maximale_segment Cette option permet de definir la taille maximale de segment indiquee aux clients. Elle doit etre identique a celle du dorsal. --wscale redimensionnement_fenetre Facteur de multiplication de la fenetre de reception indique aux clients. Il doit etre identique a celui du dorsal. --sack-perm Transmission de l'option d'acquittement selectif du client au dorsal (sera desactivee si non presente). --timestamps Transmission de l'option d'horodatage du client au dorsal (sera desactivee si non presente, aussi necessaire pour l'acquittement selectif et le redimensionnement de fenetre). Exemple : Determiner les options tcp utilisees par le dorsal a partir d'un systeme externe. tcpdump -pni eth0 -c 1 'tcp[tcpflags] == (tcp-syn|tcp-ack)' port 80 & telnet 192.0.2.42 80 18:57:24.693307 IP 192.0.2.42.80 > 192.0.2.43.48757: Flags [S.], seq 360414582, ack 788841994, win 14480, options [mss 1460,sackOK, TS val 1409056151 ecr 9690221, nop,wscale 9], length 0 Mettre le mode tcp_loose a off de facon que le tracage de connexion marque les paquets hors flux comme << INVALID >>. echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose Faire que les paquets SYN ne soient pas traces. iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80 --syn -j CT --notrack Intercepter les etats << UNTRACKED >> (paquets SYN) et << INVALID >> (paquets ACK de la poignee de main en trois temps) et les soumettre a l'action SYNPROXY. Cette regle repondra aux paquets SYN avec des syncookies SYN+ACK, creera une connexion ESTABLISHED pour une reponse client valable (paquets ACK de la poignee de main en trois temps) et supprimera les cookies incorrects. Les combinaisons de drapeaux inattendues (par exemple SYN+FIN, SYN+ACK) au cours de la poignee de main en trois temps ne correspondront pas et le parcours des regles continuera. iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state UNTRACKED,INVALID -j SYNPROXY --sack-perm --timestamp --mss 1460 --wscale 9 Supprimer les paquets non valables, c'est-a-dire les paquets hors flux qui n'ont pas ete soumis a l'action SYNPROXY. iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state INVALID -j DROP TCPMSS Cette action modifie la valeur de MSS (Maximum Segment Size -- taille maximale de segment) des paquets TCP SYN pour controler la taille maximale pour cette connexion (en general en la limitant au MTU (Maximum Transmission Unit -- unite de transmission maximale) de votre interface de sortie moins 40 pour IPv4 ou moins 60 pour IPv6). Bien entendu, elle ne peut etre utilisee que conjointement avec l'option -p tcp. Cette action permet de contourner les FAI ou serveurs en etat de mort cerebrale manifeste qui bloquent les paquets consideres comme << necessitant une fragmentation ICMP >> ou comme << paquets ICMPv6 trop gros >>. Les symptomes de ce probleme se manifestent par le fait que, bien que tout semble fonctionner correctement depuis votre pare-feu ou routeur Linux, les machines situees derriere ces derniers ne peuvent jamais echanger de gros paquets : 1. Les navigateurs internet se connectent puis se bloquent sans reception de donnees. 2. Les petits courriels sont envoyes, mais les gros bloquent. 3. ssh fonctionne correctement, mais scp bloque apres la poignee de main initiale. Solution : activer cette option et ajouter a la configuration de votre pare-feu une regle du style : iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu --set-mss valeur Cette option permet de definir explicitement la MSS a la valeur specifiee. Si la MSS du paquet est deja inferieure a valeur, elle ne sera pas augmentee (a partir de Linux 2.6.25) pour eviter des problemes avec les hotes qui fonctionnent avec une MSS particuliere. --clamp-mss-to-pmtu Cette option permet de fixer automatiquement la valeur de MSS a << path_MTU - 40 >> pour IPv4 et a << path_MTU - 60 >> pour IPv6 (NDT : le path_MTU est la plus petite unite de transmission maximale rencontree sur le chemin reseau). Elle peut ne pas fonctionner comme souhaite lorsque des routes asymetriques avec des path_MTU differents existent -- le noyau utilise le path_MTU qu'il utiliserait pour envoyer des paquets depuis lui-meme vers les adresses IP source et de destination. Avant Linux 2.6.25, seul le path_MTU vers l'adresse IP de destination etait considere par cette option ; les noyaux ulterieurs considerent aussi le path_MTU vers l'adresse IP source. Ces options sont mutuellement exclusives. TCPOPTSTRIP Cette action permet de supprimer les options TCP d'un paquet TCP (en fait, elle les remplace par des options vides -- NO-OP). Pour qu'elle fonctionne, vous devez ajouter l'option -p tcp. --strip-options option[,option...] Cette option permet de supprimer les options specifiees. Ces dernieres peuvent etre specifiees a l'aide de leur numero d'option TCP ou de leur nom symbolique. La liste des options reconnues peut etre obtenue en appelant iptables avec -j TCPOPTSTRIP -h. TEE Cette action permet de cloner un paquet et de rediriger ce clone vers une autre machine sur le segment reseau local. En d'autres termes, le prochain saut doit etre la cible, ou vous devrez configurer le prochain saut pour rediriger le clone plus loin si vous le souhaitez. --gateway adr_ip Cette option permet d'envoyer le paquet clone a l'hote pouvant etre atteint a l'adresse IP specifiee. Utiliser 0.0.0.0 (pour les paquets IPv4) ou :: (pour les paquets IPv6) n'est pas valable. Pour rediriger tout le trafic entrant sur eth0 vers une machine de journalisation de la couche reseau : -t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1 TOS Cette action permet de definir le champ << Type of Service >> de l'en-tete IPv4 (y compris les bits de priorite) ou le champ << Priority >> de l'en-tete IPv6. Notez que TOS partage les memes bits que DSCP et ECN. L'action TOS ne peut etre utilisee que dans la table mangle. --set-tos valeur[/masque] Mettre a zero les bits specifies par masque (voir NOTE ci-apres) et combiner valeur et le champ TOS/Priority avec un XOR. Si masque est omis, sa valeur par defaut est 0xFF. --set-tos symbole Vous pouvez utiliser un nom symbolique lors de l'utilisation de l'action TOS pour IPv4. Un masque de 0xFF sera alors implicite (voir NOTE ci-apres). La liste des noms de TOS valables peut etre obtenue en appelant iptables avec << -j TOS -h >>. Les mnemoniques suivants sont disponibles : --and-tos bits Combiner la valeur de TOS et bits a l'aide d'un ET logique (mnemonique pour << --set-tos 0/invbits >> ou invbits est la negation binaire de bits, voir NOTE ci-apres). --or-tos bits Combiner la valeur de TOS et bits a l'aide d'un OU logique (mnemonique pour << --set-tos bits/bits >>, voir NOTE ci-apres). --xor-tos bits Combiner la valeur de TOS et bits a l'aide d'un XOR (mnemonique pour << --set-tos bits/0 >>, voir NOTE ci-apres). NOTE : avec les noyaux jusqu'a la version 2.6.38, a l'exception des versions a long terme 2.6.32 (>=.42), 2.6.33 (>=.15) et 2.6.35 (>=.14), un bogue fait que la manipulation du champ TOS en IPv6 se comporte differemment de ce qui est documente et differe de la version IPv4. Le masque TOS indique les bits que l'on veut mettre a zero ; il doit donc etre inverse avant d'etre applique au champ TOS d'origine. Cependant, les noyaux mentionnes ci-avant n'effectuent pas cette inversion, ce qui entraine un fonctionnement defectueux de l'option --set-tos et de ses mnemoniques. TPROXY Cette action ne peut etre utilisee que dans la table mangle, dans la chaine PREROUTING et les chaines definies par l'utilisateur qui ne sont appelees que depuis cette chaine. Elle redirige le paquet vers un socket local sans modifier l'en-tete de paquet de quelque facon que ce soit. Elle peut aussi modifier la valeur de marquage qui pourra alors etre utilisee dans des regles de routage avancees. Elle accepte trois options : --on-port port Cette option permet de specifier le port de destination a utiliser. Elle est obligatoire, 0 signifiant que le nouveau port de destination est le meme que le port d'origine. Elle n'est valable que si la regle specifie aussi -p tcp ou -p udp. --on-ip adresse Cette option permet de specifier l'adresse de destination a utiliser. Par defaut, il s'agit de l'adresse de l'interface entrante. Elle n'est valable que si la regle specifie aussi -p tcp ou -p udp. --tproxy-mark valeur[/masque] Cette option permet de marquer les paquets avec la paire valeur/masque specifiee. La valeur de la marque de pare-feu (fwmark) definie ici peut etre utilisee pour le routage avance (cette option est necessaire pour utiliser un mandataire transparent (transparent proxying) : si elle n'est pas presente, ces paquets seront rediriges, ce qui ne correspond probablement pas a ce vous souhaitez). TRACE Cette action marque les paquets de facon que le noyau journalise chaque regle qui correspond aux paquets lorsque ces derniers traversent les tables, chaines ou regles. Elle ne peut etre utilisee que dans la table raw. Avec iptables-legacy, un dorsal de journalisation comme ip(6)t_LOG ou nfnetlink_log doit etre charge pour que cela soit visible. Les paquets sont journalises avec le prefixe << TRACE: nom_table:nom_chaine:type:numero_regle >> ou type peut avoir pour valeur << rule >> pour une regle a part entiere, << return >> pour une regle implicite a la fin d'une chaine definie par l'utilisateur ou << policy >> pour la politique des chaines integrees. Avec iptables-nft, l'action est traduite en une expression meta nftrace de nftables. Ainsi le noyau envoie les evenements de tracage a l'aide de netlink vers l'espace utilisateur ou ils peuvent etre affiches en utilisant la commande xtables-monitor --trace. Pour les details, veuillez consulter xtables-monitor(8). TTL (specifique a IPv4) Cette action permet de modifier le champ d'en-tete IPv4 TTL. Le champ TTL determine le nombre de sauts (routeurs) qu'un paquet peut traverser avant que sa duree de vie soit depassee. Definir ou augmenter la valeur du champ TTL peut s'averer tres dangereux et il faut donc a tout prix eviter de le faire. Cette action ne peut etre utilisee que dans la table mangle. Ne definissez ou incrementez jamais cette valeur pour les paquets qui quittent votre reseau local ! --ttl-set valeur Cette option permet de definir la valeur du champ TTL a valeur. --ttl-dec n Cette option permet de decrementer la valeur du champ TTL n fois. --ttl-inc n Cette option permet d'incrementer la valeur du champ TTL n fois. ULOG (specifique a IPv4) Cette action est le predecesseur obsolete specifique a IPv4 de l'action NFLOG. Elle permet de journaliser les paquets qui correspondent dans l'espace utilisateur. Lorsque cette action est definie pour une regle, le noyau Linux multidiffuse les paquets a l'aide d'un socket netlink. Un ou plusieurs processus de l'espace utilisateur peuvent alors s'abonner a differents groupes de multidiffusion et recevoir les paquets. Comme LOG, c'est une action << non terminale >>, c'est-a-dire que le parcours des regles continue a la regle suivante. --ulog-nlgroup groupe_netlink Cette option permet de specifier le groupe netlink (1-32) auquel est envoye le paquet. La valeur par defaut est 1. --ulog-prefix prefixe Cette option permet de specifier le prefixe a ajouter aux messages de journalisation ; d'une taille maximale de 32 caracteres, il permet de distinguer les messages dans les journaux. --ulog-cprange n Cette option permet de specifier le nombre d'octets a copier vers l'espace utilisateur. Une valeur de 0 (la valeur par defaut) signifie que le paquet doit etre copie dans sa totalite sans tenir compte de sa taille. --ulog-qthreshold n Cette option permet de specifier le nombre de paquets a mettre en file d'attente dans le noyau. Definir cette valeur a 10, par exemple, stocke dix paquets dans le noyau et les transmet a l'espace utilisateur en un seul message netlink en plusieurs parties (multipart). La valeur par defaut est 1 (a des fins de retrocompatibilite). TRADUCTION La traduction francaise de cette page de manuel a ete creee par Lucien Gentis <lucien.gentis@univ-lorraine.fr> Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 <https://www.gnu.org/licenses/gpl-3.0.html> 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 <debian-l10n-french@lists.debian.org>. iptables 1.8.10 iptables-extensions(8)