Man page - iptables-extensions(8)
Packages contains this manual
- ip6tables-legacy(8)
- ip6tables-restore-translate(8)
- ip6tables-restore(8)
- nfnl_osf(8)
- iptables-xml(1)
- ebtables-nft-restore(8)
- arptables-nft-save(8)
- ebtables-translate(8)
- iptables-nft-save(8)
- ip6tables-nft-restore(8)
- iptables-nft-restore(8)
- xtables-legacy(8)
- iptables-restore(8)
- xtables-nft(8)
- ip6tables-legacy-save(8)
- ebtables-nft-save(8)
- iptables-restore-translate(8)
- iptables-translate(8)
- ip6tables-apply(8)
- arptables-nft-restore(8)
- iptables-extensions(8)
- xtables-translate(8)
- ip6tables-nft-save(8)
- ip6tables-legacy-restore(8)
- ebtables-nft(8)
- ip6tables-nft(8)
- xtables-nft-multi(8)
- ip6tables-translate(8)
- iptables-save(8)
- arptables-translate(8)
- iptables-legacy-save(8)
- iptables-legacy-restore(8)
- ip6tables-save(8)
- iptables(8)
- xtables-legacy-multi(8)
- arptables-nft(8)
- ip6tables(8)
- iptables-nft(8)
- iptables-apply(8)
- iptables-legacy(8)
- xtables-monitor(8)
apt-get install iptables
Available languages:
en fr ja ru roManual
iptables-extensions
NOMSYNOPSIS
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 .