Man page - iptables-extensions(8)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

iptables-extensions

NOM
SYNOPSIS
EXTENSIONS DE COMPARAISON
addrtype
ah (spécifique à IPv6)
ah (spécifique à IPv4)
bpf
cgroup
cluster
comment
connbytes
connlabel
connlimit
connmark
conntrack
cpu
dccp
devgroup
dscp
dst (spécifique à IPv6)
ecn
esp
eui64 (Extended Unique Identifier — identifiant unique Ă©tendu) ; spĂ©cifiqueĂ  IPv6.
frag (spécifique à IPv6)
hashlimit
hbh (spécifique à IPv6)
helper
hl (spécifique à IPv6)
icmp (spécifique à IPv4)
icmp6 (spécifique à IPv6)
iprange
ipv6header (spécifique à IPv6)
ipvs
length
limit
mac
mark
mh (spécifique à IPv6)
multiport
nfacct
osf
owner
physdev
pkttype
policy
quota
rateest
realm (spécifique à IPv4)
recent
rpfilter
rt (spécifique à IPv6)
sctp
set
socket
état
statistic
string
tcp
tcpmss
time
tos
ttl (spécifique à IPv4)
u32
udp
ACTIONS ÉTENDUES
AUDIT
CHECKSUM
CLASSIFY
CLUSTERIP (spécifique à IPv4)
CONNMARK
CONNSECMARK
CT
DNAT
DNPT (spécifique à IPv6)
DSCP
ECN (spécifique à IPv4)
HL (spécifique à IPv6)
HMARK
IDLETIMER
LED
LOG
MARK
MASQUERADE
NETMAP
NFLOG
NFQUEUE
NOTRACK
RATEEST
REDIRECT
REJECT (spécifique à IPv6)
REJECT (spécifique à IPv4)
SECMARK
SET
SNAT
SNPT (spécifique à IPv6)
SYNPROXY
TCPMSS
TCPOPTSTRIP
TEE
TOS
TPROXY
TRACE
TTL (spécifique à IPv4)
ULOG (spécifique à IPv4)
TRADUCTION

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 Ă©tendue de paquets Ă  l’aide des options -m ou --match suivies du nom du module de comparaison ; diffĂ©rentes options de ligne de commande complĂ©mentaires sont alors disponibles en fonction du module spĂ©cifique. Vous pouvez spĂ©cifier plusieurs modules de comparaison Ă©tendue sur une seule ligne, et vous pouvez utiliser l’options -h ou --help , une fois le module spĂ©cifiĂ©, afin d’obtenir une aide spĂ©cifique Ă  ce dernier. Les modules de comparaison Ă©tendue sont pris en compte dans l’ordre selon lequel ils sont spĂ©cifiĂ©s dans la rĂšgle.

Si l’option -p ou --protocol a Ă©tĂ© spĂ©cifiĂ©e et si et seulement si une option inconnue est rencontrĂ©e, iptables va essayer de charger un module de comparaison de mĂȘme nom que celui du protocole pour tenter de rendre l’option disponible.

addrtype

Ce module vĂ©rifie la correspondance des paquets en fonction de leur type d’adresse . Les types d’adresse sont utilisĂ©s dans la pile rĂ©seau du noyau et classent les adresses en plusieurs groupes. La dĂ©finition exacte de ces groupes dĂ©pend du protocole spĂ©cifique de couche trois.

Les types d’adresse valables sont les suivants :

UNSPEC

une adresse non spécifiée (par exemple 0.0.0.0)

UNICAST

une adresse unicast (connexion point-Ă -point)

LOCAL

une adresse locale

BROADCAST

une adresse de broadcast (diffusion générale)

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

VĂ©rifier si l’adresse source est du type donnĂ©

[ ! ] --dst-type type

VĂ©rifier si l’adresse de destination est du type donnĂ©

--limit-iface-in

La vĂ©rification du type d’adresse peut ĂȘtre limitĂ©e Ă  l’interface par laquelle entre le paquet. Cette option n’est valable que dans les chaĂźnes PREROUTING , INPUT et FORWARD . Elle ne peut pas ĂȘtre spĂ©cifiĂ©e en combinaison avec l’option --limit-iface-out .

--limit-iface-out

La vĂ©rification du type d’adresse peut ĂȘtre limitĂ©e Ă  l’interface par laquelle sort le paquet. Cette option n’est valable que dans les chaĂźnes POSTROUTING , OUTPUT et FORWARD . Elle ne peut pas ĂȘtre spĂ©cifiĂ©e en combinaison avec l’option --limit-iface-in .

ah (spécifique à IPv6)

Ce module vĂ©rifie la correspondance des paramĂštres dans l’en-tĂȘte Authentication des paquets IPsec.
[ ! ] --ahspi spi [ : spi ]

VĂ©rifier la correspondance des SPI (Security Parameters Index — Index des ParamĂštres de SĂ©curitĂ©).

[ ! ] --ahlen taille

Taille totale de cet en-tĂȘte en octets.

--ahres

Correspondance si le champ réservé est rempli avec des zéros.

ah (spécifique à IPv4)

Ce module vĂ©rifie la correspondance des SPI (Security Parameters Index — Index des ParamĂštres de SĂ©curitĂ©) dans l’en-tĂȘte Authentication des paquets IPsec.
[ ! ] --ahspi spi [ : spi ]

bpf

VĂ©rifier les correspondances en utilisant un filtre de socket Linux. Prend comme paramĂštre le chemin d’un objet eBPF (Extended Berkeley Packet Filter) ou d’un programme cBPF (Classic Berkeley Packet Filter) au format dĂ©cimal.
--object-pinned
chemin

Spécifier le chemin vers un objet eBPF épinglé.

Les applications chargent les programmes eBPF dans le noyau Ă  l’aide de l’appel systĂšme bpf() et de la commande BPF_PROG_LOAD, et peuvent les Ă©pingler (rĂ©fĂ©rencer) dans un systĂšme de fichiers virtuel Ă  l’aide de BPF_OBJ_PIN. Pour utiliser un objet Ă©pinglĂ© dans iptables, montez le systĂšme de fichiers bpf en utilisant

mount -t bpf bpf ${BPF_MOUNT}

puis insérez 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 intermĂ©diaire) BPF tel que gĂ©nĂ©rĂ© par l’utilitaire nfbpf_compile .

Le format de code est similaire Ă  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 dĂ©cimale. Les champs codent l’opĂ©ration, le dĂ©calage de saut si vrai, le dĂ©calage de saut si faux et le champ multi-usage gĂ©nĂ©rique « K ». Les commentaires ne sont pas pris en charge.

Par exemple, pour ne lire que les paquets correspondant à « ip proto 6 », insérez ce qui suit, sans commentaires, ni blancs à la fin :

4 # nombre d’instructions
48 0 0 9 # charger le bytecode ip->proto
21 0 1 6 # saut égal à IPPROTO_TCP
6 0 0 1 # renvoyer réussite (différent de zéro)
6 0 0 0 # renvoyer échec (zéro)

Vous pouvez transmettre ce filtre Ă  la vĂ©rification de correspondance bpf Ă  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

À 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, gĂ©nĂ©rez un BPF ciblant un dispositif avec le mĂȘme type de liaison de donnĂ©es que la correspondance de xtables. iptables transmet les paquets de la couche rĂ©seau Ă  la couche supĂ©rieure, sans couche MAC. SĂ©lectionner un dispositif ayant pour type de liaison de donnĂ©es 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 données connus pour un dispositif donné.

Pour en apprendre davantage Ă  propos de BPF, lisez la page de manuel bpf (4) de FreeBSD.

cgroup

[ ! ] --path chemin

VĂ©rifier la correspondance de l’appartenance Ă  cgroup2.

Chaque socket est associĂ© au cgroup version 2 des processus de crĂ©ation. Les paquets qui correspondent viennent de (ou vont vers) tous les sockets de la sous-hiĂ©rarchie du chemin spĂ©cifiĂ©. Le chemin doit ĂȘtre relatif Ă  la racine de la hiĂ©rarchie cgroup2.

[ ! ] --cgroup identifiant_classe

VĂ©rifier la correspondance Ă  l’identifiant de classe net_cls de cgroup.

L’identifiant de classe est le marqueur dĂ©fini Ă  l’aide du contrĂŽleur net_cls de cgroup. Cette option ne peut pas ĂȘtre utilisĂ©e 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 utilisĂ© dans la chaĂźne INPUT, le vĂ©rificateur de correspondance cgroup n’est pas actuellement d’une grande utilitĂ©, car il ne vĂ©rifie que la correspondance des paquets qui sont traitĂ©s pour les sockets locaux Ă  l’aide d’un dĂ©multiplexage de socket prĂ©coce. C’est pourquoi son utilisation dans la chaĂźne INPUT n’est pas recommandĂ©e, sauf si ses implications sont bien comprises.

Disponible à partir de Linux 3.14.

cluster

Ce module permet de déployer des grappes de passerelles et de dorsaux à partage de charge sans avoir besoin de répartiteurs de charge.

Cette recherche de correspondance nĂ©cessite que tous les nƓuds voient les mĂȘmes paquets. La correspondance « cluster » pourra alors dĂ©cider si ce nƓud doit gĂ©rer un paquet en fonction des options suivantes :
--cluster-total-nodes
nombre

DĂ©finir le nombre total de nƓuds dans la grappe.

[ ! ] --cluster-local-node numéro

DĂ©finir l’identifiant du numĂ©ro de nƓud local.

[ ! ] --cluster-local-nodemask masque

DĂ©finir le masque de l’identifiant du numĂ©ro de nƓud local. Vous pouvez utiliser cette option Ă  la place de --cluster-local-node .

--cluster-hash-seed valeur

Définir 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 nƓuds voient les mĂȘmes 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 à des erreurs de syntaxe. Dans ce cas, vous devrez adapter ces exemples à la syntaxe d’arptables-jf pour qu’ils puissent fonctionner.

Dans le cas des connexions TCP, la fonctionnalitĂ© pickup doit ĂȘtre dĂ©sactivĂ©e pour Ă©viter de marquer les paquets TCP ACK entrant dans le sens de la rĂ©ponse comme valables.

echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose

comment

Cette extension permet d’ajouter des commentaires (jusqu’à 256 caractùres) à toute rùgle.
--comment
commentaire
Exemple :

iptables -A INPUT -i eth1 -m comment --comment "mon réseau local"

connbytes

VĂ©rifier la correspondance en fonction du nombre d’octets ou de paquets qu’une connexion (ou un des deux flux constituant la connexion) a dĂ©jĂ  transmis, ou en fonction du nombre moyen d’octets par paquet.

Les compteurs sont sur 64 bits et ne risquent donc pas de déborder ;)

La principale utilisation consiste Ă  dĂ©tecter les tĂ©lĂ©chargements de longue durĂ©e et Ă  les marquer pour ĂȘtre programmĂ©s avec une prioritĂ© infĂ©rieure dans le contrĂŽle de trafic.

Le nombre d’octets transfĂ©rĂ©s par connexion peut ĂȘtre visualisĂ© Ă  l’aide de « conntrack -L » et accĂ©dĂ© Ă  l’aide de ctnetlink.

Notez que pour les connexions qui ne possĂšdent pas d’informations de comptage, la vĂ©rification de correspondance renverra toujours faux. Le drapeau de sysctl « net.netfilter.nf_conntrack_acct » dĂ©finit 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 aprĂšs une bascule du drapeau de sysctl.
[ ! ] --connbytes mini [ : maxi ]

VĂ©rifier la correspondance des paquets issus d’une connexion dont le nombre de paquets ou d’octets transmis, ou la taille moyenne des paquets est supĂ©rieure Ă  mini et infĂ©rieure Ă  maxi octets. Si maxi est omis, seule la supĂ©rioritĂ© de la valeur Ă  mini est vĂ©rifiĂ©e. « ! » permet de vĂ©rifier la correspondance des paquets qui ne correspondent pas Ă  l’intervalle spĂ©cifiĂ©.

--connbytes-dir { original | reply | both }

Paquets Ă  prendre en compte

--connbytes-mode { packets | bytes | avgpkt }

Cette option permet de dĂ©finir s’il faut vĂ©rifier le nombre de paquets ou d’octets transmis, ou la taille moyenne (en octets) de tous les paquets dĂ©jĂ  reçus. Notez que lorsque « both « est utilisĂ© en combinaison avec « avgpkt », et si les donnĂ©es transitent principalement dans une seule direction (comme par exemple avec HTTP), la taille moyenne des paquets sera Ă  peu prĂšs Ă©gale Ă  la moitiĂ© de celle des paquets de donnĂ©es proprement dits.

Exemple :

iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...

connlabel

Ce module fait correspondre ou ajoute des connlabels (Ă©tiquettes de connexion) Ă  une connexion. Les connlabels sont similaires aux connmarks, sauf que les Ă©tiquettes sont basĂ©es sur des bits ; c’est-Ă -dire que toutes les Ă©tiquettes peuvent ĂȘtre attachĂ©es Ă  un flux en mĂȘme temps. Ce module prend actuellement en charge jusqu’à 128 Ă©tiquettes uniques.
[ ! ] --label nom

Correspondance si l’étiquette nom Ă  Ă©tĂ© dĂ©finie pour la connexion. On peut utiliser un nombre Ă  la place d’un nom (lequel sera converti en nombre, voir EXEMPLE ci-aprĂšs). Utiliser un nombre outrepasse toujours le fichier connlabel.conf .

--set

DĂ©finir une Ă©tiquette pour une connexion si elle ne l’est pas dĂ©jĂ . Noter que dĂ©finir une Ă©tiquette peut Ă©chouer, car le noyau alloue la zone de stockage de l’étiquette conntrack Ă  la crĂ©ation de la connexion, et il ne rĂ©serve que la quantitĂ© de mĂ©moire requise par le jeu de rĂšgles existant Ă  la crĂ©ation de la connexion. Dans ce cas, la correspondance Ă©chouera (ou rĂ©ussira en cas de nĂ©gation de l’option --label ).

Cette vĂ©rification de correspondance requiert libnetfilter_conntrack version 1.0.4 ou ultĂ©rieure. La traduction d’étiquette est effectuĂ©e Ă  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 simultanĂ©es Ă  un serveur par adresse IP client (ou bloc d’adresses client).
--connlimit-upto
n

Correspondance si le nombre de connexions existantes est inférieur ou égal à n .

--connlimit-above n

Correspondance si le nombre de connexions existantes est strictement supérieur à n .

--connlimit-mask taille_préfixe

Regrouper les hĂŽtes en fonction de la taille du prĂ©fixe. Pour IPv4, cette taille doit ĂȘtre un nombre entre 0 et 32 inclus (ou entre 0 et 128 pour IPv6). Par dĂ©faut, c’est la taille maximale de prĂ©fixe pour le protocole applicable qui sera utilisĂ©e.

--connlimit-saddr

Appliquer la limite au groupe source. Il s’agit du comportement par dĂ©faut si --connlimit-daddr n’est pas spĂ©cifiĂ©e.

--connlimit-daddr

Appliquer la limite au groupe destination.

Exemples :

-

permettre 2 connexions telnet par hÎte 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 requĂȘtes HTTP simultanĂ©es à 16 par rĂ©seau source de classe C (masque rĂ©seau de 24 bits) :

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT

-

limiter le nombre de requĂȘtes HTTP simultanĂ©es à 16 pour le rĂ©seau de liaison locale (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 hÎte 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 associĂ© Ă  une connexion (et qui peut ĂȘtre dĂ©fini Ă  l’aide de l’action CONNMARK ci-aprĂšs).
[ ! ] --mark valeur [ / masque ]

VĂ©rifier la correspondance des paquets dans les connexions possĂ©dant la valeur de « mark » donnĂ©e (si un masque est spĂ©cifiĂ©, il est combinĂ© Ă  l’aide d’un ET logique avec la valeur de « mark » avant la comparaison).

conntrack

Ce module, lorsque combinĂ© avec le traçage de connexion, permet d’accĂ©der Ă  l’état du traçage de connexion pour ce paquet ou cette connexion.
[ ! ] --ctstate liste_états

liste_états est une liste, séparée par des virgules, des états de connexion à comparer. Les états possibles sont énumérés ci-aprÚs.

[ ! ] --ctproto l4proto

Protocol de la couche 4 à comparer (sous forme de numéro ou de nom).

[ ! ] --ctorigsrc adresse [ / masque ]
[ ! ] --ctorigdst adresse [ / masque ]
[ ! ] --ctreplsrc adresse [ / masque ]
[ ! ] --ctrepldst adresse [ / masque ]

Comparaison avec l’adresse originelle/rĂ©ponse source/destination.

[ ! ] --ctorigsrcport port [ : port ]
[ ! ] --ctorigdstport port [ : port ]
[ ! ] --ctreplsrcport port [ : port ]
[ ! ] --ctrepldstport port [ : port ]

Comparaison avec le port originel/rĂ©ponse source/destination (TCP/UDP/etc.) ou la clĂ© GRE. La comparaison avec des plages de port n’est prise en charge que pour les versions du noyau supĂ©rieures à 2.6.38.

[ ! ] --ctstatus liste_états

statuslist est une liste, séparée par des virgules, des états de connexion à comparer. Les états possibles sont énumérés ci-aprÚs.

[ ! ] --ctexpire durée [ : durée ]

Comparaison entre la durĂ©e de vie restante en secondes et la valeur ou l’intervalle de valeurs (incluses) donnĂ©.

--ctdir { ORIGINAL | REPLY }

VĂ©rifier la correspondance des paquets qui cheminent dans la direction spĂ©cifiĂ©e. Si ce drapeau n’est pas spĂ©cifiĂ©, les paquets qui cheminent dans les deux directions correspondent.

États pour --ctstate :
INVALID

Le paquet n’est associĂ© Ă  aucune connexion connue.

NEW

Le paquet a initiĂ© une nouvelle connexion ou est associĂ© Ă  une connexion qui n’a pas vu de paquets dans les deux directions.

ESTABLISHED

Le paquet est associé à une connexion qui a vu des paquets dans les deux directions.

RELATED

Le paquet initie une nouvelle connexion mais est dĂ©jĂ  associĂ© Ă  une connexion existante, telle qu’un transfert de donnĂ©es FTP ou une erreur ICMP.

UNTRACKED

Le paquet n’est pas tracĂ©, ce qui se produit si vous indiquez explicitement de ne pas le tracer en utilisant « -j CT --notrack » dans la table « raw ».

SNAT

Un Ă©tat virtuel qui correspond si l’adresse source originelle diffĂšre de l’adresse destination de rĂ©ponse.

DNAT

Un Ă©tat virtuel qui correspond si l’adresse destination originelle diffĂšre de l’adresse source de rĂ©ponse.

États pour --ctstatus :

NONE

Aucun des états ci-aprÚs.

EXPECTED

Il s’agit d’une connexion attendue (c’est-Ă -dire qu’un assistant de conntrack l’a Ă©tablie).

SEEN_REPLY

Conntrack a vu des paquets dans les deux directions.

ASSURED

L’entrĂ©e de conntrack ne doit jamais ĂȘtre pĂ©rimĂ©e prĂ©maturĂ©ment.

CONFIRMED

La connexion est confirmĂ©e : le paquet qui en est Ă  l’origine a quittĂ© la boĂźte.

cpu

[ ! ] --cpu numéro

VĂ©rifier le numĂ©ro de CPU (central processing unit — processeur) qui traite ce paquet. Les CPU sont numĂ©rotĂ©s de 0 Ă  nombre_CPU - 1. Peut ĂȘtre utilisĂ© en combinaison avec RPS (Remote Packet Steering — Pilotage de paquets Ă  distance) ou les cartes rĂ©seau Ă  files d’attente multiples (multiqueue NIC) pour rĂ©partir le trafic rĂ©seau sur diffĂ©rentes 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 ContrĂŽle de Congestion des Datagrammes) fait partie de masque . masque est une liste de types de paquet sĂ©parĂ©s 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 dĂ©finie.

devgroup

VĂ©rifier la correspondance du groupe de dispositifs de l’interface d’un paquet entrant/sortant.
[ ! ] --src-group nom

Vérifier la correspondance du groupe de dispositifs du dispositif entrant.

[ ! ] --dst-group nom

Vérifier la correspondance du groupe de dispositifs du dispositif sortant.

dscp

Ce module vĂ©rifie la correspondance du champ DSCP (Differentiated Services Code Point — champ permettant de diffĂ©rencier les services) sur 6 bits Ă  l’intĂ©rieur du champ TOS (Type Of Service) de l’en-tĂȘte IP. DSCP a supplantĂ© TOS au sein de l’IETF (Internet Engineering Task Force).
[ ! ] --dscp valeur

Correspondance avec une valeur dĂ©cimale ou hexadĂ©cimale comprise dans la plage 0–63.

[ ! ] --dscp-class classe

VĂ©rifier la correspondance avec la classe DiffServ (Differentiated Services — Services DiffĂ©renciĂ©s). Les classes valables sont BE, EF, AFxx ou CSx. Elles sont ensuite converties vers leurs valeurs numĂ©riques respectives.

dst (spécifique à IPv6)

Ce module vĂ©rifie la correspondance des paramĂštres de l’en-tĂȘte « Destination Options ».
[ ! ] --dst-len taille

Taille totale de cet en-tĂȘte en octets.

--dst-opts type [ : taille ][ , type [ : taille ]...]

Type numĂ©rique de l’option et taille des donnĂ©es de l’option en octets.

ecn

Ce module permet de vĂ©rifier la correspondance des bits ECN de l’en-tĂȘte IPv4/IPv6 et TCP. ECN (Explicit Congestion Notification) est le mĂ©canisme de notification explicite de congestion dĂ©crit dans la RFC 3168.
[ ! ] --ecn-tcp-cwr

Correspond si le bit TCP ECN CWR (Congestion Window Received — fenĂȘtre de congestion reçue) est positionnĂ©.

[ ! ] --ecn-tcp-ece

Correspond si le bit TCP ECN ECE (ECN Echo — paquet reçu avec le bit CE positionnĂ©) est positionnĂ©.

[ ! ] --ecn-ip-ect nombre

VĂ©rifie la correspondance d’un point de code IPv4/IPv6 ECT (ECN-Capable Transport) particulier. Vous devez spĂ©cifier un nombre entre 0 et 3.

esp

Ce module vĂ©rifie la correspondance des SPI (Security Parameters Index — index des paramĂštres de sĂ©curitĂ©) de l’en-tĂȘte ESP (Encapsulation Security Payload — encapsulation sĂ©curisĂ©e de charge utile) des paquets IPsec.
[ ! ] --espspi spi [ : spi ]

eui64 (Extended Unique Identifier — identifiant unique Ă©tendu) ; spĂ©cifiqueĂ  IPv6.

Ce module vĂ©rifie la correspondance de la partie EUI-64 d’une adresse IPv6 autoconfigurĂ©e sans conservation d’état (stateless). Il compare cette partie EUI-64 dĂ©rivĂ©e 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 comparĂ©. Ce module ne vĂ©rifie pas la correspondance d’autres trames de la couche liaison et n’est valable que dans les chaĂźnes PREROUTING , INPUT et FORWARD .

frag (spécifique à IPv6)

Ce module vĂ©rifie la correspondance des paramĂštres de l’en-tĂȘte Fragment.
[ ! ] --fragid id [ : id ]

VĂ©rifie la correspondance de l’identifiant ou de la plage d’identifiant donnĂ©.

[ ! ] --fraglen taille

Cette option ne peut pas ĂȘtre utilisĂ©e avec un noyau de version 2.6.10 ou ultĂ©rieure. La taille de l’en-tĂȘte Fragment est statique et cette option n’est donc pas pertinente.

--fragres

Correspond si les champs réservés sont remplis de zéros.

--fragfirst

VĂ©rifier 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 dĂ©bit (comme la correspondance de limit ) pour un groupe de connexions utilisant une seule rĂšgle iptables. Le groupement peut s’effectuer par groupe d’hĂŽtes (adresse source et/ou destination) et/ou par port. Ce module permet d’exprimer « N paquets par unitĂ© de temps et par groupe » ou « N octets par seconde » (voir les exemples ci-aprĂšs).

Les options de limite de hachage ( --hashlimit-upto , --hashlimit-above ) et --hashlimit-name sont obligatoires.
--hashlimit-upto
quantité [ /second | /minute | /hour | /day ]

Correspond si le dĂ©bit est infĂ©rieur ou Ă©gal Ă  quantitĂ© /unitĂ© de temps. Ce dĂ©bit est spĂ©cifiĂ© sous la forme d’un nombre avec un suffixe d’unitĂ© de temps facultatif (la valeur par dĂ©faut est 3/hour), ou sous la forme quantitĂ© b/second (nombre d’octets par seconde).

--hashlimit-above quantité [ /second | /minute | /hour | /day ]

Correspond si le débit est supérieur à quantité /unité de temps.

--hashlimit-burst quantité

Nombre initial maximal de paquets Ă  comparer : ce nombre est incrĂ©mentĂ© de 1 tant que la limite spĂ©cifiĂ©e ci-avant n’est pas atteinte, et ce jusqu’à ce que cette limite soit atteinte ; la valeur par dĂ©faut est 5. Lorsqu’une vĂ©rification de correspondance de dĂ©bit en octets est demandĂ©e, cette option spĂ©cifie la quantitĂ© d’octets pouvant excĂ©der le dĂ©bit donnĂ©. Cette option doit ĂȘtre utilisĂ©e avec prĂ©cautions — si l’entrĂ©e arrive Ă  expiration, cette valeur est aussi rĂ©initialisĂ©e.

--hashlimit-mode { srcip | srcport | dstip | dstport } , ...

Une liste, sĂ©parĂ©e par des virgules, d’objets Ă  prendre en considĂ©ration. Si aucune option --hashlimit-mode n’est spĂ©cifiĂ©e, hashlimit agit comme limit, au prix de devoir faire le mĂ©nage du hachage.

--hashlimit-srcmask préfixe

Lorsque « --hashlimit-mode srcip » est spĂ©cifiĂ©, toutes les adresses source rencontrĂ©es seront regroupĂ©es en fonction de la taille du prĂ©fixe donnĂ©, et le sous-rĂ©seau ainsi créé sera soumis Ă  hashlimit. prĂ©fixe doit ĂȘtre entre 0 et 32 inclus. Notez que « --hashlimit-srcmask 0 » produit le mĂȘme effet que ne pas spĂ©cifier srcip pour --hashlimit-mode , mais consomme plus de ressources.

--hashlimit-dstmask préfixe

Comme --hashlimit-srcmask , mais pour les adresses destination.

--hashlimit-name nom_limite

Le nom pour l’entrĂ©e /proc/net/ipt_hashlimit/nom_limite

--hashlimit-htable-size compartiments

Le nombre de compartiments dans la table de hachages.

--hashlimit-htable-max entrées

Le nombre maximal d’entrĂ©es dans le hachage.

--hashlimit-htable-expire msec

DĂ©lai d’expiration des entrĂ©es du hachage en millisecondes.

--hashlimit-htable-gcinterval msec

Nombre de millisecondes entre chaque ramassage des déchets.

--hashlimit-rate-match

CatĂ©goriser le flux au lieu de limiter son dĂ©bit. L’action de cette option consiste Ă  Ă©valuer Ă  vrai ou faux le fait que le dĂ©bit est au-dessus ou en-dessous d’une certaine valeur.

--hashlimit-rate-interval sec

CombinĂ©e avec --hashlimit-rate-match , cette option permet de spĂ©cifier le pas selon lequel le dĂ©bit doit ĂȘtre Ă©chantillonnĂ©.

Exemples :
correspondance au niveau de l’hîte source

« 1000 paquets par seconde pour chaque hÎte 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-réseau

« 10000 paquets par minute pour chaque sous-réseau /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 débit en octets par seconde

« débits excédant 512 ko/s » => --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s

correspondance au niveau du débit en octets par seconde

« dĂ©bits excĂ©dant512 ko/s, mais permission d’aller jusqu’à 1 Mo sans recherche de correspondance » => --hashlimit-mode dstip --hashlimit-above 512kb/s --hashlimit-burst 1mb

hbh (spécifique à IPv6)

Ce module vĂ©rifie la correspondance des paramĂštres de l’en-tĂȘte des options Hop-by-Hop.
[ ! ] --hbh-len taille

Taille totale de cet en-tĂȘte en octets.

--hbh-opts type [ : taille ][ , type [ : taille ]...]

Type numĂ©rique de l’option et taille des donnĂ©es de l’option en octets.

helper

Ce module vérifie la correspondance des paquets en relation avec un assistant de conntrack (conntrack helper) spécifique.
[ ! ] --helper chaĂźne

Correspond aux paquets en relation avec l’assistant de conntrack spĂ©cifiĂ©.

chaßne peut contenir « ftp » pour les paquets en relation avec une session FTP sur le port par défaut. Pour un port différent, ajoutez « --num_port » à la chaßne (par exemple, « ftp-2121 »).

Les mĂȘmes rĂšgles s’appliquent pour les autres assistants de conntrack.

hl (spécifique à IPv6)

Ce module vĂ©rifie la correspondance du champ Hop Limit de l’en-tĂȘte IPv6.
[ ! ] --hl-eq valeur

Correspond si le champ Hop Limit contient la valeur spécifiée.

--hl-lt valeur

Correspond si la valeur contenue dans le champ Hop Limit est inférieure à valeur .

--hl-gt valeur

Correspond si la valeur contenue dans le champ Hop Limit est supérieure à valeur .

icmp (spécifique à IPv4)

Cette extension peut ĂȘtre utilisĂ©e si « --protocol icmp » est spĂ©cifiĂ©. Elle fournit l’option suivante :
[ ! ] --icmp-type { type [ / code ]| nom_type }

Cette option permet de spĂ©cifier le type ICMP sous la forme d’un type ICMP numĂ©rique, d’une paire type / code ou d’un des noms de type ICMP nom_type affichĂ©s par la commande
iptables -p icmp -h

icmp6 (spécifique à IPv6)

Cette extension peut ĂȘtre utilisĂ©e si « --protocol ipv6-icmp » ou « --protocol icmpv6 » est spĂ©cifiĂ©. Elle fournit l’option suivante :
[ ! ] --icmpv6-type type [ / code ]| nom_type

Cette option permet de spĂ©cifier le type ICMPv6 sous la forme d’un type ICMPv6 numĂ©rique, d’une paire type / code ou d’un des noms de type ICMPv6 nom_type affichĂ©s par la commande
ip6tables -p ipv6-icmp -h

iprange

Ce module vĂ©rifie la correspondance de la plage d’adresses IP arbitraire donnĂ©.
[ ! ] --src-range de [ - Ă  ]

Correspond si l’adresse IP source appartient Ă  la plage spĂ©cifiĂ©.

[ ! ] --dst-range de [ - Ă  ]

Correspond si l’adresse IP destination appartient Ă  la plage spĂ©cifiĂ©.

ipv6header (spécifique à IPv6)

Ce module vĂ©rifie la correspondance des en-tĂȘtes d’extension IPv6 et/ou l’en-tĂȘte de la couche supĂ©rieure.

--soft

Correspond si le paquet contient au moins un des en-tĂȘtes spĂ©cifiĂ©s Ă  l’aide de l’option --header .

[ ! ] --header en-tĂȘte [ , en-tĂȘte ...]

Correspond aux paquets qui contiennent EXACTEMENT tous les en-tĂȘte s spĂ©cifiĂ©s. Les en-tĂȘtes encapsulĂ©s avec l’en-tĂȘte ESP ne sont pas concernĂ©s. Les valeurs possibles d’ en-tĂȘte sont :

hop | hop-by-hop

En-tĂȘte des options Hop-by-Hop

dst

En-tĂȘte des options de destination

route

En-tĂȘte de routage

frag

En-tĂȘte de fragment

auth

En-tĂȘte d’authentification

esp

En-tĂȘte d’encapsulation sĂ©curisĂ©e de la charge utile

none

Pas d’en-tĂȘte Next, ce qui correspond Ă  la valeur 59 dans le « champ Next Header » de l’en-tĂȘte IPv6 ou de tout en-tĂȘte d’extension IPv6.

prot

Correspondance Ă  n’importe quel en-tĂȘte de protocole de la couche supĂ©rieure. Un nom de protocole issu du fichier /etc/protocols ou une valeur numĂ©rique sont aussi autorisĂ©s. Le nombre 255 est Ă©quivalent Ă  prot .

ipvs

Ce module vérifie la correspondance des propriétés de la connexion IPVS.
[ ! ] --ipvs

le paquet appartient à une connexion IPVS (IP Virtual Server — serveur IP virtuel)

Toutes les options suivantes impliquent --ipvs (mĂȘme si elles sont
prĂ©cĂ©dĂ©es d’une nĂ©gation)
[ ! ] --vproto protocole

protocole VIP (Virtual IP) à comparer ; par numéro ou par nom, par exemple « tcp »

[ ! ] --vaddr adresse [ / masque ]

adresse VIP Ă  comparer

[ ! ] --vport port

port VIP à comparer ; par numéro ou par nom, par exemple « http »

--vdir { ORIGINAL | REPLY }

sens de déplacement du paquet

[ ! ] --vmethod { GATE | IPIP | MASQ }

méthode de redirection IPVS utilisée

[ ! ] --vportctl port

port VIP de la connexion de contrÎle à 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 donnĂ©s.
[ ! ] --length taille [ : taille ]

limit

Ce module vĂ©rifie la correspondance d’un dĂ©bit limitĂ© en utilisant un filtre de type « seau Ă  jetons » (token bucket). Une rĂšgle utilisant cette extension correspondra jusqu’à ce que cette limite soit atteinte. Ce module peut ĂȘtre utilisĂ© en combinaison avec l’action LOG pour fournir une journalisation limitĂ©e, par exemple.

xt_limit ne prend pas en charge la nĂ©gation — pour appliquer cette derniĂšre, vous devrez utiliser « -m hashlimit ! --hashlimit dĂ©bit » tout en omettant --hashlimit-mode.
--limit
débit [ /second | /minute | /hour | /day ]

Débit moyen maximal de comparaison : spécifié sous forme de nombre avec un suffixe facultatif « /second », « /minute », « /hour » ou « /day », la valeur par défaut étant 3/hour.

--limit-burst nombre

Nombre initial maximal de paquets Ă  comparer : ce nombre est incrĂ©mentĂ© de 1 tant que la limite spĂ©cifiĂ©e ci-avant n’est pas atteinte, et ce jusqu’à ce que cette limite soit atteinte ; la valeur par dĂ©faut est 5.

mac

[ ! ] --mac-source adresse

Cette option permet de vĂ©rifier la correspondance de l’adresse MAC source (Media Access Control). Cette derniĂšre doit ĂȘtre 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 chaĂźnes PREROUTING , FORWARD ou INPUT .

mark

Ce module vĂ©rifie la correspondance du champ de netfilter « mark » associĂ© Ă  un paquet (et qui peut ĂȘtre dĂ©fini Ă  l’aide de l’action MARK ci-aprĂšs).
[ ! ] --mark valeur [ / masque ]

Correspond aux paquets possĂ©dant la valeur de « mark » non signĂ©e donnĂ©e (si un masque est spĂ©cifiĂ©, il est combinĂ© Ă  l’aide d’un ET logique avec le masque avant la comparaison).

mh (spécifique à IPv6)

Cette extension est chargĂ©e si « --protocol ipv6-mh » ou « --protocol mh » est spĂ©cifiĂ©e. Elle fournit l’option suivante :
[ ! ] --mh-type type [ : type ]

Cette option permet de spĂ©cifier le type d’en-tĂȘte de mobilitĂ© (Mobility Header — MH) sous forme d’un type de MH numĂ©rique ou d’un des noms de type de MH indiquĂ©s par la commande
ip6tables -p mh -h

multiport

Ce module vĂ©rifie la correspondance d’un ensemble de ports source ou destination. Il est possible de spĂ©cifier jusqu’à15 ports. Une plage de ports (port:port) compte pour deux ports. Ce module ne peut ĂȘtre utilisĂ© 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 donnés. Le drapeau --sports est un alias de commodité pour cette option. Plusieurs ports ou plages de ports sont séparés par des virgules et une plage de port est spécifié en utilisant un deux-points « : ». Par exemple, 53,1024:65535 correspondra au port 53 et à tous les ports de 1024 à 65535.

[ ! ] --destination-ports , --dports port [ , port | , port : port ]...

Correspond si le port destination fait partie des ports donnés. Le drapeau --dports est un alias de commodité pour cette option.

[ ! ] --ports port [ , port | , port : port ]...

Correspond si un des ports source ou destination est égal à un des ports donnés.

nfacct

Ce module fournit l’infrastructure de statistiques Ă©tendue pour iptables. Vous devez utiliser cette vĂ©rification de correspondance avec l’utilitaire d’espace utilisateur autonome nfacct (8).

La seule option valable pour cette vérification de correspondance est la suivante :
--nfacct-name
nom

Cette option permet de spĂ©cifier le nom d’objet existant qui sera utilisĂ© pour effectuer des statistiques sur le trafic auquel ce jeu de rĂšgles correspond.

Pour utiliser cette extension, vous devez créer un objet de statistiques :

nfacct add http-traffic

Ensuite, vous devez attacher l’extension à l’objet de statistiques à 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’intensitĂ© du trafic auquel la rĂšgle correspond :

nfacct get http-traffic

{ pkts = 00000000000000000156, bytes = 00000000000000151786 } = http-traffic;

Vous pouvez télécharger nfacct (8) depuis https://www.netfilter.org ou depuis le dépÎt git.netfilter.org.

osf

Le module osf effectue une prise d’empreinte passive du systĂšme d’exploitation. Il compare certaines donnĂ©es (taille de fenĂȘtre, MSS (Maximum Segment Size — taille maximale de segment), les options et leur ordre, TTL (Time To Live — durĂ©e de vie), le drapeau DF (Don’t Fragment — ne pas fragmenter), etc.) des paquets ayant le bit SYN positionnĂ©.
[ ! ] --genre chaĂźne

Cette option permet de vĂ©rifier la correspondance d’un genre de systĂšme d’exploitation en utilisant une prise d’empreinte passive.

--ttl niveau

Effectuer des vĂ©rifications additionnelles de durĂ©e de vie sur le paquet pour dĂ©terminer le systĂšme d’exploitation. niveau peut prendre les valeurs suivantes :

0

VĂ©ritable comparaison des durĂ©es de vie de l’adresse IP et de l’empreinte (fonctionne en gĂ©nĂ©ral pour les rĂ©seaux locaux).

1

VĂ©rifier si la durĂ©e de vie de l’en-tĂȘte IP est infĂ©rieure Ă  celle de l’empreinte (fonctionne avec des adresses routables globalement).

2

Ne pas comparer les durées de vie.

--log niveau

Journaliser les genres dĂ©terminĂ©s dans dmesg mĂȘme s’ils ne correspondent pas au genre souhaitĂ©. niveau peut prendre une des valeurs suivantes :

0

Journaliser toutes les signatures correspondantes ou inconnues.

1

Journaliser seulement la premiĂšre.

2

Journaliser toutes les signatures connues correspondantes.

Vous pouvez voir apparaßtre 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 ĂȘtre chargĂ©es Ă  l’aide du programme nfnl_osf . Pour charger une empreinte Ă  partir d’un fichier, utilisez :

nfnl_osf -f /usr/share/xtables/pf.os

et pour la supprimer Ă  nouveau,

nfnl_osf -f /usr/share/xtables/pf.os -d

La base de donnĂ©es des empreintes peut ĂȘtre tĂ©lĂ©chargĂ©e depuis http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os.

owner

Ce module tente de vĂ©rifier la correspondance de diffĂ©rentes caractĂ©ristiques du crĂ©ateur du paquet, pour les paquets gĂ©nĂ©rĂ©s localement. Cette recherche de correspondance n’est valable que dans les chaĂźnes OUTPUT et POSTROUTING. Les paquets redirigĂ©s n’ont pas de socket associĂ©, Ă  la diffĂ©rence des paquets en provenance des threads du noyau qui ont un socket, mais gĂ©nĂ©ralement pas de propriĂ©taire.
[ ! ] --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 propriĂ©tĂ© de l’utilisateur donnĂ©. Vous pouvez aussi spĂ©cifier un UID numĂ©rique 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 propriété du groupe donné. Vous pouvez aussi spécifier un GID numérique ou un intervalle de GID.

--suppl-groups

Avec cette option, le(s) groupe(s) spĂ©cifiĂ©(s) Ă  l’aide de --gid-owner sont aussi comparĂ©s avec les groupes supplĂ©mentaires d’un processus.

[ ! ] --socket-exists

Correspond si le paquet est associé à un socket.

physdev

Ce module vĂ©rifie la correspondance des dispositifs d’entrĂ©e et de sortie d’un port de pont asservis Ă  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 ultĂ©rieures du noyau.
[ ! ] --physdev-in nom

Le nom d’un port de pont par lequel un paquet est reçu (seulement pour les paquets entrant dans les chaĂźnes 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 arrivĂ© par un dispositif de pont, il ne correspondra pas aux critĂšres de cette option, Ă  moins que « ! » ne soit spĂ©cifiĂ©.

[ ! ] --physdev-out nom

Le nom d’un port de pont par lequel un paquet est sur le point d’ĂȘtre envoyĂ© (seulement pour les paquets ayant subi un pontage et entrant dans les chaĂźnes 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 entré 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 routĂ©. Utile seulement dans les chaĂźnes FORWARD et POSTROUTING .

pkttype

Ce module vérifie la correspondance du type du paquet au niveau de la couche liaison.
[ ! ] --pkt-type { unicast | broadcast | multicast }

policy

Ce module vérifie la correspondance de la politique utilisée par IPsec pour gérer un paquet.
--dir
{ in | out }

Cette option permet de choisir si l’on doit vĂ©rifier la correspondance de la politique utilisĂ©e pour la dĂ©sencapsulation ou la politique qui sera utilisĂ©e pour l’encapsulation. in est valable dans les chaĂźnes PREROUTING, INPUT et FORWARD , alors que out l’est dans les chaĂźnes POSTROUTING, OUTPUT et FORWARD .

--pol { none | ipsec }

Correspond si le paquet est traitĂ© par IPsec. --pol none ne peut pas ĂȘtre combinĂ© Ă  --strict .

--strict

Cette option permet de choisir si l’intĂ©gralitĂ© de la politique doit correspondre ou si au moins une des rĂšgles de la politique doit correspondre Ă  la politique donnĂ©e.

Pour chaque Ă©lĂ©ment de politique Ă  dĂ©crire, il est possible d’utiliser une ou plusieurs des options suivantes. Lorsque --strict a Ă©tĂ© spĂ©cifiĂ©e, au moins une option doit ĂȘtre utilisĂ©e pour chaque Ă©lĂ©ment.
[ ! ] --reqid identifiant

Cette option permet de vĂ©rifier la correspondance du « reqid » de la rĂšgle de la politique. Le reqid peut ĂȘtre spĂ©cifiĂ© Ă  l’aide de setkey (8) en utilisant unique:id comme niveau.

[ ! ] --spi spi

Cette option permet de vĂ©rifier la correspondance du SPI (Security Parameters Index — index des paramĂštres de sĂ©curitĂ©) des SA (Security Associations — associations de sĂ©curitĂ©s).

[ ! ] --proto { ah | esp | ipcomp }

Cette option permet de vĂ©rifier la correspondance du protocole d’encapsulation.

[ ! ] --mode { tunnel | transport }

Cette option permet de vĂ©rifier la correspondance du mode d’encapsulation.

[ ! ] --tunnel-src adresse [ / masque ]

Cette option permet de vĂ©rifier la correspondance de l’adresse de l’extrĂ©mitĂ© source d’une SA en mode tunnel. Valable seulement avec --mode tunnel .

[ ! ] --tunnel-dst adresse [ / masque ]

Cette option permet de vĂ©rifier la correspondance de l’adresse de l’extrĂ©mitĂ© destination d’une SA en mode tunnel. Valable seulement avec --mode tunnel .

--next

DĂ©marrer l’élĂ©ment suivant dans la spĂ©cification de la politique. Ne peut ĂȘtre utilisĂ© qu’avec --strict .

quota

Ce module implĂ©mente les quotas rĂ©seau en dĂ©crĂ©mentant un compteur d’octets avec chaque paquet. La condition est vĂ©rifiĂ©e jusqu’à ce que le compteur d’octets atteigne zĂ©ro. Ce comportement peut ĂȘtre inversĂ© par une nĂ©gation (la condition ne sera alors vĂ©rifiĂ©e que lorsque le compteur d’octets atteindra zĂ©ro).
[ ! ] --quota octets

Le quota en octets.

rateest

L’estimateur de dĂ©bit peut vĂ©rifier la correspondance des dĂ©bits estimĂ©s comme ceux collectĂ©s Ă  l’aide de l’action RATEEST. Il prend en charge la correspondance basĂ©e sur des valeurs de bps/pps absolues, la comparaison de deux estimateurs de dĂ©bit et la correspondance basĂ©e sur la diffĂ©rence entre deux estimateurs de dĂ©bit.

Pour une meilleure compréhension des options valables, voici toutes les combinaisons possibles :
Mode absolu :

-

rateest opérateur rateest-bps

-

rateest opérateur rateest-pps

Mode absolu + Delta :

-

( rateest moins rateest-bps1 ) opérateur rateest-bps2

-

( rateest moins rateest-pps1 ) opérateur rateest-pps2

Mode relatif :

-

rateest1 opérateur rateest2 rateest-bps (sans débit !)

-

rateest1 opérateur rateest2 rateest-pps (sans débit !)

Mode relatif + Delta :

-

( rateest1 moins rateest-bps1 ) opérateur ( rateest2 moins rateest-bps2 )

-

( rateest1 moins rateest-pps1 ) opérateur ( rateest2 moins rateest-pps2 )

--rateest-delta

Pour chaque estimateur (en mode relatif ou absolu), calculer la diffĂ©rence entre le dĂ©bit du flux dĂ©terminĂ© par l’estimateur et la valeur statique spĂ©cifiĂ©e Ă  l’aide des options BPS/PPS. Si le dĂ©bit du flux est plus Ă©levĂ© que la valeur spĂ©cifiĂ©e en BPS/PPS,0 sera utilisĂ© Ă  la place d’une valeur nĂ©gative. Autrement dit, la valeur utilisĂ©e sera le rĂ©sultat de « max(0, rateest#_rate - rateest#_bps) ».

[ ! ] --rateest-lt

Correspond si le débit est inférieur au débit par estimateur donné.

[ ! ] --rateest-gt

Correspond si le débit est supérieur au débit par estimateur donné.

[ ! ] --rateest-eq

Correspond si le débit est égal au débit par estimateur donné.

Dans le mode dit « mode absolu », un seul estimateur est utilisĂ© et comparĂ© avec une valeur statique, tandis qu’en « mode relatif », deux estimateurs de dĂ©bit sont comparĂ©s avec un autre.
--rateest
nom

Nom de l’unique estimateur de dĂ©bit pour le mode absolu.

--rateest1 nom
--rateest2
nom

Les noms des deux estimateurs de débit 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 spĂ©cifiĂ©e les valeurs fournies par le(s) estimateur(s) en octets ou paquets par seconde. Voir la liste ci-avant pour connaĂźtre les options Ă  utiliser dans chaque cas. Il est possible d’ajouter un suffixe d’unitĂ© — les suffixes disponibles sont : bit, [kmgt]bit, [KMGT]ibit, Bps, [KMGT]Bps et [KMGT]iBps.

Exemple : voici la commande qui peut ĂȘtre utilisĂ©e pour router les connexions de donnĂ©es sortantes d’un serveur FTP sur deux lignes en fonction de la bande passante disponible au moment oĂč la connexion a Ă©tĂ© Ă©tablie :

# Estimer les débits 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 (spécifique à IPv4)

Ce module permet de vérifier la correspondance du domaine (realm) de routage. Les domaines de routage sont utilisés dans les configurations de routage complexes mettant en jeu des protocoles de routage dynamique comme BGP.
[ ! ] --realm valeur [ / masque ]

VĂ©rifier la correspondance d’un numĂ©ro de domaine donnĂ© (accompagnĂ© Ă©ventuellement d’un masque). Au lieu d’un numĂ©ro, valeur peut ĂȘtre un domaine nommĂ© issu de /etc/iproute2/rt_realms (dans ce cas, le masque n’est pas autorisĂ©). valeur et masque sont des entiers non signĂ©s de 4 octets et peuvent ĂȘtre spĂ©cifiĂ©s en dĂ©cimal, hexadĂ©cimal (en ajoutant le prĂ©fixe « 0x ») ou octal (en prĂ©fixant la valeur d’un zĂ©ro).

recent

Ce module permet de crĂ©er dynamiquement une liste d’adresses IP et de vĂ©rifier la correspondance de cette liste de diffĂ©rentes maniĂšres.

Par exemple, vous pouvez créer une liste « méchants » 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

SpĂ©cifier la liste Ă  utiliser pour les commandes. Si aucun nom n’est donnĂ©, DEFAULT sera utilisĂ©.

[ ! ] --set

Cette option permet d’ajouter l’adresse source du paquet Ă  la liste. Si l’adresse source est dĂ©jĂ  prĂ©sente dans la liste, l’entrĂ©e concernĂ©e sera mise Ă  jour. Cette option renvoie toujours « succĂšs » (ou « échec » si ! est spĂ©cifiĂ©).

--rsource

VĂ©rifier la correspondance de/sauvegarder l’adresse source de chaque paquet de la liste « recent ». Il s’agit du comportement par dĂ©faut.

--rdest

VĂ©rifier la correspondance de/sauvegarder l’adresse destination de chaque paquet de la liste « recent ».

--mask masque_sous_réseau

Cette option permet de spécifier le masque_sous_réseau qui sera appliqué à cette liste « recent ».

[ ! ] --rcheck

Cette option permet de vĂ©rifier si l’adresse source du paquet est actuellement dans la liste.

[ ! ] --update

Identique Ă  --rcheck , exceptĂ© que si la correspondance est vĂ©rifiĂ©e, l’horodatage « vu la derniĂšre fois » sera mis Ă  jour.

[ ! ] --remove

Cette option permet de vĂ©rifier 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 rĂšgle renverra « vrai ». Si l’adresse n’est pas trouvĂ©e, la rĂšgle renverra « faux ».

--seconds secondes

Cette option doit ĂȘtre utilisĂ©e en combinaison avec une des options --rcheck ou --update . Lorsqu’elle est utilisĂ©e, la correspondance ne sera vĂ©rifiĂ©e que si l’adresse est dans la liste et si elle a Ă©tĂ© vue au cours du dernier nombre de secondes donnĂ©.

--reap

Cette option ne peut ĂȘtre utilisĂ©e qu’en combinaison avec l’option --seconds . Lorsqu’elle est utilisĂ©e, les entrĂ©es plus anciennes que le nombre de secondes donnĂ© seront vidĂ©es.

--hitcount correspondances

Cette option ne peut ĂȘtre utilisĂ©e qu’en combinaison avec les options --rcheck ou --update . Lorsqu’elle est utilisĂ©e, la correspondance ne sera vĂ©rifiĂ©e que si l’adresse est dans la liste et si les paquets ont Ă©tĂ© interceptĂ©s un nombre de fois supĂ©rieur ou Ă©gal Ă  la valeur donnĂ©e. Elle peut ĂȘtre utilisĂ©e en combinaison avec l’option --seconds pour crĂ©er une condition de correspondance encore plus restrictive nĂ©cessitant un certain nombre d’interceptions dans un certain intervalle de temps.

--rttl

Cette option ne peut ĂȘtre utilisĂ©e qu’en combinaison avec une des options --rcheck ou --update . Lorsqu’elle est utilisĂ©e, la correspondance ne sera vĂ©rifiĂ©e que si l’adresse est dans la liste et si la durĂ©e de vie du paquet actuel correspond Ă  celle du paquet qui correspondait Ă  la rĂšgle --set . Elle peut s’avĂ©rer utile si vous rencontrer des problĂšmes avec des gens qui contrefont leur adresse source pour effectuer une attaque de type DoS Ă  l’aide de ce module dans le but d’empĂȘcher les autres utilisateurs d’accĂ©der Ă  votre site en vous envoyant des paquets boguĂ©s.

Exemples :

iptables -A FORWARD -m recent --name méchant --rcheck --seconds 60 -j DROP

iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name méchant --set -j DROP

/proc/net/xt_recent/* correspond aux listes actuelles d’adresses et d’informations Ă  propos de chaque entrĂ©e de chaque liste.

Chaque fichier dans /proc/net/xt_recent/ peut ĂȘtre consultĂ© pour dĂ©terminer la liste actuelle ou Ă©crit en utilisant les commandes suivantes pour modifier la liste :
echo +
adresse >/proc/net/xt_recent/DEFAULT

pour ajouter adresse Ă  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 entrées).

Le module lui-mĂȘme accepte les paramĂštres suivants (avec leur valeur par dĂ©faut) :
ip_list_tot
= 100

Nombre d’adresses mĂ©morisĂ©es par table.

ip_pkt_list_tot = 0

Le nombre de paquets par adresse mĂ©morisĂ©e. Ce paramĂštre est obsolĂšte depuis la version 3.19 du noyau Ă  partir de laquelle la taille de la table est calculĂ©e en fonction de la valeur de l’option --hitcount spĂ©cifiĂ©e.

ip_list_hash_size = 0

Taille de la table de hachage. 0 signifie que cette taille doit ĂȘtre calculĂ©e en fonction de ip_list_tot en arrondissant ce dernier Ă  la puissance de deux immĂ©diatement supĂ©rieure (si ip_list_tot possĂšde sa valeur par dĂ©faut 100 , ip_list_hash_size prendra la valeur 128 par dĂ©faut).

ip_list_perms = 0644

Permissions des fichiers /proc/net/xt_recent/* .

ip_list_uid = 0

UID numérique du propriétaire des fichiers /proc/net/xt_recent/* .

ip_list_gid = 0

GID numérique du propriétaire des fichiers /proc/net/xt_recent/* .

rpfilter

Ce module effectue un test par filtrage par chemin inverse sur un paquet. Si la rĂ©ponse Ă  un paquet devrait ĂȘtre envoyĂ©e par la mĂȘme interface que celle par laquelle il est arrivĂ©, le paquet correspondra. Notez qu’à la diffĂ©rence du filtrage par chemin inverse (rp_filter) intĂ©grĂ© au noyau, les paquets protĂ©gĂ©s par IPSec ne font pas l’objet d’un traitement particulier. Si tel est votre souhait, combinez cette vĂ©rification de correspondance avec celle du module « policy ». De mĂȘme, les paquets arrivant par l’interface loopback sont toujours autorisĂ©s. Cette vĂ©rification de correspondance ne peut ĂȘtre utilisĂ©e que dans la chaĂźne PREROUTING des tables raw ou mangle.
--loose

Cette option permet de spĂ©cifier que le test de filtrage par chemin inverse doit rĂ©ussir mĂȘme si le dispositif de sortie sĂ©lectionnĂ© n’est pas celui attendu.

--validmark

Utiliser aussi la valeur de « nfmark » du paquet lors de la détermination de la route du chemin inverse.

--accept-local

Cette option permet d’accepter les paquets arrivant du rĂ©seau avec une adresse source qui est aussi assignĂ©e Ă  la machine locale.

--invert

Cette option permet d’inverser le rĂ©sultat de la vĂ©rification de correspondance. Cette derniĂšre sera positive pour les paquets qui ont Ă©chouĂ© au test de filtrage par chemin inverse au lieu de l’ĂȘtre pour ceux qui ont rĂ©ussi le test.

L’exemple suivant montre comment journaliser et supprimer les paquets qui Ă©chouent 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 Ă©chouĂ©, sans journalisation :

iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP

rt (spécifique à IPv6)

Ce module permet de vĂ©rifier la correspondance de l’en-tĂȘte de routage IPv6.
[ ! ] --rt-type type

Cette option permet de vérifier la correspondance du type (numérique).

[ ! ] --rt-segsleft numéro [ : numéro ]

Cette option permet de vérifier la correspondance du champ « segments restants » (intervalle).

[ ! ] --rt-len taille

Cette option permet de vĂ©rifier la correspondance de la taille de cet en-tĂȘte.

--rt-0-res

Vérifier aussi la correspondance du champ réservé (type=0).

--rt-0-addrs adresse [ , adresse ...]

Cette option permet de vérifier 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 vĂ©rifier la correspondance des en-tĂȘtes du SCTP (Stream Control Transmission Protocol — protocole de transmission avec contrĂŽle 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 ĂȘtre comparĂ© s’il est dĂ©fini, sinon le drapeau doit ĂȘtre comparĂ© s’il n’est pas dĂ©fini.

Types de vérification de correspondance :

all

Correspondance si tous les types de fragment donnés sont présents et si les drapeaux correspondent.

any

Correspondance si au moins un des types de fragment donnés est présent avec les drapeaux donnés.

only

Correspondance si seuls les types de fragment donnés sont présents avec les drapeaux donnés 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 ĂȘtre Ă  « off », les capitales que le drapeau doit ĂȘtre Ă  « 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 vĂ©rifier la correspondance d’ensembles d’adresses IP qui peuvent ĂȘtre dĂ©finis Ă  l’aide de ipset (8).
[ ! ] --match-set nom_ensemble drapeau [ , drapeau ]...

oĂč drapeau [ , drapeau ]... est une liste de spĂ©cifications src et/ou dst sĂ©parĂ©es par des virgules et dont le nombre est limitĂ© à 6. Ainsi la rĂšgle

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 spĂ©cifiĂ©. Si le type d’ensemble de l’ensemble spĂ©cifiĂ© est unidimensionnel (par exemple ipmap), la rĂšgle correspondra aux paquets pour lesquels l’adresse source existe dans l’ensemble spĂ©cifiĂ©.

--return-nomatch

Si l’option --return-nomatch est spĂ©cifiĂ©e et si le type d’ensemble prend en charge le drapeau nomatch , la vĂ©rification de correspondance est inversĂ©e ; une correspondance vĂ©rifiĂ©e avec un Ă©lĂ©ment ayant le drapeau nomatch activĂ© renverra true , alors qu’une correspondance vĂ©rifiĂ©e avec un Ă©lĂ©ment simple reverra false .

! --update-counters

Si le drapeau --update-counters est inversĂ© par nĂ©gation, les compteurs d’octets et de paquets de l’élĂ©ment qui correspond dans l’ensemble ne seront pas mis Ă  jour. Par dĂ©faut, compteurs d’octets et de paquets sont mis Ă  jour.

! --update-subcounters

Si le drapeau --update-subcounters est inversĂ© par nĂ©gation, les compteurs d’octets et de paquets de l’élĂ©ment qui correspond dans l’ensemble des membres d’un type de liste d’ensemble ne seront pas mis Ă  jour. Par dĂ©faut, compteurs d’octets et de paquets sont mis Ă  jour.

[ ! ] --packets-eq valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur de paquets de l’élĂ©ment est Ă©gale Ă  la valeur donnĂ©e.

--packets-lt valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur de paquets de l’élĂ©ment est infĂ©rieure Ă  la valeur donnĂ©e.

--packets-gt valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur de paquets de l’élĂ©ment est supĂ©rieure Ă  la valeur donnĂ©e.

[ ! ] --bytes-eq valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur d’octets est Ă©gale Ă  la valeur donnĂ©e.

--bytes-lt valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur d’octets de l’élĂ©ment est infĂ©rieure Ă  la valeur donnĂ©e.

--bytes-gt valeur

Si le paquet correspond Ă  un Ă©lĂ©ment de l’ensemble, la correspondance ne sera vĂ©rifiĂ©e que si en plus la valeur du compteur d’octets de l’élĂ©ment est supĂ©rieure Ă  la valeur donnĂ©e.

Les drapeaux et options en rapport avec les compteurs de paquets et d’octets sont ignorĂ©s lorsque l’ensemble a Ă©tĂ© dĂ©fini sans prise en charge du comptage.

L’option --match-set peut ĂȘtre remplacĂ©e par --set si cela n’interfĂšre pas avec une option d’une autre extension.

L’utilisation de « -m set » nĂ©cessite 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 vĂ©rifier 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 vĂ©rifiĂ©e s’il existe un socket en Ă©coute Ă©tabli ou Ă  lien non nul (Ă©ventuellement avec une adresse non locale). La recherche est effectuĂ©e en utilisant le tuple packet des paquets TCP/UDP ou l’en-tĂȘte TCP/UDP original embedded dans un paquet d’erreur ICMP/ICPMv6.
--transparent

Ignorer les sockets non transparents.

--nowildcard

Ne pas ignorer les sockets liĂ©s Ă  « n’importe quelle » adresse. Par dĂ©faut, la correspondance de socket n’acceptera pas de socket en Ă©coute non liĂ©, car dans ce cas, des services locaux pourraient intercepter le trafic qui autrement aurait Ă©tĂ© redirigĂ©. Cette option prĂ©sente donc des implications de sĂ©curitĂ© lorsqu’elle est utilisĂ©e pour vĂ©rifier la correspondance d’un trafic redirigĂ© pour renvoyer de tels paquets Ă  la machine locale avec routage de politique. Lorsqu’on utilise la correspondance de socket pour implĂ©menter des mandataires complĂštement transparents liĂ©s Ă  des adresses non locales, il est recommandĂ© d’utiliser plutĂŽt l’option --transparent .

Exemple (en supposant que les paquets marqués 1 sont délivrés localement) :

-t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1

--restore-skmark

Cette option permet de dĂ©finir la marque du paquet avec la marque du socket correspondant. Elle peut ĂȘtre utilisĂ©e en combinaison avec les options --transparent et --nowildcard pour restreindre la correspondance des sockets au cas oĂč la marque du paquet est restaurĂ©e.

Exemple : une application ouvre 2 sockets transparents ( IP_TRANSPARENT ) et leur dĂ©finit une marque Ă  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

état

L’extension « state » est un sous-ensemble du module « conntrack ». Elle permet d’accĂ©der Ă  l’état du traçage de connexion pour le paquet concernĂ©.
[ ! ] --state état

état est une liste des états de connexion à comparer séparés par des virgules. Seulement ce sous-ensemble des états 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 vĂ©rifie la correspondance des paquets en fonction de certaines conditions statistiques. Il prend en charge deux modes distincts qui peuvent ĂȘtre dĂ©finis Ă  l’aide de l’option --mode .

Options prises en charge :
--mode
mode

Cette option permet de définir le mode de vérification de correspondance de la rÚgle ; les modes pris en charge sont random et nth .

[ ! ] --probability p

Cette option permet de dĂ©finir la probabilitĂ© pour qu’un paquet corresponde de maniĂšre alĂ©atoire. Elle ne peut ĂȘtre utilisĂ©e que dans le mode random . p doit ĂȘtre comprise entre 0.0 et 1.0. La granularitĂ© prise en charge possĂšde un incrĂ©ment de 1/2147483648.

[ ! ] --every n

VĂ©rifier la correspondance d’un paquet sur n . Cette option ne peut ĂȘtre utilisĂ©e que dans le mode nth (voir aussi l’option --packet ).

--packet p

Cette option permet de définir la valeur initiale du compteur pour le mode nth (0 <= p <= n-1, par défaut 0).

string

Ce module vérifie la correspondance de la chaßne donnée en utilisant une stratégie de comparaison de motifs. Il nécessite un noyau Linux de version supérieure ou égale à 2.6.14.
--algo
{ bm | kmp }

Cette option permet de sélectionner une stratégie de comparaison de motifs (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris).

--from décalage

Cette option permet de définir le décalage à partir duquel la comparaison sera effectuée. La valeur par défaut est 0.

--to décalage

Cette option permet de dĂ©finir le nombre d’octets, Ă  partir de l’octet 0 qui seront comparĂ©s. Autrement dit, dĂ©calage (comptĂ© Ă  partir de 0) sera le numĂ©ro du dernier octet Ă  ĂȘtre comparĂ© et la position maximale du dernier caractĂšre du motif . La valeur par dĂ©faut est la taille du paquet.

[ ! ] --string motif

Cette option permet de spécifier le motif à comparer.

[ ! ] --hex-string motif

Cette option permet de spécifier le motif à comparer en notation hexadécimale.

--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 hexadécimale peut contenir des caractÚres 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 : Ă©tant donnĂ© 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 rĂ©partie sur plusieurs blocs, auquel cas cet algorithme ne le trouvera pas.

Pour vous assurer qu’une telle situation ne se prĂ©sente jamais, utilisez plutĂŽt l’algorithme Knuth-Pratt-Morris (KMP). Pour rĂ©sumer, choisissez l’algorithme de recherche de chaĂźne appropriĂ© Ă  votre cas concret.

Par exemple, si vous utilisez le module pour le filtrage, NIDS ou tout filtrage similaire axĂ© sur la sĂ©curitĂ©, choisissez KMP. Par contre, si vous recherchez la performance — par exemple, si vous classez les paquets pour appliquer des politiques de qualitĂ© de service (QoS) — et si vous ne vous prĂ©occupez pas de la perte Ă©ventuelle de paquets correspondants divisĂ©s en plusieurs fragments, choisissez BM.

tcp

Ce module ne peut ĂȘtre utilisĂ© que si « --protocol tcp » a Ă©tĂ© spĂ©cifiĂ©. Il prend en charge les options suivantes :
[ ! ] --source-port , --sport port [ : port ]

Cette option permet de spĂ©cifier le port ou une plage de ports source. port peut ĂȘtre un nom de service ou un numĂ©ro de port. Il est aussi possible de spĂ©cifier une plage fermĂ©e de ports sous la forme premier : dernier . Si premier est omis, la plage dĂ©butera Ă  « 0 » ; si dernier est omis, la plage finira Ă  « 65535 ». --sport est un alias pratique de cette option.

[ ! ] --destination-port , --dport port [ : port ]

Cette option permet de spécifier 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 spĂ©cifiĂ©s. Le premier argument masque contient les drapeaux qui doivent ĂȘtre examinĂ©s, sous forme d’une liste sĂ©parĂ©e par des virgules ; le second argument comp est une liste des drapeaux sĂ©parĂ©s par des virgules qui doit ĂȘtre dĂ©finie. 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 défini et dont les drapeaux ACK, FIN et RST ne le sont pas.

[ ! ] --syn

Correspondance uniquement aux paquets dont le bit SYN est positionnĂ© et dont les bits ACK, RST et FIN ne le sont pas. De tels paquets sont utilisĂ©s pour demander l’ouverture d’une connexion TCP ; par exemple, bloquer de tels paquets entrant par une interface empĂȘchera les connexions TCP entrantes, alors que les connexions TCP sortantes ne seront pas affectĂ©es. Cette option est Ă©quivalente Ă  --tcp-flags SYN,RST,ACK,FIN SYN .

[ ! ] --tcp-option numéro

Correspondance si l’option TCP est dĂ©finie.

tcpmss

Ce module permet de vĂ©rifier la correspondance du champ TCP MSS (Maximum Segment Size — taille maximale de segment) de l’en-tĂȘte TCP. Il ne peut ĂȘtre utilisĂ© qu’avec les paquets TCP SYN ou SYN/ACK, car la MSS n’est nĂ©gociĂ©e que durant la « poignĂ©e de main » TCP au moment du lancement de la connexion.
[ ! ] --mss valeur [ : valeur ]

Cette option permet de vĂ©rifier la correspondance d’une valeur ou d’un intervalle de valeurs de TCP MSS. Si un intervalle est spĂ©cifiĂ©, la seconde valeur doit ĂȘtre supĂ©rieure ou Ă©gale Ă  la premiĂšre.

time

Ce module permet de vĂ©rifier la correspondance du moment d’arrivĂ©e d’un paquet avec un intervalle de temps donnĂ©. Toutes les options sont facultatives, mais elles sont combinĂ©es avec un ET logique si elles sont prĂ©sentes. Tous les temps sont interprĂ©tĂ©s en UTC par dĂ©faut.
--datestart
AAAA [ - MM [ - JJ [ T hh [ : mm [ : ss ]]]]]
--datestop
AAAA [ - MM [ - JJ [ T hh [ : mm [ : ss ]]]]]

Ces options permettent de spĂ©cifier un intervalle de temps, exprimĂ© en notation « T » de la norme ISO 8601, pendant lequel la correspondance d’un paquet sera vĂ©rifiĂ©e. L’intervalle de temps maximal est 1970-01-01T00:00:00 Ă  2038-01-19T04:17:07.

Si --datestart ou --datestop ne sont pas spécifiés, leur valeur par défaut sera 1970-01-01 et 2038-01-19, respectivement.

--timestart hh : mm [ : ss ]
--timestop
hh : mm [ : ss ]

Ces options permettent de spĂ©cifier un intervalle de temps journalier pendant lequel la correspondance d’un paquet sera vĂ©rifiĂ©e. L’intervalle de temps maximal est 00:00:00 Ă  23:59:59. Les valeurs commençant par zĂ©ro sont autorisĂ©es (comme « 06:03 ») et correctement interprĂ©tĂ©es en base 10.

[ ! ] --monthdays jour [ , jour ...]

Cette option permet de spĂ©cifier les jours du mois au cours desquels la correspondance d’un paquet sera vĂ©rifiĂ©e. Les valeurs possibles vont de 1 Ă  31 . Notez que spĂ©cifier 31 ne correspondra pas pour les mois qui n’ont pas de 31Ăšme jour ; mĂȘme remarque pour les mois de fĂ©vrier à 28 ou 29 jours.

[ ! ] --weekdays jour [ , jour ...]

Cette option permet de spĂ©cifier les jours de la semaine au cours desquels la correspondance d’un paquet sera vĂ©rifiĂ©e. Les valeurs possibles sont Mon , Tue , Wed , Thu , Fri , Sat et Sun ou des nombres de 1 Ă  7 , respectivement. Vous pouvez aussi utiliser des variantes Ă  deux caractĂšres ( Mo , Tu , etc.).

--contiguous

Lorsque --timestop est inférieur à --timestart , considérer 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 dĂ©terminer si un paquet correspond aux contraintes de temps.

À propos des zone horaires du noyau : Linux conserve systĂ©matiquement l’heure systĂšme en UTC. Au dĂ©marrage, l’heure systĂšme est initialisĂ©e Ă  partir d’une source de temps de rĂ©fĂ©rence. Lorsque cette source de temps n’a pas d’informations Ă  propos de la zone horaire, comme l’horloge CMOS RTC d’x86, la zone UTC sera prĂ©sumĂ©e. Si la source de temps n’est pas en UTC, l’espace utilisateur devra fournir l’heure systĂšme et la zone horaire correctes au noyau lorsqu’il aura obtenu cette information.

L’heure locale est une fonctionnalitĂ© qui s’ajoute Ă  l’heure systĂšme (indĂ©pendante de la zone horaire). Chaque processus possĂšde sa propre idĂ©e du temps local dĂ©fini Ă  l’aide de la variable d’environnement TZ . Le noyau possĂšde aussi sa propre variable exprimant le dĂ©calage de la zone horaire. La variable d’environnement en espace utilisateur TZ spĂ©cifie comment l’heure systĂšme basĂ©e sur UTC est affichĂ©e, par exemple lorsque vous exĂ©cutez date (1) ou ce qu’affiche votre horloge de bureau. La chaĂźne TZ peut prĂ©senter des dĂ©calages diffĂ©rents 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’étĂ©) change. La variable du noyau exprimant le dĂ©calage de la zone horaire lui permet de convertir des temps en provenance de sources non UTC, comme les systĂšmes de fichiers FAT, vers des temps UTC (car c’est ces derniers qu’utilise le reste du systĂšme).

Le problĂšme avec la zone horaire du noyau rĂ©side dans le fait que les distributions Linux peuvent ignorer la dĂ©finition de la zone horaire du noyau et ne dĂ©finir que l’heure systĂšme. MĂȘme si une distribution particuliĂšre dĂ©finit la zone horaire au dĂ©marrage, elle ne maintient en gĂ©nĂ©ral pas Ă  jour le dĂ©calage de la zone horaire du noyau qui change avec l’heure d’étĂ©. ntpd (8) n’affectant pas la zone horaire du noyau, il est inutile de l’exĂ©cuter pour rĂ©soudre ce problĂšme. Ainsi, il est possible d’avoir une zone horaire toujours Ă©gale Ă  +0000 ou fausse pendant la moitiĂ© de l’annĂ©e ; c’est pourquoi l’utilisation de --kerneltz est fortement dĂ©conseillĂ©e .

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 période 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 premiùre seconde du jour suivant :

-m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59

Pendant la pause déjeuner :

-m time --timestart 12:30 --timestop 13:30

Le quatriÚme vendredi du mois :

-m time --weekdays Fr --monthdays 22,23,24,25,26,27,28

Notez que cet exemple exploite une certaine propriĂ©tĂ© mathĂ©matique. Il n’est pas possible d’exprimer « quatriĂšme jeudi OU quatriĂšme vendredi » Ă  l’aide d’une seule rĂšgle ; il est cependant possible de le faire Ă  l’aide de plusieurs rĂšgles.

Vérifier une correspondance à cheval sur deux jours peut donner des résultats inattendus. Par exemple,

« -m time --weekdays Mo --timestart 23:00 --timestop 01:00 » correspondra Ă  la pĂ©riode du lundi pendant une heure de minuit Ă  1 heure du matin et pendant une autre heure Ă  partir de 23 heures. Si ce n’est pas ce que vous souhaitez, par exemple si vous voulez « vĂ©rifier la correspondance pendant deux heures Ă  partir du lundi à 23 heures », vous devez ajouter l’option --contiguous dans cet exemple.

tos

Ce module vĂ©rifie la correspondance du champ sur 8 bits « Type of Service » de l’en-tĂȘte IPv4 (bits « Precedence » inclus) ou du champ « Priority » (aussi sur 8 bits) de l’en-tĂȘte IPv6.
[ ! ] --tos valeur [ / masque ]

Cette option permet de vĂ©rifier la correspondance des paquets avec la valeur de marque TOS donnĂ©e. Si un masque est spĂ©cifiĂ©, il est combinĂ© Ă  l’aide d’un ET logique avec la marque TOS avant la comparaison.

[ ! ] --tos symbole

Vous pouvez aussi spĂ©cifier un nom symbolique lors de la recherche de correspondance Ă  l’aide du module tos pour IPv4. La liste des noms TOS reconnus peut ĂȘtre obtenue en appelant iptables suivi de -m tos -h . Notez que cela implique un masque de 0x3F, c’est-Ă -dire tous les bits sauf les bits ECN (Explicit Congestion Notification — notification explicite de congestion).

ttl (spécifique à IPv4)

Ce module vĂ©rifie la correspondance du champ durĂ©e de vie de l’en-tĂȘte IP.
[ ! ] --ttl-eq ttl

Correspondance de la valeur de TTL donnée.

--ttl-gt ttl

Correspondance si la durée de vie du paquet est supérieure à la valeur de TTL donnée.

--ttl-lt ttl

Correspondance si la durée de vie du paquet est inférieure à la valeur de TTL donnée.

u32

Ce module teste si des quantitĂ©s de4 octets maximum extraites d’un paquet possĂšdent les valeurs spĂ©cifiĂ©es. SpĂ©cifier ce qu’il faut extraire suffit en gĂ©nĂ©ral pour trouver des donnĂ©es Ă  des dĂ©calages donnĂ©s dans les en-tĂȘtes tcp ou les charges utiles.
[ ! ] --u32 tests

L’argument consiste en un programme dans un langage simple dĂ©crit ci-aprĂšs.

tests := emplacement "=" valeur | tests "&&" emplacement "=" valeur

valeur := intervalle | valeur "," intervalle

intervalle := nombre | nombre ":" nombre

un nombre seul, n , est interprĂ©tĂ© comme n:n . n:m est interprĂ©tĂ© comme l’intervalle des nombres >=n et <=m .

emplacement := nombre | emplacement opérateur nombre

opérateur := "&" | "<<" | ">>" | "@"

Les opĂ©rateurs & , << , >> et && ont la mĂȘme signification qu’en C. L’opĂ©rateur = est rĂ©ellement un opĂ©rateur d’appartenance Ă  un ensemble et la syntaxe des valeurs dĂ©crit un ensemble. L’opĂ©rateur @ permet de se dĂ©placer vers l’en-tĂȘte suivant et est dĂ©crit plus loin.

Il existe actuellement des limites d’implĂ©mentation 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 opérateurs) par emplacement

Pour expliquer la signification d’un emplacement, imaginez la machine suivante qui l’interprùte. Il y a trois registres :

A est de type char * , initialement l’adresse de l’en-tĂȘte IP

B et C sont des entiers non signés sur 32 bits, initialement égaux à 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 exĂ©cutez l’instruction nombre

Tout accÚs à la mémoire en dehors de [skb->data,skb->end] fera échouer la recherche de correspondance. Sinon, le résultat du calcul est la valeur finale de C.

Les blancs sont autorisĂ©s mais non obligatoires dans les tests. Cependant, les caractĂšres prĂ©sents dans ces derniers sont susceptibles de nĂ©cessiter une protection vis-Ă -vis de l’interprĂ©teur de commande, et il est donc recommandĂ© d’entourer les arguments de guillemets.

Exemple :

rechercher les paquets IP d’une taille totale supĂ©rieure ou Ă©gale Ă  256 octets.

L’en-tĂȘte IP contient un champ longueur totale dans les octets 2 et 3.

--u32 " 0 & 0xFFFF = 0x100:0xFFFF "

lire les octets 0 à 3

les combiner Ă  l’aide d’un ET logique avec 0xFFFF (ce qui donne les octets 2 et 3) et vĂ©rifie si le rĂ©sultat est dans la plage [0x100:0xFFFF].

Exemple plus réaliste, donc plus compliqué :

rechercher les paquets avec un icmp de type 0

Tout d’abord, vĂ©rifier s’il s’agit d’un paquet ICMP ; c’est le cas si l’octet 9 (protocole) est Ă©gal à 1.

--u32 " 6 & 0xFF = 1 && ...

lire les octets 6 à 9, utiliser l’opĂ©rateur & pour supprimer les octets 6 à 8 et comparer le rĂ©sultat avec 1. VĂ©rifier ensuite qu’il ne s’agit pas d’un fragment (si c’est le cas, il pourra appartenir Ă  un tel paquet, mais ce n’est pas systĂ©matique). Notez que ce test est en gĂ©nĂ©ral nĂ©cessaire si vous voulez vĂ©rifier la correspondance de toute donnĂ©e au delĂ  de l’en-tĂȘte 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 à 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 aprĂšs l’en-tĂȘte IP (le type) est à 0. C’est ici que nous devons utiliser l’opĂ©rateur « @ ». La taille de l’en-tĂȘte IP (IHL) en mots de 32 bits est stockĂ©e dans la moitiĂ© droite de l’octet 0 de l’en-tĂȘte IP lui-mĂȘme.

... 0 >> 22 & 0x3C @ 0 >> 24 = 0 "

Le premier 0 signifie « lire les octets 0 à 3 », et >>22 « dĂ©caler le rĂ©sultat de 22 bits vers la droite. Un dĂ©calage de 24 bits donnerait le premier octet ; donc un dĂ©calage de seulement 22 bits correspond Ă  quatre fois cela plus quelques octets supplĂ©mentaires. Ensuite, &3C Ă©limine les deux bits supplĂ©mentaires Ă  droite et les quatre premiers bits du premier octet. Par exemple, si IHL=5, la taille de l’en-tĂȘte 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 dĂ©calage dans le paquet et lire quatre octets Ă  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’à dĂ©caler la valeur de 24 vers la droite pour tout Ă©liminer, sauf le premier octet, et Ă  comparer le rĂ©sultat à 0.

Exemple :

Les octets 8 à 12 de la charge utile TCP ont pour valeur 1, 2, 5 ou 8.

Tout d’abord, vĂ©rifier qu’il s’agit d’un paquet TCP (similaire Ă  ICMP).

--u32 " 6 & 0xFF = 6 && ...

Ensuite, vĂ©rifier 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-tĂȘte IP. L’opĂ©rateur @ fait du rĂ©sultat le nouveau dĂ©calage dans le paquet qui correspond au dĂ©but de l’en-tĂȘte TCP. La taille de l’en-tĂȘte TCP (toujours en mots de 32 bits) est stockĂ©e dans la moitiĂ© gauche de l’octet 12 de l’en-tĂȘte TCP. 12>>26&3C convertit cette longueur en octets (comme prĂ©cĂ©demment pour l’en-tĂȘte IP). « @ » fait du rĂ©sultat le nouveau dĂ©calage qui correspond au dĂ©but de la charge utile TCP. Enfin, « 8 » lit les octets 8 à 12 de la charge utile et = vĂ©rifie si le rĂ©sultat est Ă©gal à 1, 2, 5 ou 8.

udp

Ce module ne peut ĂȘtre utilisĂ© que si l’option « --protocol udp » est spĂ©cifiĂ©e. Il prend en charge les options suivantes :
[ ! ] --source-port , --sport port [ : port ]

Cette option permet de spĂ©cifier le port ou la plage de ports source. Voir la description de l’option --source-port de l’extension TCP pour les dĂ©tails.

[ ! ] --destination-port , --dport port [ : port ]

Cette option permet de spĂ©cifier le port ou la plage de ports destination. Voir la description de l’option --destination-port de l’extension TCP pour les dĂ©tails.

ACTIONS ÉTENDUES

iptables peut utiliser des modules d’action Ă©tendue ; les actions suivantes sont incluses dans la distribution standard :

AUDIT

Cette action crĂ©e des enregistrements d’audit pour les paquets qui l’atteignent. Elle permet d’enregistrer les paquets acceptĂ©s, Ă©liminĂ©s et rejetĂ©s. Voir auditd (8) pour plus de dĂ©tails.
--type
{ accept | drop | reject }

Cette option permet de dĂ©finir le type d’enregistrement d’audit. À partir de Linux 4.12, cette option n’a plus d’effet sur les messages d’audit gĂ©nĂ©rĂ©s. Elle est encore acceptĂ©e par iptables pour des raisons de compatibilitĂ©, mais ignorĂ©e.

Exemple :

iptables -N AUDIT_DROP

iptables -A AUDIT_DROP -j AUDIT

iptables -A AUDIT_DROP -j DROP

CHECKSUM

Cette action contourne sĂ©lectivement les applications dĂ©fectueuses ou obsolĂštes. Elle ne peut ĂȘtre utilisĂ©e que dans la table mangle .
--checksum-fill

Cette option permet de calculer et inscrire la somme de contrĂŽle dans un paquet qui en est dĂ©pourvu. Elle s’avĂšre particuliĂšrement utile si vous devez contourner des applications anciennes comme les clients dhcp qui ne gĂšrent pas bien les dĂ©chargements de somme de contrĂŽle, et ne souhaitez pas dĂ©sactiver le dĂ©chargement de somme de contrĂŽle dans votre dispositif.

CLASSIFY

Cette action permet de dĂ©finir 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) spĂ©cifique.
--set-class
majeur : mineur

Cette option permet de dĂ©finir les valeurs majeure et mineure de la classe. Les valeurs sont toujours interprĂ©tĂ©es en hexadĂ©cimal, mĂȘme si le prĂ©fixe 0x n’est pas spĂ©cifiĂ©.

CLUSTERIP (spécifique à IPv4)

Cette action permet de configurer une grappe simple de nƓuds qui partagent une adresse IP et MAC sans rĂ©partiteur de charge explicite en frontal. Les connexions sont rĂ©parties statistiquement entre les nƓuds de cette grappe.

Notez que l’action CLUSTERIP est considĂ©rĂ©e comme obsolĂšte par rapport au module de correspondance cluster qui est plus souple et non limitĂ© Ă  IPv4.

--new

Cette option permet de créer un nouveau ClusterIP. Vous devez toujours la définir dans la premiÚre rÚgle concernant un ClusterIP donné.

--hashmode mode

Cette option permet de spécifier le mode de hachage. Les valeurs possibles sont sourceip , sourceip-sourceport ou sourceip-sourceport-destport .

--clustermac mac

Cette option permet de spĂ©cifier l’adresse MAC du ClusterIP. Ce doit ĂȘtre une adresse multicast de la couche liaison.

--total-nodes nombre

Cette option permet de spĂ©cifier le nombre total de nƓuds que comporte cette grappe.

--local-node numéro

Cette option permet de spĂ©cifier le numĂ©ro de nƓud de la machine locale au sein de cette grappe.

--hash-init aléa

Cette option permet de spĂ©cifier la graine alĂ©atoire utilisĂ©e pour l’initialisation du hachage.

CONNMARK

Cette action définit la valeur (sur 32 bits) de la marque netfilter associée à une connexion.
--set-xmark
valeur [ / masque ]

Cette option met à zéro les bits donnés 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 donnés. La nouvelle valeur de la marque de paquet nfmark est déterminée comme suit :

ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)

Autrement dit, masque_ct dĂ©termine les bits Ă  mettre Ă  zĂ©ro et masque_nf les bits de nfmark Ă  combiner Ă  l’aide d’un XOR avec la ctmark. La valeur par dĂ©faut 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 donnés. La nouvelle valeur de ctmark est déterminée comme suit :

nfmark = (nfmark & ~ nfmask ) ^ (ctmark & ctmask );

Autrement dit, masque_nf dĂ©termine les bits Ă  mettre Ă  zĂ©ro et masque_ct les bits de ctmark Ă  combiner Ă  l’aide d’un XOR avec la nfmark. La valeur par dĂ©faut de masque_ct et masque_nf est 0xFFFFFFFF.

--restore-mark ne peut ĂȘtre utilisĂ©e que dans la table mangle .

Les mnémoniques valables pour --set-xmark sont les suivants :
--and-mark
bits

Effectuer un ET logique entre la ctmark et bits (le mnĂ©monique pour --set-xmark 0/ invbits oĂč invbits est la nĂ©gation binaire de bits ).

--or-mark bits

Effectuer un OU logique entre la ctmark et bits (le mnémonique pour --set-xmark bits / bits ).

--xor-mark bits

Effectuer un XOR logique entre la ctmark et bits (le mnémonique pour --set-xmark bits /0 ).

--set-mark valeur [ / masque ]

Cette option permet de définir la marque de connexion. Si un masque est spécifié, seuls les bits correspondant aux bits positionnés du masque seront modifiés.

--save-mark [ --mask masque ]

Cette option permet de copier la marque de paquet nfmark vers la marque de connexion ctmark. Si un masque est spécifié, seuls les bits correspondant aux bits positionnés du masque seront copiés.

--restore-mark [ --mask masque ]

Cette option permet de copier la marque de connexion ctmark vers la marque de paquet nfmark. Si un masque est spĂ©cifiĂ©, seuls les bits correspondant aux bits positionnĂ©s du masque seront copiĂ©s. Cette option ne peut ĂȘtre utilisĂ©e que dans la table mangle .

CONNSECMARK

Cette action permet de copier les marquages de sĂ©curitĂ© depuis les paquets vers les connexions (si non Ă©tiquetĂ©es), et depuis les connexions vers les paquets (lĂ  encore, si non Ă©tiquetĂ©s). UtilisĂ©e en gĂ©nĂ©ral en combinaison avec l’action SECMARK, elle peut ĂȘtre utilisĂ©e dans la table security (Ă  des fins de rĂ©trocompatibilitĂ© avec les noyaux plus anciens, elle peut aussi ĂȘtre utilisĂ©e dans la table mangle ).

--save

Si le paquet possĂšde un marquage de sĂ©curitĂ©, copier ce dernier vers la connexion si elle n’est pas marquĂ©e.

--restore

Si la connexion possĂšde un marquage de sĂ©curitĂ©, copier ce dernier vers le paquet s’il n’en possĂšde pas dĂ©jĂ  un.

CT

L’action CT permet de dĂ©finir les paramĂštres d’un paquet ou de la connexion qui lui est associĂ©e. Elle attache un « modĂšle » d’entrĂ©e de traçage de connexion au paquet, ce modĂšle Ă©tant ensuite utilisĂ© par le cƓur de conntrack lors de l’initialisation d’une nouvelle entrĂ©e ct. Cette action ne peut donc ĂȘtre utilisĂ©e que dans la table raw .
--notrack

Désactiver le traçage de connexion pour ce paquet.

--helper nom

Utiliser l’assistant identifiĂ© Ă  l’aide de nom pour la connexion. Utiliser cette option est plus souple que charger les modules d’assistant de conntrack avec des ports prĂ©dĂ©finis.

--ctevents evĂšnement [ , ...]

Ne gĂ©nĂ©rer que les Ă©vĂšnements de conntrack spĂ©cifiĂ©s pour cette connexion. Les types d’évĂšnement valables sont : new , related , destroy , reply , assured , protoinfo , helper , mark (ce type d’évĂšnement fait rĂ©fĂ©rence Ă  la ctmark, pas Ă  la nfmark), natseqinfo et secmark (ctsecmark).

--expevents évÚnement [ , ...]

Ne gĂ©nĂ©rer que les Ă©vĂ©nements d’attente spĂ©cifiĂ©s pour cette connexion. Le type d’évĂšnement valable est : new .

--zone-orig { id | mark }

Assigner ce paquet Ă  la zone id pour le trafic venant de la direction ORIGINAL et n’effectuer des recherches que dans cette zone. Si mark est spĂ©cifiĂ© Ă  la place de id , la zone est dĂ©rivĂ©e de la marque de paquet nfmark.

--zone-reply { id | mark }

Assigner ce paquet Ă  la zone id pour le trafic venant de la direction REPLY et n’effectuer des recherches que dans cette zone. Si mark est spĂ©cifiĂ© Ă  la place de id , la zone est dĂ©rivĂ©e de la marque de paquet nfmark.

--zone { id | mark }

Assigner ce paquet Ă  la zone id et n’effectuer des recherches que dans cette zone. Si mark est spĂ©cifiĂ© Ă  la place de id , la zone est dĂ©rivĂ©e de la marque de paquet nfmark. Par dĂ©faut les paquets ont pour zone 0. Cette option s’applique aux deux directions.

--timeout nom

Utiliser la politique de dĂ©lai d’expiration identifiĂ©e par nom pour la connexion. Cette option permet une dĂ©finition plus souple de la politique de dĂ©lai d’expiration que les valeurs de dĂ©lai d’expiration global disponibles dans /proc/sys/net/netfilter/nf_conntrack_*_timeout_* .

DNAT

Cette action ne peut ĂȘtre utilisĂ©e que dans la table nat , dans les chaĂźnes PREROUTING et OUTPUT , et dans les chaĂźnes dĂ©finies par l’utilisateur qui sont appelĂ©es depuis ces chaĂźnes. Elle indique que l’adresse de destination du paquet doit ĂȘtre modifiĂ©e (et que tous les paquets ultĂ©rieurs de cette connexion seront aussi modifiĂ©s), et que l’examen des rĂšgles doit cesser. Elle accepte les options suivantes :
--to-destination
[ adr_ip [ - adr_ip ]][ : port [ - port [ / port_de_base ]]]

Cette option permet de spĂ©cifier une adresse IP de destination seule ou une plage inclusive d’adresses IP. Il est possible d’indiquer une plage de ports si la rĂšgle spĂ©cifie aussi un des protocoles suivants : tcp , udp , dccp ou sctp . Si aucune plage de ports n’est spĂ©cifiĂ©e, le port de destination ne sera jamais modifiĂ©. Si aucune adresse IP n’est spĂ©cifiĂ©e, seul le port de destination sera modifiĂ©. Si port_de_base est spĂ©cifiĂ©, la diffĂ©rence entre le port de destination d’origine et sa valeur sera utilisĂ©e comme dĂ©calage dans la plage de ports de redirection, ce qui permet de crĂ©er des plages de redirection de ports dĂ©calĂ©s (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 aléatoire la redirection du port source (noyaux >= 2.6.22).

--persistent

Attribuer Ă  un client les mĂȘmes 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 (spécifique à IPv6)

Cette action permet d’effectuer une translation IPv6 Ă  IPv6 sans conservation d’état (stateless) du prĂ©fixe rĂ©seau de destination (comme dĂ©crit 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
[ préfixe/taille]

Définir le préfixe source que vous voulez traduire, ainsi que sa taille.

--dst-pfx [ préfixe/taille]

Définir le préfixe 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-ĂȘtre activer le mandataire d’hĂŽtes voisins IPv6 :

sysctl -w net.ipv6.conf.all.proxy_ndp=1

Vous devez aussi utiliser l’action NOTRACK pour dĂ©sactiver le traçage de connexion pour les flux traduits.

DSCP

Cette action modifie la valeur des bits DSCP (Differentiated Services Code Point — valeur de code des services diffĂ©renciĂ©s) au sein de l’en-tĂȘte TOS (Type of Service — type de service) du paquet IPv4. Comme elle manipule un paquet, elle ne peut ĂȘtre utilisĂ©e que dans la table mangle .
--set-dscp
valeur

Affecter une valeur numérique au champ DSCP (en décimal ou hexadécimal).

--set-dscp-class classe

Affecter une classe de DiffServ (Differentiated Services) au champ DSCP.

ECN (spécifique à IPv4)

Cette action contourne de maniĂšre sĂ©lective les trous noirs ECN (Explicit Congestion Notification — notification explicite de congestion) connus. Elle ne peut ĂȘtre utilisĂ©e que dans la table mangle .
--ecn-tcp-remove

Supprimer tous les bits ECN de l’en-tĂȘte TCP. Bien entendu, cette option ne peut ĂȘtre utilisĂ©e qu’en combinaison avec -p tcp .

HL (spécifique à IPv6)

Cette action permet de modifier le champ « Hop Limit » de l’en-tĂȘte IPv6. Le champ « Hop Limit » est similaire Ă  la valeur de TTL (Time To Live — durĂ©e de vie) en IPv4. DĂ©finir ou incrĂ©menter la valeur du champ « Hop Limit » peut s’avĂ©rer trĂšs dangereux et il faut par consĂ©quent Ă©viter de le faire Ă  tout prix. Cette action ne peut ĂȘtre utilisĂ©e que dans la table mangle .

Ne définissez ou incrémentez jamais cette valeur pour les paquets qui quittent votre réseau local !
--hl-set
valeur

Définir « Hop Limit » à valeur .

--hl-dec valeur

Décrémenter « Hop Limit » un nombre de fois égal à valeur .

--hl-inc valeur

Incrémenter « Hop Limit » un nombre de fois égal à valeur .

HMARK

Cette action est similaire Ă  MARK , c’est-Ă -dire qu’elle dĂ©finit la marque fwmark (marque de pare-feu), mais que cette derniĂšre est calculĂ©e en hachant le sĂ©lecteur de paquet choisi. Vous devez aussi spĂ©cifier la plage de marquage et Ă©ventuellement le dĂ©calage Ă  partir duquel dĂ©marrer. Les messages d’erreur ICMP (Internet Control Message Protocol — Protocole de message de contrĂŽle sur Internet) sont inspectĂ©s et utilisĂ©s 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 à la place des sélecteurs de paquet.

--hmark-mod valeur (doit ĂȘtre supĂ©rieure à 0)

Modulus pour le calcul du hachage (afin de limiter la plage de marques possibles).

--hmark-offset valeur

Décalage à partir duquel démarrer les marques.

Pour une utilisation avancĂ©e, au lieu d’utiliser --hmark-tuple , vous
pouvez spécifier

des préfixes et des masques personnalisés :

--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 hexadécimal.

--hmark-dport-mask valeur

Un masque de port de destination sur 16 bits en hexadécimal.

--hmark-spi-mask valeur

Un champ de 32 bits avec le masque spi.

--hmark-proto-mask valeur

Un champ sur 8 bits avec le numéro du protocole de la couche 4.

--hmark-rnd valeur

Une valeur personnalisée 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 dĂ©tecter le moment oĂč des interfaces sont inactives depuis un certain temps. Les minuteurs sont identifiĂ©s par des Ă©tiquettes et sont créés lorsqu’une rĂšgle est dĂ©finie avec une nouvelle Ă©tiquette. Les rĂšgles acceptent aussi une valeur de dĂ©lai (en secondes) en tant qu’option. Si plusieurs rĂšgles utilisent la mĂȘme Ă©tiquette de minuteur, ce dernier sera redĂ©marrĂ© chaque fois qu’une de ces rĂšgles s’applique Ă  un paquet. Une entrĂ©e est créée pour chaque minuteur dans sysfs (5). Cet attribut contient le temps restant avant expiration du minuteur. Les attributs sont situĂ©s sous la classe xt_idletimer :

/sys/class/xt_idletimer/timers/<étiquette>

Lorsque le minuteur arrive Ă  expiration, le module de l’action envoie une notification sysfs (5) vers l’espace utilisateur, ce dernier pouvant alors dĂ©cider quoi faire (par exemple se dĂ©connecter pour Ă©conomiser de l’énergie).
--timeout
valeur

La valeur de délai en secondes aprÚs laquelle la notification sera envoyée.

--label chaĂźne

Un identifiant unique pour chaque minuteur. La taille maximale de la chaßne est de 27 caractÚres.

LED

Cette action permet de crĂ©er un dĂ©clencheur de LED (Light-Emitting Diode — diode Ă©lectroluminescente) qui peut alors ĂȘtre reliĂ© aux voyants de l’indicateur du systĂšme en les allumant ou les faisant clignoter lorsque certains paquets traversent le systĂšme. Par exemple, une LED pourrait s’allumer pendant quelques minutes chaque fois qu’une connexion SSH est Ă©tablie avec la machine locale. Le comportement du dĂ©clencheur peut ĂȘtre contrĂŽlĂ© Ă  l’aide des options suivantes :
--led-trigger-id
nom

Le nom donné au déclencheur de LED. Le véritable nom du déclencheur sera préfixé par « netfilter- ».

--led-delay ms

Le temps (en millisecondes) pendant lequel la LED devra rester allumĂ©e lorsqu’un paquet arrive avant d’ĂȘtre Ă©teinte. La valeur par dĂ©faut est 0 (clignoter aussi vite que possible). Pour que la LED reste allumĂ©e en permanence une fois activĂ©e, utilisez la valeur spĂ©ciale inf (dans ce cas, le dĂ©clencheur devra ĂȘtre dĂ©tachĂ© et attachĂ© Ă  nouveau manuellement au dispositif Ă  LED pour Ă©teindre cette derniĂšre).

--led-always-blink

Toujours faire clignoter la LED Ă  l’arrivĂ©e d’un paquet, mĂȘme si cette derniĂšre est dĂ©jĂ  allumĂ©e. Cette option permet de notifier l’arrivĂ©e de nouveaux paquets, mĂȘme avec de grandes valeurs de dĂ©lai (autrement, le dĂ©lai serait simplement prolongĂ© de maniĂšre silencieuse).

Exemple :
Créer un déclencheur de LED pour le trafic SSH entrant :

iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh

puis relier le nouveau déclencheur à 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 utilisĂ©e dans une rĂšgle, le noyau Linux enregistre certaines informations Ă  propos de tous les paquets qui correspondent (comme la plupart des champs d’en-tĂȘte IP/IPv6) dans le journal du noyau (d’oĂč elles peuvent ĂȘtre consultĂ©es Ă  l’aide de dmesg(1) ou lues dans le journal du systĂšme).

Cette action est « non terminale », c’est-Ă -dire que le parcours des rĂšgles continue Ă  la rĂšgle suivante. Ainsi, si vous voulez journaliser les paquets que vous refusez, utilisez deux rĂšgles sĂ©parĂ©es avec les mĂȘmes critĂšres de correspondance, la premiĂšre utilisant l’action LOG et la seconde la cible DROP (ou REJECT ).
--log-level
niveau

Le niveau de journalisation qui peut ĂȘtre un nombre (spĂ©cifique au systĂšme) ou un mnĂ©monique. Les valeurs possibles sont (dans l’ordre dĂ©croissant des prioritĂ©s) : emerg , alert , crit , error , warning , notice , info ou debug .

--log-prefix préfixe

Faire dĂ©buter les messages de journalisation par le prĂ©fixe spĂ©cifiĂ© (jusqu’à 29 lettres de long), ce qui permet de distinguer les messages dans les journaux.

--log-tcp-sequence

Journaliser les numéros de séquence TCP. Cette option induit un risque de sécurité si le journal est accessible en lecture pour les utilisateurs.

--log-tcp-options

Journaliser les options de l’en-tĂȘte du paquet TCP.

--log-ip-options

Journaliser les options de l’en-tĂȘte du paquet IP/IPv6.

--log-uid

Journaliser l’UID du processus qui a gĂ©nĂ©rĂ© le paquet.

--log-macdecode

Journaliser les adresses MAC et le protocole.

MARK

Cette action permet de dĂ©finir la valeur de la marque de Netfilter associĂ©e au paquet. Par exemple, vous pouvez l’utiliser conjointement avec un routage basĂ© sur la marque de pare-feu fwmark (nĂ©cessite iproute2). Si vous envisagez de le faire, notez que pour affecter le routage, la marque doit ĂȘtre dĂ©finie soit dans la chaĂźne PREROUTING , soit dans la chaĂźne OUTPUT de la table mangle . La taille du champ de la marque est de 32 bits.
--set-xmark
valeur [ / masque ]

Mettre Ă  zĂ©ro les bits donnĂ©s par masque et combiner valeur avec la marque de paquet (« nfmark ») Ă  l’aide d’un XOR. Si masque est omis, sa valeur par dĂ©faut est 0xFFFFFFFF.

--set-mark valeur [ / masque ]

Mettre Ă  zĂ©ro les bits donnĂ©s par masque et combiner valeur avec la marque de paquet Ă  l’aide d’un OU logique. Si masque est omis, sa valeur par dĂ©faut est 0xFFFFFFFF.

Les mnémoniques suivants sont disponibles :
--and-mark
bits

Combiner la nfmark avec bits Ă  l’aide d’un ET logique (c’est le mnĂ©monique pour --set-xmark 0/ invbits oĂč invbits est la nĂ©gation logique de bits ).

--or-mark bits

Combiner la nfmark avec bits Ă  l’aide d’un OU logique (c’est le mnĂ©monique pour --set-xmark bits / bits ).

--xor-mark bits

Combiner la nfmark avec bits Ă  l’aide d’un XOR (c’est le mnĂ©monique pour --set-xmark bits /0 ).

MASQUERADE

Cette action n’est valable que dans la table nat et la chaĂźne POSTROUTING . Elle ne doit ĂȘtre utilisĂ©e que pour les connexions avec adresse IP dynamiquement assignĂ©e (dialup — accĂšs commutĂ©) : si vous avez une adresse IP statique, vous devez utiliser l’action SNAT . La « mascarade » (masquerading) consiste Ă  spĂ©cifier 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 dĂ©sactivĂ©e. C’est un comportement appropriĂ© lorsque les accĂšs commutĂ©s ultĂ©rieurs ont peu de chance d’avoir la mĂȘme adresse d’interface (et que les connexions Ă©tablies seront perdues de toute façon).
--to-ports
port [ - port ]

Cette option permet de spĂ©cifier une plage de ports source Ă  utiliser, outrepassant les heuristiques de sĂ©lection de port source de SNAT (voir ci-avant). Elle ne peut ĂȘtre utilisĂ©e que si la rĂšgle spĂ©cifie aussi un des protocoles suivants : tcp , udp , dccp ou sctp .

--random

Rendre alĂ©atoire la redirection de port source (noyaux de version >= 2.6.21). À partir de la version 5.0 du noyau, --random est identique Ă  --random-fully .

--random-fully

Rendre totalement aléatoire 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 rĂ©seau d’adresses vers un autre rĂ©seau d’adresses. Elle ne peut ĂȘtre utilisĂ©e que dans les rĂšgles de la table nat .
--to
adresse [ / masque ]

Cette option permet de spĂ©cifier le rĂ©seau d’adresses de redirection. L’adresse rĂ©sultante est construite de la maniĂšre suivante : tous les bits à 1 du masque sont remplacĂ©s par ceux de l’adresse de redirection spĂ©cifiĂ©e, et tous les bits à 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 utilisĂ©e dans une rĂšgle, le noyau Linux transmet le paquet au dorsal de journalisation chargĂ© pour le journaliser. Cette action est en gĂ©nĂ©ral utilisĂ©e conjointement avec nfnetlink_log comme dorsal de journalisation, lequel diffusera (multicast) le paquet Ă  l’aide d’un socket netlink vers le groupe de multidiffusion spĂ©cifiĂ©. 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-Ă -dire que le parcours des rĂšgles continue Ă  la rĂšgle suivante.
--nflog-group
groupe_netlink

Cette option permet de spĂ©cifier le groupe netlink (0–2^16-1) auquel les paquets sont envoyĂ©s (applicable seulement Ă  nfnetlink_log ). La valeur par dĂ©faut est 0.

--nflog-prefix préfixe

Cette option permet de spĂ©cifier un prĂ©fixe, d’une longueur maximale de 64 caractĂšres, Ă  ajouter au message de journalisation pour faciliter la discrimination des messages dans les journaux.

--nflog-range taille

Cette option n’ayant jamais fonctionnĂ©, utilisez --nflog-size Ă  la place.

--nflog-size taille

Cette option permet de spĂ©cifier le nombre d’octets qui doivent ĂȘtre copiĂ©s vers l’espace utilisateur (applicable seulement pour nfnetlink_log ). Des instances de nfnetlink_log pouvant spĂ©cifier leur propre plage, cette option outrepasse cette derniĂšre.

--nflog-threshold taille

Cette option permet de spĂ©cifier le nombre de paquets Ă  mettre en file d’attente dans le noyau avant de les envoyer vers l’espace utilisateur (applicable seulement pour nfnetlink_log ). Une valeur Ă©levĂ©e diminue la surcharge par paquet, mais augmente le dĂ©lai avec lequel les paquets atteignent l’espace utilisateur. La valeur par dĂ©faut est 1.

NFQUEUE

Cette action transmet le paquet Ă  l’espace utilisateur en utilisant le gestionnaire nfnetlink_queue . Le paquet est placĂ© dans la file d’attente identifiĂ©e par son numĂ©ro sur 16 bits. L’espace utilisateur peut inspecter et modifier le paquet s’il le souhaite ; il devra alors supprimer ou rĂ©injecter le paquet dans le noyau. Voir libnetfilter_queue pour les dĂ©tails. nfnetlink_queue a Ă©tĂ© ajoutĂ© Ă  Linux Ă  partir de la version 2.6.14, queue-balance Ă  partir de la version 2.6.31 et queue-bypass Ă  partir de la version 2.6.39.
--queue-num
valeur

Cette option permet de spĂ©cifier le numĂ©ro de file d’attente Ă  utiliser qui doit ĂȘtre compris entre 0 et 65535 inclus. La valeur par dĂ©faut est 0.

--queue-balance valeur : valeur

Cette option permet de spĂ©cifier une plage de numĂ©ros de file d’attente Ă  utiliser. Les paquets seront alors rĂ©partis entre ces derniĂšres. Cette option s’avĂšre utile pour les systĂšmes multicƓurs : lancer plusieurs instances du programme en espace utilisateur associĂ©s aux files d’attente x, x+1, ... x+n et utiliser « --queue-balance x : x+n ». Les paquets appartenant Ă  une mĂȘme connexion sont placĂ©s dans la mĂȘme file d’attente de netfilter (nfqueue). À cause de certains dĂ©tails de l’implĂ©mentation, une valeur de borne infĂ©rieure de la plage Ă©gale à 0 limite la valeur de la borne supĂ©rieure à 65534, c’est-Ă -dire que le nombre de files d’attente entre lesquelles les paquets pourront ĂȘtre rĂ©partis est de 65535.

--queue-bypass

Par dĂ©faut, si aucun programme de l’espace utilisateur n’est associĂ© Ă  une file d’attente de netfilter, tous les paquets qui doivent ĂȘtre mis en file d’attente sont supprimĂ©s. Lorsque cette option est utilisĂ©e, la rĂšgle contenant l’action NFQUEUE se comportera comme la cible ACCEPT , et le paquet sera envoyĂ© Ă  la table suivante.

--queue-cpu-fanout

Cette option est disponible Ă  partir de la version 3.10 du noyau Linux. Lorsqu’elle est spĂ©cifiĂ©e conjointement avec l’option --queue-balance , elle utilise l’identifiant de processeur comme un index pour associer les paquets Ă  une file d’attente. Elle est conçue sur l’idĂ©e selon laquelle on peut amĂ©liorer les performances s’il y a une file d’attente par processeur. Vous devez spĂ©cifier l’option --queue-balance pour pouvoir utiliser cette option.

NOTRACK

Cette action permet de dĂ©sactiver le traçage des connexions pour tous les paquets qui correspondent Ă  la rĂšgle actuelle. Elle est Ă©quivalente Ă  « -j CT --notrack ». Comme CT , NOTRACK ne peut ĂȘtre utilisĂ©e que dans la table raw .

RATEEST

Cette action collecte des statistiques, effectue des estimations de dĂ©bit et sauvegarde les rĂ©sultats pour une Ă©valuation ultĂ©rieure Ă  l’aide du module rateest .
--rateest-name
nom

Cette option permet d’enregistrer le dĂ©compte des paquets qui correspondent dans l’ensemble spĂ©cifiĂ© par nom , ce dernier pouvant ĂȘtre choisi arbitrairement.

--rateest-interval quantité { s | ms | ”s }

Cette option permet de spécifier un intervalle de mesure de débit en secondes, millisecondes ou microsecondes.

--rateest-ewmalog valeur

Cette option permet de spĂ©cifier avec quelle pĂ©riode doit ĂȘtre effectuĂ© le calcul de la moyenne de la mesure du dĂ©bit.

REDIRECT

Cette action ne peut ĂȘtre utilisĂ©e que dans les chaĂźnes PREROUTING et OUTPUT de la table nat , et dans les chaĂźnes dĂ©finies par l’utilisateur qui ne sont appelĂ©es que depuis ces chaĂźnes. Elle redirige le paquet vers la machine elle-mĂȘme en remplaçant l’adresse IP de destination par l’adresse primaire de l’interface d’entrĂ©e (les paquets gĂ©nĂ©rĂ©s localement sont associĂ©s Ă  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 configurĂ©e sont supprimĂ©s).
--to-ports
port [ - port ]

Cette option permet de spĂ©cifier un port ou une plage de ports de destination Ă  utiliser : sans cela, le port de destination ne sera jamais modifiĂ©. Elle ne peut ĂȘtre utilisĂ©e que si la rĂšgle spĂ©cifie aussi un des protocoles suivants : tcp , udp , dccp ou sctp . Pour un port unique, il est aussi possible de spĂ©cifier un nom de service parmi ceux listĂ©s dans /etc/services .

--random

Rendre aléatoire la redirection du port source (noyaux >= 2.6.22).

IPv6 est pris en charge à partir de la version 3.7 des noyaux Linux.

REJECT (spécifique à IPv6)

Cette action permet de renvoyer un paquet d’erreur en rĂ©ponse Ă  un paquet qui correspondait Ă  la rĂšgle ; cela mis Ă  part, elle est Ă©quivalente Ă  DROP ; il s’agit donc d’une action terminale qui interrompt le parcours des rĂšgles. Elle ne peut ĂȘtre utilisĂ©e que dans les chaĂźnes INPUT , FORWARD et OUTPUT , et dans les chaĂźnes dĂ©finies par l’utilisateur qui ne sont appelĂ©es que depuis ces chaĂźnes. Les options suivantes permettent de contrĂŽler la nature du paquet d’erreur renvoyé :
--reject-with
type

Le type spĂ©cifiĂ© peut ĂȘtre 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 appropriĂ© (la valeur par dĂ©faut est icmp6-port-unreachable ). L’option tcp-reset peut ĂȘtre utilisĂ©e dans les rĂšgles qui ne concernent que le protocole TCP : elle renvoie un paquet TCP RST. Cette option s’avĂšre particuliĂšrement utile pour bloquer les tentatives ident (113/tcp) qui surviennent frĂ©quemment lors d’envois de courriels Ă  des serveurs de messagerie dĂ©fectueux (qui autrement n’accepteront pas votre courrier). tcp-reset ne peut ĂȘtre utilisĂ©e que depuis la version 2.6.14 du noyau.

Avertissement : vous ne devez pas appliquer sans discrimination l’action REJECT aux paquets dont l’état de connexion est considĂ©rĂ© INVALID ; vous devez plutĂŽt les supprimer Ă  l’aide de la cible DROP .

Imaginez un hĂŽte source transmettant un paquet P, ce dernier subissant un retard de transmission si important que l’hĂŽte source effectue une retransmission sous la forme du paquet P_2, ce dernier atteignant sa destination avec succĂšs et faisant progresser l’état de connexion normalement. Il est concevable que le paquet P arrivant en retard soit considĂ©rĂ© comme non associĂ© Ă  une entrĂ©e de traçage de connexion. GĂ©nĂ©rer une rĂ©ponse REJECT pour un tel paquet mettrait alors fin Ă  la connexion saine.

Donc, au lieu de :

-A INPUT ... -j REJECT

utilisez plutÎt :

-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT

REJECT (spécifique à IPv4)

Cette action permet de renvoyer un paquet d’erreur en rĂ©ponse Ă  un paquet qui correspondait Ă  la rĂšgle ; cela mis Ă  part, elle est Ă©quivalente Ă  DROP ; il s’agit donc d’une action terminale qui interrompt le parcours des rĂšgles. Elle ne peut ĂȘtre utilisĂ©e que dans les chaĂźnes INPUT , FORWARD et OUTPUT , et dans les chaĂźnes dĂ©finies par l’utilisateur qui ne sont appelĂ©es que depuis ces chaĂźnes. Les options suivantes permettent de contrĂŽler la nature du paquet d’erreur renvoyé :
--reject-with
type

Le type spĂ©cifiĂ© peut ĂȘtre 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 appropriĂ© (la valeur par dĂ©faut est icmp-port-unreachable ). L’option tcp-reset peut ĂȘtre utilisĂ©e dans les rĂšgles qui ne concernent que le protocole TCP : elle renvoie un paquet TCP RST. Cette option s’avĂšre particuliĂšrement utile pour bloquer les tentatives ident (113/tcp) qui surviennent frĂ©quemment lors d’envois de courriels Ă  des serveurs de messagerie dĂ©fectueux (qui autrement n’accepteront pas votre courrier).

(*) Utiliser icmp-admin-prohibited avec des noyaux qui ne le prennent pas en charge entraünera 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’état de connexion est considĂ©rĂ© INVALID ; vous devez plutĂŽt les supprimer Ă  l’aide de la cible DROP .

Imaginez un hĂŽte source transmettant un paquet P, ce dernier subissant un retard de transmission si important que l’hĂŽte source effectue une retransmission sous la forme du paquet P_2, ce dernier atteignant sa destination avec succĂšs et faisant progresser l’état de connexion normalement. Il est concevable que le paquet P arrivant en retard soit considĂ©rĂ© comme non associĂ© Ă  une entrĂ©e de traçage de connexion. GĂ©nĂ©rer une rĂ©ponse REJECT pour un tel paquet mettrait alors fin Ă  la connexion saine.

Donc, au lieu de :

-A INPUT ... -j REJECT

utilisez plutÎt :

-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT

SECMARK

Ce module permet de dĂ©finir la valeur de la marque de sĂ©curitĂ© associĂ©e au paquet et destinĂ©e Ă  ĂȘtre utilisĂ©e par les sous-systĂšmes de sĂ©curitĂ© tels que SELinux. Il peut ĂȘtre utilisĂ© dans la table security (ainsi que dans la table mangle Ă  des fins de rĂ©trocompatibilitĂ© avec les noyaux plus anciens). La taille de la marque est de 32 bits.
--selctx
contexte_sécurité

SET

Ce module permet d’ajouter et/ou supprimer des entrĂ©es dans les ensembles d’adresses IP dĂ©finis Ă  l’aide d’ ipset (8).
--add-set
nom_ensemble drapeau [ , drapeau ...]

Cette option permet d’ajouter la(les) adresse(s)/port(s) du paquet Ă  l’ensemble spĂ©cifiĂ©.

--del-set nom_ensemble drapeau [ , drapeau ...]

Cette option permet de supprimer la(les) adresse(s)/port(s) du paquet de l’ensemble spĂ©cifiĂ©.

--map-set nom_ensemble drapeau [ , drapeau ...]

[--map-mark] [--map-prio] [--map-queue] mappent les propriĂ©tĂ©s du paquet (marquage pare-feu, prioritĂ© tc (traffic control — contrĂŽle de trafic), file d’attente matĂ©riel)

oĂč les drapeau (x), dont le nombre est limitĂ© à 6, sont des spĂ©cifications src et/ou dst .

--timeout valeur

Lors de l’ajout d’une entrĂ©e, cette option permet de dĂ©finir la valeur du dĂ©lai d’expiration Ă  utiliser Ă  la place de la valeur par dĂ©faut dĂ©finie pour l’ensemble.

--exist

Lors de l’ajout d’une entrĂ©e, si elle existe dĂ©jĂ , cette option permet de rĂ©initialiser la valeur du dĂ©lai d’expiration Ă  la valeur spĂ©cifiĂ©e ou, Ă  dĂ©faut, Ă  celle dĂ©finie pour l’ensemble.

--map-set nom_ensemble

nom_ensemble doit ĂȘtre créé Ă  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 prioritĂ© du contrĂŽle de trafic avec le paquet en en recherchant la valeur dans l’ensemble. --map-queue mappe la file d’attente matĂ©riel de la NIC (Network Interface Card — carte rĂ©seau) en en recherchant la valeur dans l’ensemble.

L’option --map-set ne peut ĂȘtre utilisĂ©e que dans la table mangle . Les options --map-prio et --map-queue peuvent ĂȘtre utilisĂ©es dans les chaĂźnes OUTPUT , FORWARD et POSTROUTING .

L’utilisation de « -j SET » nĂ©cessite la prise en charge d’ipset par le noyau, ce qui est le cas, pour les noyaux standards, Ă  partir de Linux 2.6.39.

SNAT

Cette action ne peut ĂȘtre utilisĂ©e que dans les chaĂźnes POSTROUTING et INPUT de la table nat , et dans les chaĂźnes dĂ©finies par l’utilisateur qui ne sont appelĂ©es que depuis ces chaĂźnes. Elle indique que l’adresse source du paquet (ainsi que celle de tous les paquets ultĂ©rieurs de cette connexion) doit ĂȘtre modifiĂ©e et que le parcours des rĂšgles doit cesser. Elle accepte les options suivantes :
--to-source
[ adr_ip [ - adr_ip ]][ : port [ - port ]]

Cette option permet de spĂ©cifier une seule nouvelle adresse IP source ou une plage inclusive d’adresses IP, et Ă©ventuellement une plage de ports, si la rĂšgle spĂ©cifie aussi un des protocoles suivants : tcp , udp , dccp ou sctp . Si aucune plage de ports n’est spĂ©cifiĂ©e, les ports source de numĂ©ro infĂ©rieur à 512 seront redirigĂ©s vers d’autres ports de numĂ©ro infĂ©rieur à 512, ceux dont les numĂ©ros sont compris entre 512 et 1023 inclus seront redirigĂ©s vers d’autres ports de numĂ©ro infĂ©rieur à 1024 et les autres ports seront redirigĂ©s vers d’autres ports de numĂ©ro supĂ©rieur ou Ă©gal à 1024. Lorsque c’est possible, aucune modification de port n’est effectuĂ©e.

--random

Rendre aléatoire la redirection du port source grùce à un algorithme basé sur le hachage (noyaux de version >= 2.6.21).

--random-fully

Rendre totalement alĂ©atoire la redirection du port source grĂące Ă  un PRNG (Pseudorandom Number Generator — gĂ©nĂ©rateur de nombres pseudo-alĂ©atoires) ; disponible Ă  partir de la version 3.14 du noyau.

--persistent

Attribuer Ă  un client les mĂȘmes 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 antĂ©rieure à 2.6.36-rc1 ne prennent pas en charge l’action SNAT dans la chaĂźne INPUT .
IPv6 est pris en charge depuis la version 3.7 du noyau Linux.

SNPT (spécifique à IPv6)

Cette action permet d’effectuer une translation NPTv6 (IPv6 Ă  IPv6 Network Prefix Translation) sans conservation d’état (stateless) du prĂ©fixe rĂ©seau source (comme dĂ©crit 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
[ préfixe/taille]

Définir le préfixe source que vous voulez traduire, ainsi que sa taille.

--dst-pfx [ préfixe/taille]

Définir le préfixe 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-ĂȘtre activer le mandataire d’hĂŽtes voisins IPv6 :

sysctl -w net.ipv6.conf.all.proxy_ndp=1

Vous devez aussi utiliser l’action NOTRACK pour dĂ©sactiver le traçage de connexion pour les flux traduits.

SYNPROXY

Cette action permet de traiter la poignĂ©e de main TCP en trois temps (TCP three-way-handshake) en parallĂšle dans le contexte netfilter pour protĂ©ger le systĂšme de la machine locale ou du dorsal. Elle nĂ©cessite le traçage de connexion, car les numĂ©ros de sĂ©quence doivent ĂȘtre traduits. La capacitĂ© des noyaux Ă  absorber les attaques SYNFLOOD ayant Ă©tĂ© considĂ©rablement amĂ©liorĂ©e avec la version 4.4, cette action ne devrait plus ĂȘtre nĂ©cessaire pour protĂ©ger les serveurs Linux.
--mss
taille_maximale_segment

Cette option permet de dĂ©finir la taille maximale de segment indiquĂ©e aux clients. Elle doit ĂȘtre identique Ă  celle du dorsal.

--wscale redimensionnement_fenĂȘtre

Facteur de multiplication de la fenĂȘtre de rĂ©ception indiquĂ© aux clients. Il doit ĂȘtre identique Ă  celui du dorsal.

--sack-perm

Transmission de l’option d’acquittement sĂ©lectif du client au dorsal (sera dĂ©sactivĂ©e si non prĂ©sente).

--timestamps

Transmission de l’option d’horodatage du client au dorsal (sera dĂ©sactivĂ©e si non prĂ©sente, aussi nĂ©cessaire pour l’acquittement sĂ©lectif et le redimensionnement de fenĂȘtre).

Exemple :

DĂ©terminer les options tcp utilisĂ©es par le dorsal Ă  partir d’un systĂšme 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 à off de façon que le traçage 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 tracés.

iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80
--syn -j CT --notrack

Intercepter les Ă©tats « UNTRACKED » (paquets SYN) et « INVALID » (paquets ACK de la poignĂ©e de main en trois temps) et les soumettre Ă  l’action SYNPROXY . Cette rĂšgle rĂ©pondra aux paquets SYN avec des syncookies SYN+ACK, crĂ©era une connexion ESTABLISHED pour une rĂ©ponse client valable (paquets ACK de la poignĂ©e 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 poignĂ©e de main en trois temps ne correspondront pas et le parcours des rĂšgles 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-Ă -dire les paquets hors flux qui n’ont pas Ă©tĂ© soumis Ă  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 contrĂŽler la taille maximale pour cette connexion (en gĂ©nĂ©ral en la limitant au MTU (Maximum Transmission Unit — unitĂ© de transmission maximale) de votre interface de sortie moins 40 pour IPv4 ou moins 60 pour IPv6). Bien entendu, elle ne peut ĂȘtre utilisĂ©e que conjointement avec l’option -p tcp .

Cette action permet de contourner les FAI ou serveurs en état de mort cérébrale manifeste qui bloquent les paquets considérés comme « nécessitant une fragmentation ICMP » ou comme « paquets ICMPv6 trop gros ». Les symptÎmes de ce problÚme se manifestent par le fait que, bien que tout semble fonctionner correctement depuis votre pare-feu ou routeur Linux, les machines situées derriÚre ces derniers ne peuvent jamais échanger de gros paquets :

1.

Les navigateurs internet se connectent puis se bloquent sans réception de données.

2.

Les petits courriels sont envoyés, mais les gros bloquent.

3.

ssh fonctionne correctement, mais scp bloque aprÚs la poignée de main initiale.

Solution : activer cette option et ajouter à la configuration de votre pare-feu une rÚgle 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 définir explicitement la MSS à la valeur spécifiée. Si la MSS du paquet est déjà inférieure à valeur , elle ne sera pas augmentée (à partir de Linux 2.6.25) pour éviter des problÚmes avec les hÎtes qui fonctionnent avec une MSS particuliÚre.

--clamp-mss-to-pmtu

Cette option permet de fixer automatiquement la valeur de MSS Ă  « path_MTU - 40 » pour IPv4 et Ă  « path_MTU - 60 » pour IPv6 (NDT : le path_MTU est la plus petite unitĂ© de transmission maximale rencontrĂ©e sur le chemin rĂ©seau). Elle peut ne pas fonctionner comme souhaitĂ© lorsque des routes asymĂ©triques avec des path_MTU diffĂ©rents existent — le noyau utilise le path_MTU qu’il utiliserait pour envoyer des paquets depuis lui-mĂȘme vers les adresses IP source et de destination. Avant Linux 2.6.25, seul le path_MTU vers l’adresse IP de destination Ă©tait considĂ©rĂ© par cette option ; les noyaux ultĂ©rieurs considĂšrent 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 spĂ©cifiĂ©es. Ces derniĂšres peuvent ĂȘtre spĂ©cifiĂ©es Ă  l’aide de leur numĂ©ro d’option TCP ou de leur nom symbolique. La liste des options reconnues peut ĂȘtre 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 rĂ©seau local . En d’autres termes, le prochain saut doit ĂȘtre 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 clonĂ© Ă  l’hĂŽte pouvant ĂȘtre atteint Ă  l’adresse IP spĂ©cifiĂ©e. 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 réseau :

-t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1

TOS

Cette action permet de dĂ©finir le champ « Type of Service » de l’en-tĂȘte IPv4 (y compris les bits de prioritĂ©) ou le champ « Priority » de l’en-tĂȘte IPv6. Notez que TOS partage les mĂȘmes bits que DSCP et ECN . L’action TOS ne peut ĂȘtre utilisĂ©e que dans la table mangle .
--set-tos
valeur [ / masque ]

Mettre à zéro les bits spécifiés par masque (voir NOTE ci-aprÚs) et combiner valeur et le champ TOS/Priority avec un XOR. Si masque est omis, sa valeur par défaut 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-aprĂšs). La liste des noms de TOS valables peut ĂȘtre obtenue en appelant iptables avec « -j TOS -h ».

Les mnémoniques suivants sont disponibles :
--and-tos
bits

Combiner la valeur de TOS et bits Ă  l’aide d’un ET logique (mnĂ©monique pour « --set-tos 0/ invbits » oĂč invbits est la nĂ©gation binaire de bits , voir NOTE ci-aprĂšs).

--or-tos bits

Combiner la valeur de TOS et bits Ă  l’aide d’un OU logique (mnĂ©monique pour « --set-tos bits / bits », voir NOTE ci-aprĂšs).

--xor-tos bits

Combiner la valeur de TOS et bits Ă  l’aide d’un XOR (mnĂ©monique pour « --set-tos bits /0 », voir NOTE ci-aprĂšs).

NOTE : avec les noyaux jusqu’à la version 2.6.38, Ă  l’exception des versions Ă  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 diffĂ©remment de ce qui est documentĂ© et diffĂšre de la version IPv4. Le masque TOS indique les bits que l’on veut mettre Ă  zĂ©ro ; il doit donc ĂȘtre inversĂ© avant d’ĂȘtre appliquĂ© au champ TOS d’origine. Cependant, les noyaux mentionnĂ©s ci-avant n’effectuent pas cette inversion, ce qui entraĂźne un fonctionnement dĂ©fectueux de l’option --set-tos et de ses mnĂ©moniques.

TPROXY

Cette action ne peut ĂȘtre utilisĂ©e que dans la table mangle , dans la chaĂźne PREROUTING et les chaĂźnes dĂ©finies par l’utilisateur qui ne sont appelĂ©es que depuis cette chaĂźne. Elle redirige le paquet vers un socket local sans modifier l’en-tĂȘte de paquet de quelque façon que ce soit. Elle peut aussi modifier la valeur de marquage qui pourra alors ĂȘtre utilisĂ©e dans des rĂšgles de routage avancĂ©es. Elle accepte trois options :
--on-port
port

Cette option permet de spĂ©cifier le port de destination Ă  utiliser. Elle est obligatoire, 0 signifiant que le nouveau port de destination est le mĂȘme que le port d’origine. Elle n’est valable que si la rĂšgle spĂ©cifie aussi -p tcp ou -p udp .

--on-ip adresse

Cette option permet de spĂ©cifier l’adresse de destination Ă  utiliser. Par dĂ©faut, il s’agit de l’adresse de l’interface entrante. Elle n’est valable que si la rĂšgle spĂ©cifie aussi -p tcp ou -p udp .

--tproxy-mark valeur [ / masque ]

Cette option permet de marquer les paquets avec la paire valeur / masque spĂ©cifiĂ©e. La valeur de la marque de pare-feu (fwmark) dĂ©finie ici peut ĂȘtre utilisĂ©e pour le routage avancĂ© (cette option est nĂ©cessaire pour utiliser un mandataire transparent (transparent proxying) : si elle n’est pas prĂ©sente, ces paquets seront redirigĂ©s, ce qui ne correspond probablement pas Ă  ce vous souhaitez).

TRACE

Cette action marque les paquets de façon que le noyau journalise chaque rĂšgle qui correspond aux paquets lorsque ces derniers traversent les tables, chaĂźnes ou rĂšgles. Elle ne peut ĂȘtre utilisĂ©e que dans la table raw .

Avec iptables-legacy , un dorsal de journalisation comme ip(6)t_LOG ou nfnetlink_log doit ĂȘtre chargĂ© pour que cela soit visible. Les paquets sont journalisĂ©s avec le prĂ©fixe « TRACE: nom_table:nom_chaĂźne:type:numĂ©ro_rĂšgle » oĂč type peut avoir pour valeur « rule » pour une rĂšgle Ă  part entiĂšre, « return » pour une rĂšgle implicite Ă  la fin d’une chaĂźne dĂ©finie par l’utilisateur ou « policy » pour la politique des chaĂźnes intĂ©grĂ©es.

Avec iptables-nft , l’action est traduite en une expression meta nftrace de nftables . Ainsi le noyau envoie les Ă©vĂšnements de traçage Ă  l’aide de netlink vers l’espace utilisateur oĂč ils peuvent ĂȘtre affichĂ©s en utilisant la commande xtables-monitor --trace . Pour les dĂ©tails, veuillez consulter xtables-monitor (8).

TTL (spécifique à IPv4)

Cette action permet de modifier le champ d’en-tĂȘte IPv4 TTL. Le champ TTL dĂ©termine le nombre de sauts (routeurs) qu’un paquet peut traverser avant que sa durĂ©e de vie soit dĂ©passĂ©e.

DĂ©finir ou augmenter la valeur du champ TTL peut s’avĂ©rer trĂšs dangereux et il faut donc Ă  tout prix Ă©viter de le faire. Cette action ne peut ĂȘtre utilisĂ©e que dans la table mangle .

Ne définissez ou incrémentez jamais cette valeur pour les paquets qui quittent votre réseau local !
--ttl-set
valeur

Cette option permet de définir la valeur du champ TTL à valeur .

--ttl-dec n

Cette option permet de décrémenter la valeur du champ TTL n fois.

--ttl-inc n

Cette option permet d’incrĂ©menter la valeur du champ TTL n fois.

ULOG (spécifique à IPv4)

Cette action est le prĂ©dĂ©cesseur obsolĂšte spĂ©cifique Ă  IPv4 de l’action NFLOG . Elle permet de journaliser les paquets qui correspondent dans l’espace utilisateur. Lorsque cette action est dĂ©finie pour une rĂšgle, le noyau Linux multidiffuse les paquets Ă  l’aide d’un socket netlink . Un ou plusieurs processus de l’espace utilisateur peuvent alors s’abonner Ă  diffĂ©rents groupes de multidiffusion et recevoir les paquets. Comme LOG , c’est une action « non terminale », c’est-Ă -dire que le parcours des rĂšgles continue Ă  la rĂšgle suivante.
--ulog-nlgroup
groupe_netlink

Cette option permet de spécifier le groupe netlink (1-32) auquel est envoyé le paquet. La valeur par défaut est 1.

--ulog-prefix préfixe

Cette option permet de spĂ©cifier le prĂ©fixe Ă  ajouter aux messages de journalisation ; d’une taille maximale de 32 caractĂšres, il permet de distinguer les messages dans les journaux.

--ulog-cprange n

Cette option permet de spĂ©cifier le nombre d’octets Ă  copier vers l’espace utilisateur. Une valeur de 0 (la valeur par dĂ©faut) signifie que le paquet doit ĂȘtre copiĂ© dans sa totalitĂ© sans tenir compte de sa taille.

--ulog-qthreshold n

Cette option permet de spĂ©cifier le nombre de paquets Ă  mettre en file d’attente dans le noyau. DĂ©finir cette valeur à 10, par exemple, stocke dix paquets dans le noyau et les transmet Ă  l’espace utilisateur en un seul message netlink en plusieurs parties (multipart). La valeur par dĂ©faut est 1 (Ă  des fins de rĂ©trocompatibilitĂ©).

TRADUCTION

La traduction française de cette page de manuel a été créée par Lucien Gentis <lucien.gentis@univ-lorraine.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .