Les correspondances explicites doivent être chargés
spécifiquement par l'option -m ou --match. Par exemple, les
correspondances d'état nécessitent la directive -m state avant d'entrer la
véritable correspondance à prendre en compte. Certaines de ces
correspondances sont spécifiques à un protocole. Certaines peuvent
aussi être détachées de tout protocole spécifique - par exemple les
états de connexion. Ils sont identifiés par NEW (pour le premier paquet d'une
connexion non encore établie), ESTABLISHED (pour une connexion
déjà enregistrée dans le noyau), RELATED (pour une nouvelle
connexion créée par une connexion plus ancienne et déjà établie),
etc. Parmi ces correspondances explicites, quelques-une peuvent
avoir évolué pour des questions de test ou d'expérimentation, ou
simplement pour mettre en évidence les capacités d'iptables. Par conséquent, ceci
signifie que l'intégralité de ces correspondances n'est pas à
première vue indispensable. Néanmoins, il y a de grandes chances
que vous trouviez certaines des ces correspondances explicites
particulièrement utiles. Et de nouvelles apparaissent en
permanence, lors de chaque nouvelle version d'iptables. Que vous leur
découvriez ou non une utilisation dépend de votre imagination et de
vos besoins. Pour comprendre la différence entre une correspondance
chargée implicitement et une chargée explicitement, il faut savoir
que la première est chargée automatiquement quand par exemple vous
établissez une correspondance avec une propriété des paquets
TCP
, alors que la seconde n'est
jamais chargée automatiquement - c'est à vous d'activer une
correspondance explicite.
Le module addrtype sélectionne les paquets basés sur le type adresse. Le type adresse est utilisé dans le noyau pour placer différents paquets dans différentes catégories. Avec cette correspondance vous pourrez sélectionner tous les paquets basés sur leur adresse selon le noyau. Il faut noter que le comportement exact des différents types adresse varie entre les protocoles de la couche 3. je donnerai une brève description générale ici, mais pour plus d'information lire le Linux Advanced Routing and Traffic Control HOW-TO et le Policy Routing using Linux. Les types disponibles sont les suivants :
Tableau 10.6. Types adresse
Type | Description |
---|---|
ANYCAST |
Type de connexion associative unique-à-multiple, où seulement un des multiples destinataires reçoit les données. Par exemple, implémenté dans DNS. Vous avez une adresse unique pour un serveur racine , mais qui possède plusieurs localisations, votre paquet sera redirigé vers le plus proche serveur. Non implémenté dans IPv4. |
BLACKHOLE |
Une adresse blackhole supprimera simplement le paquet et n'enverra pas de réponse. Elle fonctionne, de façon basique, comme un trou noir dans l'espace. Elle est configurée dans les tables de routage de Linux. |
BROADCAST |
Un paquet broadcast (diffusion) est un simple paquet envoyé à tout le monde sur un réseau spécifique dans une relation unique-à-multiple. C'est, par exemple, utilisé dans la résolution ARP, où un paquet est envoyé pour s'informer de la façon de joindre une adresse IP spécifique, ensuite l'hôte autorisé répond avec sa propre adresse MAC. |
LOCAL |
Adresse locale de la machine sur laquelle nous travaillons. 127.0.0.1 par exemple. |
MULTICAST |
Un paquet multicast (multidiffusion) est envoyé à divers hôtes utilisant la distance la plus courte et seulement un paquet est expédié à chaque point de cheminement où il sera copié plusieurs fois pour chaque hôte/routeur souscrivant à l'adresse multicast spécifique. Utilisé couramment dans le streaming media comme la vidéo ou le son. |
NAT |
Adresse qui a été NATée (traduite) par le noyau. |
PROHIBIT |
Comme le blackhole sauf qu'une réponse "interdit" sera générée. Dans le cas de IPv4, ceci indique qu'une réponse ICMP communication prohibited (type 3, code 13) sera générée. |
THROW |
Route spéciale dans le noyau Linux. Si un paquet traverse un table de routage il se comportera comme si aucune route n'était trouvée dans la table. Dans le routage normal, ceci indique que le paquet se comporte comme s'il n'avait pas de route. En stratégie de routage, une autre route peut être trouvée dans une autre table. |
UNICAST |
Une adresse réellement routable pour une adresse unique. Le type de route le plus commun. |
UNREACHABLE |
Signale une adresse injoignable (nous ne savons pas comment la joindre). Les paquets seront supprimés et un ICMP Host unreachable (type 3, code 1) sera généré. |
UNSPEC |
Adresse non spécifiée qui n'a pas de signification réelle. |
XRESOLVE |
Type d'adresse utilisée pour envoyer une recherche de route vers les applications utilisateur. Non implémenté dans Linux. |
La correspondance addrtype est chargée en utilisant le mot-clé -m addrtype. Quand il est placé, des options de correspondance supplémentaires seront disponibles. Voir la table ci-dessous.
Tableau 10.7. Options de la correspondance Addrtype
Correspondance | --src-type |
Noyau | 2.6 |
Exemple | iptables -A INPUT -m addrtype --src-type UNICAST |
Explication |
L'option de correspondance --src-type est utilisée pour sélectionner le type d'adresse source du paquet. Elle peut soit prendre une adresse unique soit plusieurs adresses séparées par une virgule, par exemple --src-type BROADCAST,MULTICAST. L'option de correspondance peut aussi être intervertie en ajoutant un point d'exclamation devant, par exemple ! --src-type BROADCAST,MULTICAST. |
Correspondance | --dst-type |
Noyau | 2.6 |
Exemple | iptables -A INPUT -m addrtype --dst-type UNICAST |
Explication |
Le --dst-type fonctionne exactement comme le --src-type et possède la même syntaxe. La seule différence est qu'il sélectionnera les paquets basés sur leur destination. |
Ces correspondances sont utilisées pour les protocoles IPSEC AH et ESP. IPSEC sert à créer des tunnels sécurisés par dessus une connexion Internet non sécurisée. Les protocoles AH et ESP sont utilisés par IPSEC pour créer ces connexions sécurisées. Les correspondances AH et ESP sont deux correspondances séparées, mais elles sont toutes les deux décrites ici car elles se ressemblent beaucoup, et toutes les deux ont le même usage.
Je ne rentrerai pas dans les détails d'IPSEC ici, regardez les pages suivantes pour plus d'information :
Il existe également des tonnes de documentation sur l'Internet à ce sujet.
Pour utiliser les correspondances AH/ESP, vous devrez vous servir de -m ah pour charger les correspondances AH, et -m esp pour charger les correspondances ESP.
Note | |
---|---|
Dans les noyaux 2.2 et 2.4, Linux utilise une chose appelée FreeS/WAN pour l'implémentation de IPSEC, mais à partir des noyaux 2.5.47 et supérieurs, ceux-ci ont une implémentation directe de IPSEC et donc ne nécessitent pas de patcher le noyau. C'est une réécriture complète de l'implémentation de IPSEC dans Linux. |
Tableau 10.8. Options de la correspondance AH
Correspondance | --ahspi |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p 51 -m ah --ahspi 500 |
Explication | Ceci vérifie le numéro de l'Index du Paramètre de Sécurité (SPI) des paquets AH. Notez que vous devez spécifier le protocole, car AH s'exécute sur un protocole différent des standards TCP, UDP et ICMP. Le numéro SPI est utilisé en conjonction avec les adresses source et destination et les clés secrètes pour créer une association de sécurité (SA). SA identifie chacun des tunnels IPSEC pour tous les hôtes. SPI est utilisé uniquement pour distinguer chaque tunnel IPSEC connecté entre deux tunnels identiques. Utiliser la correspondance --ahspi, nous permet de sélectionner un paquet basé sur le SPI des paquets. Cette correspondance peut sélectionner une chaîne complète de valeur SPI en utilisant un signe :, comme 500:520, qui vérifiera toute la chaîne des SPI. |
Tableau 10.9. Options de la correspondance ESP
Correspondance | --espspi |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p 50 -m esp --espspi 500 |
Explication | La contrepartie de l'Index des Paramètres de Sécurité (SPI) est utilisée de la même façon que la variante AH. La correspondance semble exactement la même, avec seulement la différence esp/ah. Bien sûr, cette correspondance peut sélectionner un ensemble complet de numéros SPI de la même façon que la variante AH de la correspondance SPI, comme --espi 200:250 qui sélectionne la totalité de la chaîne des SPI. |
La correspondance comment est utilisée pour ajouter des commentaires dans la table de règles de iptables et le noyau. Ceci peut grandement simplifier la compréhension de votre table de règles et le débogage. Par exemple, vous pouvez ajouter des commentaires qui documentent une fonction bash qui ajoute des règles spécifiques à netfilter. Il faut noter que ce n'est pas actuellement une correspondance. La "correspondance comment" est chargée en utilisant le mot-clé -m. Les options disponibles sont les suivantes :
Tableau 10.10. Options de la correspondance Comment
Correspondance | --comment |
Noyau | 2.6 |
Exemple | iptables -A INPUT -m comment --comment "A comment" |
Explication |
L'option --comment spécifie le commentaire à ajouter à la règle dans le noyau. Le commentaire peut être au maximum de 256 caractères. |
La correspondance connmark est utilisée de la même façon que la correspondance mark dans la combinaison de cible MARK/mark. Connmark sert à sélectionner les marques qui ont été placées sur une connexion avec la cible CONNMARK. Elle ne prend qu'une option.
Important | |
---|---|
Pour sélectionner une marque sur le paquet qui est le premier à créer la connexion marquée, vous devez utiliser la correspondance connmark après que la cible CONNMARK ait placé la marque sur le premier paquet. |
Tableau 10.11. Options de la correspondance Connmark
Correspondance | --mark |
Noyau | 2.6 |
Exemple | iptables -A INPUT -m connmark --mark 12 -j ACCEPT |
Explication |
L'option mark sert à sélectionner une marque spécifique associée à une connexion. Le correspondance mark doit être exacte, Par exemple, si vous avez une marque placée sur une connexion à 33 (10001 en binaire), et voulez sélectionner le premier bit seulement, vous ferez quelque chose comme ça --mark 1/1. Le masque (00001) sera masqué vers 10001, ainsi 10001 et 00001 égale 1, et ensuite sélectionner le 1. |
La correspondance conntrack est une version étendue de la correspondance d'état, qui rend possible la sélection des paquets de façon un peu plus grossière. Ce qui vous permet d'avoir l'information directement disponible dans un système de traçage de connexion, sans applications frontales, comme dans la correspondance d'état. Pour plus de détails sur le système de traçage de connexion, regardez le chapitre La machine d'état.
Il existe nombre de différentes options dans la correspondance conntrack, pour différents champs dans le système de traçage de connexion. Ils sont indiqués dans la liste ci-dessous. Pour charger ces options, vous devez spécifier -m conntrack.
Tableau 10.12. options de la correspondance Conntrack
Correspondance | --ctstate |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctstate RELATED |
Explication |
Cette correspondance est utilisée pour distinguer l'état d'un paquet, selon l'état conntrack. Elle est utilisée pour sélectionner plus finement les mêmes états que dans la correspondance state d'origine. Les entrées valides pour cette correspondance sont :
Les entrées peuvent être utilisées l'une avec l'autre en les séparant par une virgule. Par exemple, -m conntrack --ctstate ESTABLISHED,RELATED. Elles peuvent aussi être interverties en mettant un ! avant --ctstate. Exemple : -m conntrack ! --ctstate ESTABLISHED,RELATED, qui sélectionne tout sauf les états ESTABLISHED et RELATED. |
Correspondance | --ctproto |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctproto TCP |
Explication |
Ceci sélectionne le protocole, de la même façon que le fait
--protocol. Il peut
prendre les mêmes types de valeurs, et on peut l'intervertir en
utilisant le signe !. Exemple, -m
conntrack ! --ctproto TCP sélectionne tous les
protocoles sauf |
Correspondance | --ctorigsrc |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctorigsrc 192.168.0.0/24 |
Explication |
--ctorigsrc est une correspondance basée sur la spécification de la source IP d'origine de l'entrée conntrack en rapport avec le paquet. La correspondance peut être inversée en utilisant le ! entre le --ctorigsrc et la spécification IP, comme --ctorigsrc ! 192.168.0.1. Elle peut aussi prendre un masque de réseau de forme CIDR, comme --ctorigsrc 192.168.0.0/24. |
Correspondance | --ctorigdst |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctorigdst 192.168.0.0/24 |
Explication |
Cette correspondance est utilisée de la même façon que --ctorigsrc, sauf qu'elle sélectionne le champ destination de l'entrée conntrack. Elle possède la même syntaxe. |
Correspondance | --ctreplsrc |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctreplsrc 192.168.0.0/24 |
Explication |
La correspondance --ctreplysrc est utilisée pour la sélection fondée sur la réponse source du conntrack d'origine du paquet. C'est à peu près la même chose que le --ctorigsrc, mais nous sélectionnons la réponse source attendue des paquets envoyés. Cette cible peut, bien sûr, être inversée et adresser une chaîne complète d'adresses, de la même façon que la cible précédente dans ce préfixe. |
Correspondance | --ctrepldst |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctrepldst 192.168.0.0/24 |
Explication |
La correspondance --ctreplydst est la même que --ctreplysrc, avec la différence qu'elle sélectionne la réponse de destination de l'entrée conntrack qui a sélectionné la paquet. Elle peut être inversée, et accepte les chaînes, comme la correspondance --ctreplysrc. |
Correspondance | --ctstatus |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctstatus RELATED |
Explication |
Ceci sélectionne les statuts de la connexion, comme décrit dans la chapitre La machine d'état. Ces statuts sont les suivants :
Elle peut aussi être inversée par le signe !. Exemple, -m conntrack ! --ctstatus ASSURED qui sélectionne tout sauf le statut ASSURED. |
Correspondance | --ctexpire |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m conntrack --ctexpire 100:150 |
Explication |
Cette correspondance sert à sélectionner les paquets basés sur la longueur du temps d'expiration de l'entrée conntrack, mesuré en secondes. Elle peut soit prendre une seule valeur, ou une chaîne comme dans l'exemple au-dessus. Elle peut aussi être inversée avec le signe !, comme -m conntrack ! --ctexpire 100. Ceci sélectionne chaque temps d'expiration, qui n'est pas exactement de 100 secondes. |
Cette correspondance est utilisée pour distinguer les paquets basés sur leur champ DSCP (Differentiated Services Code Point). C'est documenté dans la RFC RFC 2638 - A Two-bit Differentiated Services Architecture for the Internet. La correspondance est chargée en spécifiant -m dscp. Elle peut prendre deux options mutuellement incompatibles, décrites ci-dessous.
Tableau 10.13. Options de la correspondance Dscp
Correspondance | --dscp |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m dscp --dscp 32 |
Explication |
Cette option prend une valeur DSCP soit en décimal soit en hexadécimal. Si la valeur de l'option est en décimal, elle sera écrite comme 32 ou 16, etc. Si elle est écrite en hexadécimal, elle pourrait être préfixée avec des 0x, comme ça : 0x20. Elle peut aussi être inversée par le signe !, comme : -m dscp ! --dscp 32. |
Correspondance | --dscp-class |
Noyau | 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m dscp --dscp-class BE |
Explication |
La correspondance --dscp-class sert à la sélection d'une classe Diffserv d'un paquet. Les valeurs peuvent être l'une des classes BE, EF, AFxx ou CSxx comme spécifié dans les diverses RFC. Elle peut être inversée de la même façon qu'avec l'option --dscp. |
Note | |
---|---|
Notez que les options de classe --dscp et dscp-class sont mutuellement exclusives et ne peuvent pas être utilisées conjointement l'une avec l'autre. |
ECN est utilisé pour sélectionner les différents champs ECN dans les en-têtes TCP et IPv4. ECN est décrit en détail dans la RFC RFC 3168 - The Addition of Explicit Congestion Notification (ECN) to IP. La correspondance est chargée par -m ecn dans la ligne de commande. Elle prend trois options différentes, comme décrit ci-dessous.
Tableau 10.14. Options de la correspondance Ecn
Correspondance | --ecn |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m ecn --ecn-tcp-cwr |
Explication |
Cette correspondance est utilisée pour sélectionner le bit CWR (Congestion Window Received), s'il a été placé. Le fanion CWR est placé pour notifier l'autre point limite de la connexion reçue (ECE), et qui a été réactivée. Par défaut elle vérifie si le bit CWR est placé, mais la correspondance peut aussi être inversée par le signe !. |
Correspondance | --ecn-tcp-ece |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m ecn --ecn-tcp-ece |
Explication |
Cette correspondance peut être utilisée pour sélectionner le bit
|
Correspondance | --ecn-ip-ect |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m ecn --ecn-ip-ect 1 |
Explication |
--ecn-ip-ect est utilisée pour sélectionner les codes caractères ECT (ECN Capable Transport). Les codes caractères ECT possèdent plusieurs types. Principalement, ils sont utilisés pour savoir si la connexion a les possibilités ECN en plaçant un des deux bits à 1. ECT est aussi utilisé par les routeurs pour indiquer qu'ils sont en processus d'engorgement, en plaçant les deux points limite ECT à 1. les valeurs ECT sont toutes disponibles dans la table Champ ECN dans IP ci-dessous. La correspondance peut être inversée par un !, exemple ! --ecn-ip-ect 2 qui va sélectionner toutes les valeurs ECN sauf le point limite ECT(0). La chaîne de valeur correcte dans Iptables est de 0 à 3. Voir ci-dessous pour les valeurs : |
Tableau 10.15. Champ ECN dans IP
Valeur Iptables | ECT | CE | [Obsolète] Noms RFC 2481 pour les bits ECN. |
---|---|---|---|
0 | 0 | 0 | Not-ECT, ie. pas de possibilité de connexion non-ECN |
1 | 0 | 1 | ECT(1), nouvelle convention de nommage des points limite ECT dans la RFC 3168 |
2 | 1 | 0 | ECT(0), nouvelle convention de nommage des points limite ECT dans la RFC 3168 |
3 | 1 | 1 | CE (Congestion Experienced), utilisé pour notifier les points limite pour l'engorgement. |
Il s'agit d'une version modifiée de la Correspondance Limit. Au lieu de placer une simple marque, elle met en place une table de hachage pointant vers les marques pour chaque destination IP, source IP, port source et destination. Par exemple, vous pouvez la placer pour chaque adresse IP qui reçoit au maximum 1000 paquets par seconde, ou vous pouvez dire que chaque service sur une adresse IP spécifique doit recevoir un maximum de 200 paquets par seconde. La correspondance hashlimit est chargée par le mot-clé -m hashlimit.
Chaque règle qui utilise la correspondance hashlimit crée une table de hachage séparée ayant une taille maximale spécifique et un nombre maximal de compartiments. Cette table de hachage contient une empreinte numérique de chaque valeur unique ou multiple. Les valeurs peuvent être la destination IP, la source IP,le port source ou le port destination, ou tout en même temps. Chaque entrée pointe alors vers une empreinte numérique qui fonctionne comme la correspondance limit.
Tableau 10.16. Options de la correspondance Hashlimit
Correspondance | --hashlimit | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000/sec --hashlimit-mode dstip,dstport --hashlimit-name hosts | |||
Explication |
--hashlimit spécifie la limite de chaque compartiment. Dans cet exemple, le hashlimit est placé à 1000. Nous avons placé le hashlimit-mode pour dstip, dstport et destination 192.168.0.3. Pour chaque port ou service le destinataire peut recevoir 1000 paquets par seconde. C'est le même paramètrage que l'option limit pour la correspondance limit. Limit peut prendre /sec, /minute, /hour, /day postfixé. Si aucun postfixage n'est spécifié, le postfixage par défaut est la seconde.
|
|||
Correspondance | --hashlimit-mode | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.0/16 -m hashlimit --hashlimit 1000/sec --hashlimit-mode dstip --hashlimit-name hosts | |||
Explication |
L'option hashlimit-mode spécifie quelle valeur nous devrons utiliser comme valeur de hachage. Dans cet exemple, nous utilisons seulement dstip (destination IP) comme valeur de hachage. Ainsi, chaque hôte dans le réseau 192.168.0.0/16 sera limité en réception d'un maximum de 1000 paquets par seconde dans ce cas. Les valeurs possibles pour le mode hashlimit sont dstip (IP destination), srcip (IP source), dstport (port de destination), et srcport (port source). Toutes ces valeurs peuvent également être séparées par une virgule pour inclure plus d'une valeur de hachage, comme par exemple --hashlimit-mode dstip,dstport.
|
|||
Correspondance | --hashlimit-name | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts | |||
Explication |
Cette option spécifie le nom du hachage dans lequel il sera disponible. Il peut être vu dans le répertoire /proc/net/ipt_hashlimit. L'exemple ci-dessus peut être visible dans le fichier /proc/net/ipt_hashlimit/hosts. Seul le nom de fichier doit être spécifié.
|
|||
Correspondance | --hashlimit-burst | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts --hashlimit-burst 2000 | |||
Explication |
Cette correspondance est identique à --limit-burst en ce qu'elle indique la taille maximum du compartiment. Chaque compartiment aura une limite, qui est le montant maximal de paquets qui peuvent être sélectionnés pendant une unité de temps. Pour un exemple, voir la Correspondance Limit. |
|||
Correspondance | --hashlimit-htable-size | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts --hashlimit-htable-size 500 | |||
Explication |
Indique le maximum de compartiments disponibles. Dans cet exemple, ceci indique un maximum de 500 ports ouverts et actifs au même moment. |
|||
Correspondance | --hashlimit-htable-max | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts --hashlimit-htable-max 500 | |||
Explication |
La --hashlimit-htable-max indique le nombre maximum d'entrées dans la table de hachage. Ce qui veut dire toutes les connexions, incluant les connexions inactives qui ne requièrent pas de compartiment pour l'instant. |
|||
Correspondance | --hashlimit-htable-gcinterval | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts --hashlimit-htable-gcinterval 1000 | |||
Explication |
À quelle fréquence la fonction de récupération des informations parasites doit elle être lancée. Cette valeur devra être plus basse que la valeur expire. Elle est mesurée en millisecondes. Si elle est trop basse elle consommera des ressources système et processeur non nécessaires, mais si elle est trop haute elle peut laisser des compartiments inutilisés trop longtemps et rendre d'autres connexions impossibles. Dans cet exemple la fonction de récupération est lancée chaque seconde. |
|||
Correspondance | --hashlimit-htable-expire | |||
Noyau | 2.6 | |||
Exemple | iptables -A INPUT -p tcp --dst 192.168.0.3 -m hashlimit --hashlimit 1000 --hashlimit-mode dstip,dstport --hashlimit-name hosts --hashlimit-htable-expire 10000 | |||
Explication |
Valeur qui indique la durée après laquelle une entrée dans la table de hachage expirera. Si un compartiment a été inutilisé plus longtemps que, il expirera et la fonction de récupération le supprimera de la table de hachage, ainsi que toutes les afférentes. |
C'est plutôt une correspondance pas très orthodoxe en comparaison des autres, dans ce sens qu'elle utilise une syntaxe spécifique. Elle est utilisée pour sélectionner les paquets, basés sur l'assistant conntrack en relation avec le paquet. Par exemple, regardons une session FTP. La session Contrôle est ouverte, et les ports/connexion sont négociés pour la session Data dans la session Control. Le module assistant ip_conntrack_ftp va trouver cette information, et créer une entrée dans la table conntrack. Maintenant, quand un paquet entre, nous pouvons voir quel protocole est en relation, et pouvons sélectionner le paquet dans nos propres tables de règles basées sur l'assistant qui a été utilisé.
Tableau 10.17. Options de la correspondance Helper
Correspondance | --helper |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m helper --helper ftp-21 |
Explication |
L'option --helper est utilisée pour spécifier une valeur de chaîne, indiquant à la correspondance quelle assistant conntrack sélectionner. Dans sa forme basique, elle peut ressembler à --helper irc. C'est l'endroit où la syntaxe démarre en variant par rapport à la syntaxe normale. Nous pouvons aussi choisir de sélectionner seulement les paquets basés sur tel port que l'original a pris. Exemple, la session Control FTP est normalement transférée sur le port 21, mais elle peut aussi bien l'être sur le port 954 ou un autre. Nous pouvons alors spécifier quel port sera utilisé, comme --helper ftp-954. |
La correspondance de plage IP est utilisée pour sélectionner les plages IP, comme les correspondances --source et --destination peuvent le faire. Cependant, cette correspondance ajoute une sorte de tri différent dans le sens qu'elle peut faire la sélection dans la forme IP à IP, ce que les correspondances --source et --destination sont incapables de faire. Ceci peut être nécessaire dans certains réglages de réseaux spécifiques, et elle est légèrement plus souple.
Tableau 10.18. Options de la correspondance de plage IP
Correspondance | --src-range |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.13-192.168.2.19 |
Explication |
Ceci sélectionne une plage d'adresses source IP. La plage inclut chaque adresse depuis la première jusqu'à la dernière, ainsi l'exemple ci-dessus inclut toutes les adresses depuis 192.168.1.13 jusqu'à 192.168.2.19. Elle peut aussi être inversée avec le !. L'exemple du dessus ressemblera alors à -m iprange ! --src-range 192.168.1.13-192.168.2.19, qui va sélectionner chaque adresse, sauf celles spécifiées. |
Correspondance | --dst-range |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m iprange --dst-range 192.168.1.13-192.168.2.19 |
Explication |
--dst-range fonctionne exactement de la même façon que la correspondance --src-range, sauf qu'elle sélectionne la destination IP au lieu de la source IP. |
La correspondance Length est utilisée pour sélectionner les paquets basés sur leur longueur. C'est très simple. Si vous voulez limiter la longueur des paquets pour quelque étrange raison, ou bloquer ce qui ressemble à un ping-of-death, utilisez cette correspondance.
Tableau 10.19. Options de la correspondance Length
Correspondance | --length |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m length --length 1400:1500 |
Explication |
L'exemple --length va sélectionner tous les paquets de longueur comprise entre 1400 et 1500 octets. Elle peut être inversée en utilisant le signe !, comme ça : -m length ! --length 1400:1500. Elle peut aussi être utilisée pour sélectionner certaines tailles seulement, en supprimant le signe :, comme ceci : -m length --length 1400. La plage est bien sûr inclusive, ce qui inclut tous les paquets dont la longueur est comprise dans les valeurs que vous avez spécifiées. |
L'extension de correspondance limit doit être chargée explicitement avec l'option -m limit. Cette correspondance peut être employée avantageusement pour limiter la journalisation de certaines règles, etc. Par exemple, vous pouvez établir une correspondance avec tous les paquets qui n'excèdent pas une quantité donnée, et au-delà de ce seuil, limiter la journalisation de l'évènement en question. Considérez ce seuil comme une limite temporelle : vous pouvez limiter le nombre de correspondances d'une certaine règle dans un certain laps de temps, par exemple pour atténuer l'impact des attaques de type déni de service (DoS). C'est d'ailleurs la principale application qu'on en fait, mais naturellement, il en existe d'autres. La correspondance limit peut également être inversée en ajoutant le symbole ! juste après le mot limit. Elle s'exprime alors sous la forme -m limit ! --limit 5/s, autrement dit tous les paquets sont sélectionnés quand la limite est dépassée.
Pour décrire plus précisément la correspondance limit, c'est essentiellement un filtre à jetons. Considérez un seau percé qui laisse fuir N paquets par unité de temps. N est défini en fonction du nombre de paquets que nous voulons sélectionner, ainsi si nous voulons 3 paquets, le seau laisse fuir 3 paquets par unité de temps. L'option --limit détermine le nombre de paquets qui peuvent remplir le seau par unité de temps, alors que l'option --limit-burst définit la contenance initiale du seau. Par conséquent, en définissant --limit 3/minute --limit-burst 5, puis en recevant 5 correspondances, le seau sera vidé. Après une attente de 20 secondes, le seau est rempli d'un nouveau jeton, et ainsi de suite jusqu'à ce que le paramètre --limit-burst soit atteint ou jusqu'à ce que les jetons soient tous utilisés.
Considérez l'exemple ci-dessous pour approfondir ce fonctionnement.
-
On définit une règle avec les paramètres -m limit --limit 5/second --limit-burst 10/second. Le paramètre limit-burst du seau à jetons est fixé initialement à 10. Chaque paquet qui établit une correspondance avec la règle consomme un jeton.
-
On reçoit alors des paquets qui correspondent à la règle, 1-2-3-4-5-6-7-8-9-10, tous arrivent dans un intervalle de 1/1000ème de seconde.
-
Le seau de jetons se retrouve complètement vide. Et puisque le seau est vide, les paquets qui rencontrent la règle ne peuvent plus correspondre et poursuivent leur route vers la règle suivante, ou subissent le comportement par défaut de la chaîne.
-
Pour chaque tranche de 1/5ème de seconde sans qu'un paquet ne corresponde, le compteur de jetons augmente de 1, jusqu'à un maximum de 10. Et 1 seconde après avoir reçu 10 paquets, on aura de nouveau 5 jetons de moins.
-
Et naturellement, le seau sera vidé d'1 jeton par paquet reçu.
Tableau 10.20. Options de la correspondance Limit
Correspondance | --limit |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m limit --limit 3/hour |
Explication | Ceci définit le taux de correspondance moyen maximum pour la correspondance limit. Il est spécifié par un nombre suivi éventuellement d'une unité de temps. Les unités suivantes sont actuellement reconnues : /second, /minute, /hour et /day. La valeur par défaut est fixée à 3 correspondances par heure, soit 3/hour. Ceci indique à la correspondance limit combien de fois la correspondance avec un paquet est autorisé par unité de temps (par exemple par minute). |
Correspondance | --limit-burst |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m limit --limit-burst 5 |
Explication | Ceci définit la réserve maximale (ou la salve) de la
correspondance limit.
Il indique à iptables
le nombre maximum de paquets pouvant correspondre pendant l'unité
de temps donnée. Ce nombre est décrémenté de 1 après chaque unité
de temps (spécifiée par l'option --limit) pendant laquelle
l'évènement ne s'est pas produit, jusqu'à atteindre la plus faible
valeur, 1. Si l'évènement se produit de façon répétée, le compteur
est alors incrémenté jusqu'à atteindre la valeur de réserve
maximale, et ainsi de suite. La valeur par défaut de --limit-burst est 5. Pour
comprendre simplement comment ceci fonctionne, utilisez le script
d'exemple Limit-match.txt composé d'une
règle. Grâce à ce script, vous pouvez voir vous-mêmes comment
fonctionne la règle limit, en envoyant des paquets d'écho (de type
ping) à des intervalles différents et en différentes rafales.
Toutes les réponses d'écho seront
bloquées jusqu'à ce que le seuil de réserve maximale soit de
nouveau atteint. |
La correspondance MAC
(Ethernet Media Access Control
-
Interface réseau ethernet) permet de sélectionner des paquets à
partir de leur adresse MAC source
.
Lors de l'écriture de ce document, cette correspondance s'avère
quelque peu limitée, cependant elle pourrait être plus évoluée à
l'avenir, donc plus utile. Cette correspondance peut être utilisée
pour sélectionner les paquets sur la source de l'adresse MAC
seulement comme précédemment indiqué.
Note | |
---|---|
Remarquez que l'utilisation de ce module impose de le charger explicitement avec l'option -m mac. Il est nécessaire de le rappeler ici vu le nombre de personne croyant pouvoir l'invoquer seulement par -m mac-source, ce qui n'est pas possible. |
Tableau 10.21. Options de la correspondance Mac
Correspondance | --mac-source |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 |
Explication | Cette correspondance permet de
sélectionner des paquets à partir de leur adresse MAC source . L'adresse MAC doit être spécifiée de la forme
XX:XX:XX:XX:XX:XX, autrement
elle n'est pas valide. La correspondance peut être inversée avec le
signe ! et ressemble
alors à --mac-source !
00:00:00:00:00:01. Autrement dit, ceci inverse le
sens de la corrrespondance, en sélectionnant tous les paquets sauf
ceux possédant l'adresse MAC
spécifiée. Notez que comme les adresses
MAC ne sont utilisées que dans les réseaux de type Ethernet,
cette correspondance ne s'applique qu'aux interfaces Ethernet. La
correspondance MAC
est valide seulement dans les chaînes PREROUTING , FORWARD et INPUT , et nulle part ailleurs. |
L'extension de correspondance mark permet de sélectionner des paquets à partir de leur marquage. Le marquage désigne un champ particulier, pris en charge uniquement au sein du noyau, et lié aux paquets circulant à travers la machine. Le marquage peut être employé par différentes routines du noyau pour des tâches comme de la régulation de trafic ou du filtrage. Aujourd'hui, il n'existe qu'un seul moyen de définir un marquage sous Linux, c'est la cible MARK dans iptables. Auparavant, il s'agissait de la cible FWMARK dans ipchains, et c'est pourquoi nombre de gens se réfèrent encore à FWMARK dans les documentations avancées sur le routage. Le champ de marquage est actuellement défini comme un entier non signé, soit 4294967296 valeurs possibles sur un système 32 bits. En d'autres termes, vous ne risquez pas de sitôt de dépasser cette limite et vous êtes tranquille pour quelques temps.
Tableau 10.22. Options de la correspondance Mark
Correspondance | --mark |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -t mangle -A INPUT -m mark --mark 1 |
Explication | Cette correspondance permet de
sélectionner des paquets qui ont été préalablement marqués. Les
marquages peuvent être positionnés avec la cible MARK développée dans la section
suivante. Tous les paquets transitant par Netfilter se voient affectés d'un champ de marquage spécial. Notez que ce
champ de marquage n'est propagé en
aucune manière, que ce soit à l'intérieur ou à l'extérieur du
paquet. Il reste exclusivement à l'intérieur de la machine qui l'a
créé. Si le champ de marquage est
égal à la valeur de l'option --mark, il y a correspondance. Le
champ de marquage est un entier non
signé, par conséquent 4294967296 différents marquages peuvent
exister. Vous pouvez également utiliser un masque avec le marquage.
Dans ce cas, la spécification de marquage ressemble, par exemple, à
--mark 1/1. Quand un
masque est spécifié, on effectue un ET logique avec le marquage
spécifié avant de réaliser la comparaison réelle. |
L'extension de correspondance multiport permet de spécifier plusieurs ports et intervalles et ports destination. Sans cette possibilité, vous devriez utiliser différentes règles du même genre, juste pour établir une correspondance avec différents ports.
Note | |
---|---|
Vous ne pouvez pas utiliser simultanément la correspondance de port standard et la correspondance multiport. Par exemple, il est inutile d'écrire : --sport 1024:63353 -m multiport --dport 21,23,80, car ça ne marchera pas. Si vous le faites quand même, iptables considèrera le premier élément de la règle et ignorera l'instruction multiport. |
Tableau 10.23. Options de la correspondance Multiport
Correspondance | --source-port |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110 |
Explication | Cette correspondance sélectionne plusieurs ports source. Au maximum, 15 ports peuvent être spécifiés. Les ports doivent être séparés par des virgules, comme dans l'exemple ci-dessus. Cette correspondance ne peut être employée qu'avec les correspondances -p tcp ou -p udp. C'est principalement une version améliorée de la correspondance classique --source-port. |
Correspondance | --destination-port |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110 |
Explication | Cette correspondance sélectionne plusieurs ports destination. Elle fonctionne exactement de la même façon que la correspondance de port source mentionnée précédemment, excepté qu'elle s'applique aux ports destination. Elle dispose aussi d'une limite de 15 ports, et ne peut être employée qu'avec -p tcp et -p udp. |
Correspondance | --port |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m multiport --port 22,53,80,110 |
Explication | Cette extension de correspondance permet de sélectionner les paquets à partir à la fois de leur port destination et de leur port source. Elle fonctionne de la même façon que les correspondances --source-port et --destination-port présentées ci-dessus. Elle accepte 15 ports au maximum, et ne peut être employée qu'avec -p tcp et -p udp. Notez que la correspondance --port ne peut sélectionner que les paquets qui viennent et vont vers le même port, par exemple, du port 80 au port 80, du port 110 au port 110, etc. |
L'extension de correspondance owner permet de sélectionner des
paquets à partir de l'identité du processus qui les a créés. Le
propriétaire (owner)
peut être spécifié comme étant l'identifiant de l'utilisateur qui a
lancé la commande en question, de son groupe, du processus, de la
session, ou bien de la commande elle-même. À l'origine, cette
extension a été écrite pour donner un exemple des utilisations
possibles d'iptables.
La correspondance owner fonctionne seulement dans
la chaîne OUTPUT
pour des raisons
évidentes : il est presque impossible d'extraire des éléments
d'information sur l'identité de l'instance ayant envoyé un paquet à
partir de l'autre extrémité, et où a lieu le saut intermédiaire
avant la destination finale. Et même dans la chaîne OUTPUT
, ce n'est pas vraiment fiable puisque
certains paquets peuvent ne pas avoir de propriétaire. Les célèbres
paquets de ce genre sont, entre-autres, les réponses ICMP
. Donc les réponses ICMP
ne correspondront jamais.
Tableau 10.24. Options de la correspondance Owner
Correspondance | --cmd-owner |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m owner --cmd-owner httpd |
Explication |
C'est la correspondance de la commande owner, utilisée pour faire la sélection sur la base du nom de commande du processus qui a envoyé le paquet. Dans l'exemple, httpd est sélectionné. Cette correspondance peut aussi être intervertie par un point d'exclamation, par exemple -m owner ! --cmd-owner ssh |
Correspondance | --uid-owner |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m owner --uid-owner 500 |
Explication | Avec cette correspondance, le paquet
est sélectionné s'il a été créé par l'identifiant d'utilisateur (UID) donné. Ceci
permet d'établir une correspondance avec les paquets sortants basée
sur celui qui les a créés. Une utilisation possible serait
d'empêcher tout utilisateur autre que root d'ouvrir de nouvelles
connexions extérieures au pare-feu. Une autre possibilité pourrait
être d'empêcher tout le monde sauf l'utilisateur http d'envoyer des paquets à partir du port
HTTP . |
Correspondance | --gid-owner |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m owner --gid-owner 0 |
Explication | Cette correspondance permet de
sélectionner des paquets à partir de leur identifiant de groupe (GID). Ainsi on
établit une correspondance avec tous les paquets associés au groupe
auquel appartient l'utilisateur ayant créé le paquet. Par exemple,
ceci permet d'empêcher tous les utilisateurs sauf ceux appartenant
au groupe network de naviguer
sur Internet, ou comme précédemment, d'autoriser seulement les
membres du groupe http à créer
des paquets sortants par le port HTTP . |
Correspondance | --pid-owner |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m owner --pid-owner 78 |
Explication | Cette correspondance permet de
sélectionner des paquets à partir de l'identifiant de processus (PID) qui est
responsable d'eux. Cette correspondance est un peu plus difficile à
utiliser, mais il est possible, par exemple, d'autoriser seulement
le PID 94 à envoyer des paquets par
le port HTTP (si le processus
HTTP n'est pas un fil d'exécution,
bien sûr). Une autre alternative serait d'écrire un petit script
qui récupère le PID à partir de la
sortie d'une commande ps pour un "démon" spécifique, et
qui ajoute ensuite une règle pour le numéro récupéré. Pour donner
un exemple, vous pouvez élaborer une règle comme celle présente
dans l'exemple . |
Correspondance | --sid-owner |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m owner --sid-owner 100 |
Explication | Cette correspondance permet de
sélectionner des paquets à partir de l'identifiant de session (SID) utilisé par le
programme en question. La valeur du SID d'un processus est celle du processus
lui-même et de tous les processus découlant du processus d'origine.
Ces derniers peuvent être un fil d'exécution ("thread"), ou un
processus fils du processus d'origine. Donc par exemple, tous les
processus HTTPD devraient posséder
le même SID que leur processus
parent (le processus HTTPD
d'origine), si le HTTPD appartient
à un fil d'exécution (comme la plupart des processus HTTPD , Apache et Roxen par exemple). Ceci est
illustré par un petit script qui s'appelle Sid-owner.txt. Celui-ci pourrait
éventuellement être lancé toutes les heures et enrichi de code
supplémentaire pour vérifier que l'exécution du processus
HTTPD est toujours en cours et le
redémarrer sinon, avant de vider et redéfinir la chaîne
OUTPUT si nécessaire. |
Note | |
---|---|
La sélection des pid et sid ne fonctionne pas avec les noyaux SMP car ils utilisent différents processus pour chaque processeur. Ce devrait être réglé dans le futur. |
Cette correspondance sert à sélectionner les paquets basés sur leur type. C'est à dire, ceux destinés à une personne précise, à tout le monde ou à un groupe de machines spécifique ou encore des utilisateurs. Ces trois groupes sont généralement appelés unicast, broadcast et multicast, comme nous l'avons vu dans le chapitre Rappel TCP/IP. La correspondance est chargée par la commande : -m pkttype.
Tableau 10.25. Options de la correspondance type de paquet
Correspondance | --pkt-type |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m pkttype --pkt-type unicast |
Explication |
La correspondance --pkttype sert à indiquer quel
type de paquet sélectionner. Elle peut prendre soit |
La correspondance realm est utilisée pour sélectionner les paquets basés sur le domaine de routage dont il font partie. Les domaines de routage sont utilisés dans Linux pour les scénarios de routage complexe comme BGP, etc. La correspondance realm est chargée en ajoutant le mot-clé -m realm à la ligne de commande.
Un domaine de routage est utilisé dans Linux pour classer les routes en groupes logiques. Dans la plupart des routeurs dédiés aujourd'hui, la Base d'Information de Routage (Routing Information Base - RIB) et le moteur de transfert sont très proches. Dans le noyau par exemple. Linux n'est pas réellement un système de routage dédié, il a été forcé de séparer ses RIB et FIB (Base d'Information de Transfert). Le RIB se situe au niveau domaine utilisateur et le FIB au niveau du noyau. À cause de cette séparation, il devient gourmand en ressource de faire des recherches rapides dans le RIB. Le domaine de routage est la solution Linux pour ça, il rend le système plus flexible et plus riche.
Les domaines Linux peuvent être utilisés avec BGP et autres
protocoles de routage qui délivrent une grande quantité de routes.
Le démon de routage peut alors trier les routes par leur préfixe,
chemin ou source par exemple, et les placer dans différents
domaines. Le domaine est numérique, mais peut aussi être nommé par
le fichier /etc/iproute2/rt_realms
.
Tableau 10.26. Options de la correspondance Realm
Correspondance | --realm |
Noyau | 2.6 |
Exemple | iptables -A OUTPUT -m realm --realm 4 |
Explication |
Cette option sélectionne le nombre de domaines et
optionnellement un masque. Si ce n'est pas un nombre, il résoudra
le domaine par le fichier |
La correspondance recent est une système plutôt important et complexe, qui nous permet de sélectionner des paquets basés sur les événements récents. Exemple, si nous voulons voir une sortie de connexion IRC, nous pouvons placer l'adresse IP dans une liste d'hôtes, et avoir une autre règle qui permet des requêtes d'identification en retour d'un serveur IRC dans les 15 secondes de veille du paquet d'origine.
Avant nous pouvons avoir une vue plus précise de cette correspondance, voyons comment elle fonctionne. En premier, nous utilisons différentes règles pour utiliser l'appariement récent. Celui-ci se sert de plusieurs listes d'événements récents. Par défaut la liste utilisée est DEFAULT. Nous créons une nouvelle entrée dans la liste avec cette option, ainsi une fois qu'une règle est complètement vérifiée (l'option placée est toujours une correspondance), nous pouvons ajouter une entrée dans la liste récente spécifiée. L'entrée de la liste contient un horodatage, et l'adresse source IP utilisée dans le paquet qui déclenche l'option. Une fois ceci fait, nous pouvons utiliser une série d'options différentes pour sélectionner cette information, comme la mise à jour des entrées d'horodatage, etc.
Enfin, si nous voulons pour quelque raison supprimer une entrée de la liste, nous pouvons le faire en supprimant la correspondance du module récent. Toutes les règles utilisant la correspondance Recent, doivent charger ce module (-m recent). Voyons en les options.
Tableau 10.27. Options de la correspondance Recent
Correspondance | --name |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m recent --name examplelist |
Explication |
L'option "name" donne le nom de la liste à utiliser. Par défaut la liste DEFAULT est utilisée, ce qui n'est probablement pas ce que nous voulons si nous nous servons de plus d'une liste. |
Correspondance | --set |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m recent --set |
Explication |
Ceci crée une nouvelle entrée dans la liste récente, qui contient un horodatage et l'adresse source IP de l'hôte qui a déclenché la règle. Cette correspondance retournera toujours vrai, sauf si elle précédée du signe !, auquel cas elle renverra faux. |
Correspondance | --rcheck |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m recent --name examplelist --rcheck |
Explication |
L'option --rcheck vérifie si l'adresse IP source du paquet est dans la liste nommée. Si c'est le cas, la correspondance renvoit un "vrai", dans le cas contraire elle renverra un "faux". Cette option peut être inversée avec le signe !. Dans ce dernier cas, elle renverra vrai si l'adresse IP source n'est pas dans la liste, et faux si elle est dans la liste. |
Correspondance | --update |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m recent --name examplelist --update |
Explication |
Cette correspondance est vraie si la source est disponible dans la liste spécifiée et met à jour le dernier horodatage dans la liste. Elle peut aussi être inversée par le ! devant le module. Exemple, ! --update. |
Correspondance | --remove |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --remove |
Explication |
Cette correspondance essaie de trouver l'adresse source du paquet dans la liste, et renvoie un vrai si le paquet est présent. Elle supprimera aussi l'entrée de liste correspondante de la liste. Cette commande peut être inversée avec le signe !. |
Correspondance | --seconds |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --check --seconds 60 |
Explication |
Cette correspondance n'est valide seulement qu'avec les commandes --check et --update. Le module --seconds est utilisé pour spécifier le délai de mise à jour de la colonne "dernier apperçu" dans la liste récente. Si la colonne dernier apperçu est plus ancienne qu'un certain nombre de secondes, la correspondance renvoit faux. Si la correspondance récent fonctionne normalement, l'adresse source doit toujours être dans la liste pour un retour vrai de la correspondance. |
Correspondance | --hitcount |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --check --hitcount 20 |
Explication |
La correspondance --hitcount doit être utilisée avec les commandes --check ou --update, elle limitera la sélection aux seuls paquets vus par le compteur. Si cette correspondance est utilisée avec la commande --seconds, cela nécessite que le compteur de paquets spécifié soit vu dans le bloc de temps. Elle peut être inversée par le signe ! devant la commande. Avec la commande --seconds, elle indique le maximum de paquets qui peuvent avoir été vus durant le bloc de temps spécifié. Si les deux correspondances sont inversées, alors un maximum de paquets peuvent avoir été vus durant le dernier minimum de secondes. |
Correspondance | --rttl |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --check --rttl |
Explication |
La correspondance --rttl vérifie que la valeur TTL du paquet est la même que celle du paquet original utilisé pour placer l'entrée dans la liste récente. Ceci peut être utilisé pour vérifier que les adresses sources de personnes n'ont pas été mystifiées (spoofing) pour interdire aux autres l'accès à leur serveur en faisant usage de la correspondance recent. |
Correspondance | --rsource |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --rsource |
Explication |
La correspondance --rsource indique au module recent de sauvegarder l'adresse source et les ports dans la liste recent. C'est le comportement par défaut. |
Correspondance | --rdest |
Noyau | 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m recent --name example --rdest |
Explication |
--rdest est l'opposé de --rsource en ce qu'elle indique à la correspondance recent d'enregistrer l'adresse et le port de destination dans la liste recent. |
j'ai créé un petit exemple de script sur la façon d'utiliser la correspondance recent, vous pouvez le trouver dans la section Recent-match.txt.
En bref, c'est une pauvre variation de la machine d'état disponible dans netfilter. Cette version fut créé avec à l'esprit un serveur http, mais qui fonctionnera avec n'importe quelle connexion TCP. En premier, nous avons créé deux chaînes nommées http-recent et http-final. La chaîne http-recent est utilisée aux étapes du démarrage de la connexion, et pour la transmission des données, tandis que la chaîne http-final est utilisée pour les derniers FIN, FIN/ACK dans l'établissement de la liaison.
Avertissement | |
---|---|
C'est une très mauvaise alternative pour la machine d'état et elle ne dispose pas de toutes les possibilités de la machine d'état. Cependant, c'est un bon exemple de ce qui peut être fait avec la correspondance Recent sans être trop spécifique. N'utilisez pas cet exemple en production. Il est lent, gère mal les cas spéciaux, et ne doit être jamais être utilisé que comme un exemple. Par exemple, il ne gère pas les ports fermés dans une connexion, les établissements de liaison FIN asynchrones (où une des parties connectée se ferme, tandis que l'autre continue d'envoyer des données), etc. |
Suivons un paquet à travers l'exemple de la table de règles.
D'abord le paquet entre dans la chaîne INPUT
, et nous l'envoyons à la chaîne
http-recent
.
-
Le premier paquet sera un paquet SYN, et n'aura pas de bit ACK, FIN ou RST placé. Il est sélectionné en utilisant la ligne --tcp-flags SYN,ACK,FIN,RST SYN. À ce niveau nous ajoutons la connexion à httplist avec la ligne -m recent --name httplist --set. Enfin nous acceptons le paquet.
-
Après le premier paquet nous recevons un paquet SYN/ACK indiquant que le paquet SYN a été reçu. Ceci peut être vérifié en utilisant la ligne --tcp-flags SYN,ACK,FIN,RST SYN,ACK. FIN et RST sont illégaux à ce niveau. Nous mettons à jour l'entrée dans httplist par -m recent --name httplist --update et finalement nous avons l'ACCEPT du paquet.
-
Maintenant nous obtenons un paquet final ACK, venant du créateur de la connexion, nous permettant de savoir que le SYN/ACK a été envoyé par le serveur. SYN, FIN et RST devraient être illégaux à ce point de la connexion, et la ligne ressemblera à --tcp-flags SYN,ACK,FIN,RST ACK. Nous mettons à jour la liste de la même façon que dans l'étape précédente, et nous ACCEPTons.
-
À ce niveau, la transmission de données peut démarrer. La connexion ne contiendra jamais aucun paquet SYN maintenant, mais contiendra des paquets ACK pour permettre de savoir que les données sont envoyées. Chaque fois que nous voyons un paquet comme celui-là, nous mettons à jour la liste et ACCEPTons les paquets.
-
La transmission peut se terminer de deux façons, la plus simple est le paquet RST. RST réinitialisera la connexion et la coupera. Avec FIN/ACK le correspondant répond avec un FIN, et ferme la connexion ainsi l'expéditeur du FIN/ACK ne peut plus envoyer de données. L'hôte qui reçoit le FIN pourra toujours envoyer des données, et nous arrivons à l'étape finale de la connexion.
-
Dans les chaînes http-recent-final nous vérifions si le paquet est toujours dans la httplist, et si c'est le cas, nous l'envoyons à la chaîne http-recent-final1. Dans cette chaîne nous supprimons la connexion de la httplist l'ajoutons à la liste http-recent-final. Si la connexion a déjà été supprimée et déplacée vers la liste http-recent-final, nous envoyons le paquet vers la chaîne http-recent-final2.
-
Dans la chaîne http-recent-final2, nous attendons que la partie non fermée finisse d'envoyer ses données, et fermons ensuite la connexion. Une fois ceci fait, la connexion est définitivement fermée.
Comme nous l'avons vu la liste recent peut devenir tout à fait complexe, mais elle nous donne un vaste éventail de possibilités si nécessaire. Encore une fois, nous ne réinventons pas la roue. Si la fonctionnalité que vous désirez est déjà implémentée, utilisez la au lieu d'essayer de créer votre propre solution.
L'extension de correspondance state est associée au code de
traçage de connexion dans le noyau. La correspondance d'état accède
à l'état du traçage de connexion des paquets grâce à la machine de
"conntracking". Elle permet de savoir dans quel état se trouve la
connexion, et fonctionne pour quasiment tous les protocoles y
compris les protocoles sans état tels que ICMP
et UDP
.
Dans tous les cas, la connexion est sujette à un dépassement de
temps établi par défaut ("default timeout") et sera, le cas
échéant, supprimée de la base de données du traçage de connexion.
Cette correspondance exige d'être chargée explicitement en ajoutant
la directive -m state
à la règle. Vous disposerez alors d'une nouvelle correspondance
appelée state. Le
concept de correspondance d'état est couvert plus en détail dans le
chapitre La machine d'état,
étant donné que le sujet est assez vaste.
Tableau 10.28. Options de la correspondance State
Correspondance | --state |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -m state --state RELATED,ESTABLISHED |
Explication |
Cette option indique à la correspondance state dans quels états doivent
être les paquets pour être sélectionnés. Actuellement, 4 états sont
disponibles : INVALID, ESTABLISHED, NEW et RELATED. INVALID signifie que le paquet
n'est associé à aucun flux, ni à aucune connexion connus, et qu'il
peut contenir des données ou des en-têtes erronés. ESTABLISHED signifie que le
paquet est lié à une connexion déjà établie, qui a vu passer des
paquets dans les deux directions et qui est considérée comme
valide. NEW signifie
que le paquet a démarré ou démarrera une nouvelle connexion, ou
bien qu'il est associé à une connexion qui n'a pas vu passer des
paquets dans les deux directions. Enfin, RELATED signifie que le paquet
démarre une nouvelle connexion et qu'il est associé à une connexion
déjà établie. Ceci peut évoquer par exemple un |
La correspondance tcpmss est utilisée pour
sélectionner un paquet basé sur le Maximum
Segment Size
(Taille maximum de segment) dans TCP
. Ceci vérifie seulement la validité des
paquets SYN
et SYN/ACK
. Pour une explication plus détaillée de
la valeur MSS, voir l'annexe, Options
TCP la RFC
793 - Transmission Control Protocol et la RFC 1122 - Requirements for Internet
Hosts - Communication Layers. Cette correspondance est chargée
en utilisant -m
tcpmss et prend uniquement cette option.
Tableau 10.29. Options de la correspondance Tcpmss
Correspondance | --mss |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp --tcp-flags SYN,ACK,RST SYN -m tcpmss --mss 2000:2500 |
Explication |
L'option --mss
indique à la correspondance tcpmss quel -m tcpmss ! --mss 2000:2500 Cet exemple vérifiera toutes les valeurs MSS, sauf les valeurs comprises dans la plage 2000 à 2500. |
La correspondance TOS peut servir à sélectionner
les paquets à partir de leur champ de
TOS
. TOS
signifie
type de service
; il est constitué
de 8 bits et se situe dans l'en-tête IP. Cette correspondance est
chargée explicitement en ajoutant -m
tos à la règle. Elle est normalement utilisée afin
d'informer les hôtes intermédiaires de l'ordre de priorité du flux
et de son contenu (ce n'est pas vraiment le cas, mais il informe
des besoins spécifiques au flux, comme une réexpédition aussi
rapide que possible, ou un impératif de débit). Les différents
routeurs et administrateurs gèrent ces valeurs de façon variable.
La plupart ne s'en préoccupent pas du tout, alors que d'autres font
de leur mieux pour gérer les paquets en question et les données
qu'ils fournissent.
Tableau 10.30. Options de la correspondance Tos
Correspondance | --tos |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A INPUT -p tcp -m tos --tos 0x16 |
Explication | Cette correspondance s'utilise tel que
décrit ci-dessus. Elle sélectionne les paquets à partir de leur
champ de TOS et de sa valeur. Ceci
peut être employé avec le programme iproute2 et les fonctions
avancées de routage de Linux pour effectuer un marquage des paquets pour un
usage ultérieur. La correspondance prend en option une valeur
hexadécimale ou numérique, ou éventuellement un des noms fournis
par la commande 'iptables -m tos
-h'. Actuellement, elle fournit les noms suivants :
Minimize-Delay 16 (0x10) ,
Maximize-Throughput 8 (0x08) ,
Maximize-Reliability 4 (0x04) ,
Minimize-Cost 2 (0x02) , et
Normal-Service 0 (0x00) .
Minimize-Delay signale de
minimiser le retard pour les paquets qui traversent - les services
classiques qui requièrent ceci peuvent être, par exemple,
telnet , SSH et FTP-control . Maximize-Throughput précise de trouver un
chemin qui offre le plus haut débit possible - un protocole typique
est FTP-data . Maximize-Reliability indique de maximiser
la fiabilité de la connexion, donc d'utiliser des lignes aussi
fiables que possible - deux exemples typiques sont BOOTP et TFTP .
Minimize-Cost signale de
minimiser le coût des paquets qui traversent tous les liens vers le
client ou le serveur ; par exemple, déterminer la route qui offre
le voyage le moins onéreux de bout en bout. Des exemples de
protocoles classiques qui peuvent l'utiliser sont RTSP ("Real Time Stream Control Protocol" ou
protocole de contrôle de flux en temps-réel) et d'autres protocoles
de flux vidéo/audio. Enfin, Normal-Service désigne tout protocole
classique n'ayant aucun besoin particulier. |
La correspondance TTL permet de sélectionner les
paquets à partir de leur champ TTL
("Time To Live" ou durée de vie) localisé dans l'en-tête IP. Le
champ TTL
contient 8 bits de
données, et il est décrémenté de 1 à chaque fois qu'il est traité
par un hôte intermédiaire entre le client et l'hôte destinataire.
Si le TTL
atteint 0, un message
ICMP
type 11 code 0 (TTL égal à 0
pendant le transit) ou code 1 (TTL égal à 0 pendant le
réassemblage) est transmis à l'expéditeur du paquet pour l'informer
du problème. Cette correspondance est utilisée seulement pour
sélectionner les paquets à partir de leur TTL
, et non pour effectuer une modification
quelle qu'elle soit. Ce comportement, soit dit en passant,
s'applique à tout type de correspondance. Pour charger cette
correspondance, vous devez ajouter -m
ttl à la règle.
Tableau 10.31. Options de la correspondance Ttl
Correspondance | --ttl-eq |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m ttl --ttl-eq 60 |
Explication | Cette option de correspondance permet
de spécifier la valeur TTL à
sélectionner. Cette option requiert une valeur numérique et établit
une correspondance avec cette valeur dans le paquet. Aucune
inversion n'est disponible et il n'y a rien d'autre, en
particulier, à sélectionner. Mais ceci peut être utile, par
exemple, pour déboguer votre réseau local - c'est-à-dire les hôtes
de votre LAN qui semblent présenter des problèmes de connexion avec
un hôte sur Internet - ou pour trouver d'éventuelles entrées de
chevaux de Troie, etc. Les possibilités de cette option sont
relativement limitées, cependant son intérêt dépend essentiellement
de votre imagination. Un exemple pourrait être de trouver des hôtes
avec de mauvaises valeurs par défaut de TTL (pouvant être la conséquence d'un pile
TCP/IP mal implémentée, ou
simplement d'un défaut de configuration). |
Correspondance | --ttl-gt |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m ttl --ttl-gt 64 |
Explication | Cette option sert à sélectionner un TTL plus grand que la valeur spécifiée. La valeur peut être comprise entre 0 et 255 et la correspondance ne peut pas être intervertie. Elle peut, par exemple sélectionner un TTL plus grand qu'une valeur spécifiée et ensuite la forcer vers une valeur standardisée. Elle peut être utilisée pour contourner certaines formes d'espionnage de la part des fournisseurs d'accès qui cherchent à savoir si vous avez plusieurs machines derrière un pare-feu, à l'encontre de leurs règlements. |
Correspondance | --ttl-lt |
Noyau | 2.3, 2.4, 2.5 et 2.6 |
Exemple | iptables -A OUTPUT -m ttl --ttl-lt 64 |
Explication | La correspondance --ttl-lt est utilisée pour sélectionner les TTL plus petits qu'une valeur spécifiée. C'est à peu près la même que --ttl-gt, mais sélectionne les TTL plus petits. Elle peut être utilisée également de la même façon que --ttl-gt, ou pour simplement homogénéiser les paquets quittant votre réseau en général. |
La correspondance unclean ne prend aucune option et ne nécessite rien de plus qu'un chargement explicite si vous souhaitez l'utiliser. Notez que cette option est considérée comme expérimentale, qu'elle peut ne pas fonctionner en toutes circonstances et qu'elle ne prendra pas en charge tous les paquetages ou problèmes relatifs à unclean. La correspondance unclean tente de sélectionner les paquets qui paraissent malformés ou inhabituels, comme des paquets avec des en-têtes ou des sommes de contrôle (checksums) erronés. Elle peut être utilisée pour rejeter des connexions (avec la cible DROP) et pour rechercher les flux douteux par exemple. Cela dit, vous devez être conscient qu'il existe un risque d'interruption de connexions saines.