Les commandes iptables
Transcription
Les commandes iptables
Les commandes iptables Jean-Philippe Gaulier 2005-08-22 Résumé Ce cours vous invite à pénétrer dans l’univers formidable du firewall netfilter et de son indissociable iptables. Vous trouverez ici les règles de base vous permettant une prise en main rapide du logiciel. 1 Table des matières 1 L’histoire selon Linux 3 2 IPtables 3 3 Les 3.1 3.2 3.3 4 4 5 6 chaı̂nes Comment créer une nouvelle chaı̂ne ? . . . . . . . . . . . . . . . . Comment effacer une chaı̂ne ? . . . . . . . . . . . . . . . . . . . . Lister les chaı̂nes et leur contenu . . . . . . . . . . . . . . . . . . 4 La remise à zéro des compteurs 7 5 Les polices de sécurité des chaı̂nes 8 6 Les 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 règles Créer une règle . . . . . . . . Jouer avec les drapeaux TCP Les options pour UDP . . . . Les options pour ICMP . . . La correspondance . . . . . . Les cibles . . . . . . . . . . . Les interfaces . . . . . . . . . La fragmentation . . . . . . . Enlever une règle . . . . . . . . . . . . . . . . 7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 10 11 11 12 13 13 14 14 15 2 1 L’histoire selon Linux Le filtrage de paquets semble nécessaire à partir du moment où votre machine se connecte à une autre machine, et ce pour la simple et bonne raison que vous ne voulez en aucun cas que qui que ce soit vienne faire n’importe quoi chez vous sans votre autorisation. Pour cela, dès la version 1.1 de linux (j’entends par là le noyau, bien sûr), Alan Cox a porté une premiere version de filtre fondé sur ipfw de BSD. Il a été amélioré dans la version 2.0, entre autres par Jos Vos, mais ce n’est pas l’unique contributeur. Au milieu de l’année 1998, Rusty Russel et Michael Neuling retravaillèrent le noyau et introduisirent l’outil ipchains. Ipchains existe sous la branche linux 2.2. La génération 2.4 du noyau s’est vue fournie d’un outil de la quatrième génération nommé iptables. Cela sous-entend quoi ? Qu’il vous est nécessaire d’avoir un noyau 2.4 minimum et de positionner ”CONFIG NETFILTER” a Y (pour Yes, oui en francais) dans la configuration de ce dernier. En pratique, vous avez accès a netfilter depuis le noyau 2.3.15, et vous devez donc pouvoir vous servir d’iptables par dessus. Qu’est ce qu’iptables en fait ? Est-ce le firewall ? est-ce un logiciel ? est-ce la recette de la potion magique ? Iptables est un outil, une interface, permettant d’insérer et de supprimer les règles de la table du filtre de paquets du noyau. 2 IPtables Quelques petites règles sont à observer. La configuration de votre firewall est archivée dans votre noyau, ce qui signifie qu’au prochain redémarrage, toutes les règles seront perdues. Vous devez créer un fichier ou seront stockées toutes les règles et chaı̂nes qui vous semblent nécessaires. En tant que bon éleve, faites une copie du fichier. Russel préconise l’emploi de iptables-save et iptables-restore. Vous pouvez tout aussi bien les appeler remus et romulus, si ca vous parle et surtout si vous avez le courage de lier le tout. Il existe en effet des petites options pour iptables-save et iptables-restore qui peuvent s’avérer bien pratiques (voir leur man respectif pour en apprendre davantage). Placez votre script d’initialisation de règles à l’endroit adéquat. Assurez-vous de faire quelque chose de réfléchi, au cas où il y aurait un problème aléatoire lors de l’exécution de votre script (balancer un ‘exec /sbin/sulogin‘ par exemple). Maintenant que le décor est posé, il est nécessaire de regarder un petit peu plus en avant l’essentiel. Nous verrons donc deux parties. La premiere concerne la gestion des chaı̂nes, la deuxième approche la gestion des règles à l’intérieur des chaı̂nes. A savoir qu’une chaı̂ne est constituée d’un ensemble de règles. Au commencement, vous possédez en tout et pour tout trois chaı̂nes vierges. INPUT, OUTPUT et FORWARD. Chacune de ces chaı̂nes possède également une politique globale de traitement, ce qui veut dire que si rien n’est indiqué, c’est cette politique globale qui s’appliquera par défaut à l’ensemble des règles inscrites dans cette chaı̂ne. Chaines initiales 3 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 3 3.1 Les chaı̂nes Comment créer une nouvelle chaı̂ne ? iptables -N votre_nom_de_cha^ ıne Vous remarquerez que votre nom de chaı̂ne figure ici en minuscules. Par convention, les chaı̂nes définies par l’utilisateur sont écrites en minuscules pour les distinguer des autres. Votre chaı̂ne maintenant créée, vous pouvez la remplir de règles. Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain toto (0 references) target prot opt source destination Ajouter une nouvelle règle a une chaı̂ne : iptables -A Pour l’exemple, nous droperons tous les paquets icmp en provenance de 127.0.0.1 : $>iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- localhost.localdomain anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 4 Chain toto (0 references) target prot opt source destination Notre règle a été correctement ajoutée. Nous reviendrons plus tard sur l’écriture conforme d’une règle. 3.2 Comment effacer une chaı̂ne ? Pour les besoins de l’exemple, je prendrai le fait que, par mégarde, j’ai rentré quatre fois de suite la meme règle dans la meme chaı̂ne (sic). Nous obtenons donc : Chain INPUT (policy target prot opt DROP icmp -DROP icmp -DROP icmp -DROP icmp -- ACCEPT) source destination localhost.localdomain anywhere localhost.localdomain anywhere localhost.localdomain anywhere localhost.localdomain anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain toto (0 references) target prot opt source destination Bien que tout ceci soit d’une absurdité totale, cela va nous permettre d’approcher deux nouvelles options. En effet, devant cette redondance de chaı̂ne, il va nous falloir faire le ménage ! Pour cela, vous avez le choix entre l’effeuillage ligne par ligne ou alors le nettoyage complet. C’est l’option que l’on pourrait assimiler a la chasse d’eau, -F (ou –flush). Cette option vide completement une chaı̂ne. $>iptables -F nom_de_votre_cha^ ıne Attention ! Si vous ne spécifiez aucune chaı̂ne, toutes les chaı̂nes seront vidées. Une méthode plus élégante revient à faire aussi simple que pour sa création : $>iptables -X ma_cha^ ıne L’auteur d’iptables pose la question du X. Pourquoi employer cette lettre qui n’a réellement aucun sens. En effet, jusqu’a présent, ce que nous avons pu voir ramenait toujours vers un mot significatif ; A pour add, N pour new, F pour flush, D pour delete. Alors pourquoi employer X ici. En général, un X marque l’emplacement, peut-être trouverez-vous un trésor derrière celui-ci. Pour ceux que cela intéresse vraiment, le X a été adopté car toutes les autres ’bonnes’ lettres étaient déja prises :) De même que pour l’option de flush, une petite règle a été insérée. Si aucune chaı̂ne n’est citée, iptables tentera d’effacer toutes les chaı̂nes définies par les utilisateurs. Vous ne pouvez pas supprimer les trois chaı̂nes crées par défaut, a savoir INPUT, OUTPUT et FORWARD. 5 3.3 Lister les chaı̂nes et leur contenu Toute création nécessite un regard sur son oeuvre. Vous ne pourrez en aucun cas travailler indéfiniment a l’aveuglette. Nous avons vu que les règles étaient stockées dans un fichier. Faire appel a ce fichier pour connaitre les règles instaurées releverait de la lourdeur la plus totale et surtout, cela ne prendrait en aucun cas les changements effectués entre temps. Il existe donc plusieurs commandes qui permettent de lister avec plus ou moins de renseignements les chaı̂nes et règles mises en place. L’option -L Deux utilisations. Dans le premier cas, vous spécifiez que vous voulez uniquement voir la chaı̂ne passée en paramètre. $>iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination REJECT icmp -- localhost.localdomain anywhere reject-with icmp-port-unreac Cela permet de travailler avec une visibilité accrue sur la chaı̂ne que vous paramétrez. Explication de l’affichage : – Chain : chaı̂ne – INPUT : Nom de la chaı̂ne – (policy ACCEPT) : Si aucune règle ne correspond au paquet, il sera accepté. – target : Ce que l’on fait du paquet (accept, drop ou reject) – prot : Protocole visé – opt : options – source : Endroit d’ou proviennent les paquets – destination : Endroit ou vont les paquets La derniere ligne présente correspond a une règle que l’on a ajoutée, ici elle signifie : rejeter tous les paquets icmp en provenance de localhost. Plus spécifiquement, le correspondant envoie un paquet ICMP type 8 (echo request) et votre ordinateur renvoie normalement un paquet ICMP type 0 (echo reply). Avec la chaı̂ne présente, le correspondant reçoit un message comme quoi son correspondant n’est pas joignable (C’est qui ? C’est le plombier). L’argument -L sans aucun autre parametre permet d’afficher toutes les chaı̂nes présentes, même si elles ne contiennent aucune règle. $>iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT icmp -- localhost.localdomain anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination 6 reject-with icmp-port-unreac Chain OUTPUT (policy ACCEPT) target prot opt source destination La sous-option de verbosité Encore appelée -v (ou –verbose). Cette forme vous donnera des informations supplémentaires sur l’interface concernée (eth0, eth1, ppp0, etc...), le nombre de paquets ainsi que le nombre de bits transférés. $>iptables -L -v Chain INPUT (policy ACCEPT 21 packets, 4085 bytes) pkts bytes target prot opt in out source destination 20 1960 REJECT icmp -- any any localhost.localdomain anywhere Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 38 packets, 3283 bytes) pkts bytes target prot opt in out source destination re La sous-option numérique Un certain nombre de paramètres sont par défaut écrits de manière compréhensible pour l’homme, à savoir ”localhost.localdomain” représente en fait votre machine. L’ip définie par convention est 127.0.0.1. L’option -n permet donc en un sens plus de rigueur dans sa lecture. $>iptables -L -v -n Chain INPUT (policy ACCEPT 31 packets, 4834 bytes) pkts bytes target prot opt in out source 20 1960 REJECT icmp -- * * 127.0.0.1 destination 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 50 packets, 4017 bytes) pkts bytes target prot opt in out source destination 4 La remise à zéro des compteurs Comme nous avons pu le voir dans les exemples précédents, vous avez la possibilité de relever le nombre de paquets et d’octets (bytes) que cela représente. Cela peut par exemple etre utile dans le cadre de la métrologie. $>iptables -L -v -n Chain INPUT (policy ACCEPT 25 packets, 4067 bytes) pkts bytes target prot opt in out source 30 2520 DROP icmp -- * * 127.0.0.1 7 destination 0.0.0.0/0 reje Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes) pkts bytes target prot opt in out source destination Ici, vous voyez que certaines chaı̂nes ont vu leurs compteurs incrémentés. Nous allons donc remettre tout cela à zéro. L’option que nous utiliserons sera Z (pour zero). Vous pouvez aussi utilser –zero. Cette option combinée à l’option de listing vous permettra de récupérer la valeur des compteurs avant qu’ils soient remis à zéro. $>iptables -L -v -n -Z Chain INPUT (policy ACCEPT 25 packets, 4067 bytes) pkts bytes target prot opt in out source 30 2520 DROP icmp -- * * 127.0.0.1 destination 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes) pkts bytes target prot opt in out source Zeroing chain ‘INPUT’ Zeroing chain ‘FORWARD’ Zeroing chain ‘OUTPUT’ destination Contrôlons que tout soit bien remis à zéro : $>iptables -L -v -n Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out 0 0 DROP icmp -- * * source 127.0.0.1 destination 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Les compteurs sont bien à leur état initial, l’opération s’est bien déroulée. 5 Les polices de sécurité des chaı̂nes Comme nous l’avons évoqué au début de ce cours, les chaı̂nes principales possèdent des politiques globales. Pour agir dessus, il faut utiliser l’option -P comme dans l’exemple ci-dessous : $>iptables -P INPUT DROP 8 Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Ainsi, vous pouvez employer la cible ACCEPT ou DROP ou encore une chaı̂ne que vous avez créée. Il est à noter qu’une politique de sécurité stricte instaure la mise de DROP sur les chaı̂nes principales, ce qui oblige ainsi tous les paquets a être traités par des règles ou à être refusés. Cependant, ne faites cela que si vous comprenez ce que vous faites, dans le cas inverse, vous n’aurez plus accès au réseau... 6 Les règles Nous avons traité ce qui concernait les chaı̂nes, il nous faut maintenant nous concentrer sur leur contenu, à savoir les règles. Si l’on devait prendre une métaphore, on pourrait considérer que les chaı̂nes sont les océans et que les règles sont des fleuves. Chaque fleuve reliant un océan. 6.1 Créer une règle Avant toute chose, vous devez savoir dans quelle chaı̂ne vous allez placer votre règle. Celle-ci concerne t’elle une entrée (INPUT), une sortie (OUTPUT) ou transmission (FORWARD) d’un paquet. Vous pouvez également l’assigner à une sous chaı̂ne que vous aurez créée au préalable. Syntaxe : iptables -A cha^ ıne arguments exemple : $>iptables -A INPUT -s 127.0.0.1 -j DROP on demande )à iptables d’ajouter dans la chaı̂ne INPUT les arguments suivants : -s 127.0.0.1 -j DROP Dont la source est 127.0.0.1 Refuser On refuse tout ce qui provient de l’hôte local en entrée. Afin d’élargir notre champ de couverture, nous traiterons ici d’un certains nombre d’arguments que l’on peut passer à notre règle en ajoût. Gardez en tête que nous ne traitons ici que les paramètres ! N’oubliez donc pas comment se constitue une règle. Presque tout argument peut avoir son contraire. Il suffit pour cela de le faire suivre d’un point d’exclamation ’ !’ $>iptables -A INPUT -s ! 127.0.0.1 -s, --source, --src -d, --destination, --dst Définit la provenance du paquet Définit la destination du paquet 9 Pour ces définitions, vous pouvez viser une adresse unique, comme tout un réseau, pour cela, il suffit d’utiliser le masque de sous réseau. ’192.168.21.0/24’ est équivalent à ’192.168.21.0/255.255.255.0’. Pour spécifier une adresse unique, vous utiliserez ’/32’ et pour au contraire couvrir l’ensemble des adresses, ’0/0’ (toutes les IP existantes). Vous avez également la possibilité de noter les dns (eof.eu.org, localhost), cependant, cela reste déconseillé. Si je décide de bloquer eof sur mon réseau, je bloquerai également le serveur qui héberge les autres sites que eof. Ceci est par conséquent très embêtant. -p, --protocol Définit le(s) protocole(s) choisi(s) Les protocoles que vous pouvez employer sont spécifiés dans /etc/protocols. Toutefois, la plupart du temps, vous vous réferrerez à ’tcp’, ’udp’ ou ’icmp’. Vous pouvez utiliser ’all’ qui regroupe l’ensemble des protocoles. Lorsque l’option n’est pas spécifiée, ’all’ est sélectionné par défaut. La casse employée pour la spécification du protocole n’a pas d’importance. $>iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP Vous restez insatisfait ? Vous désirez pouvoir filtrer vos paquets par drapeau (flag) sur tcp, sur le port source ou destination ? Pas de problème. 6.2 Jouer avec les drapeaux TCP L’option –tcp-flags autorise le filtre sur des drapeau tcp spécifiques. La première liste de drapeau est composée du masque de ceux que vous voulez examiner, la deuxième comporte tous ceux qui doivent voir leurs bits mis à un. $>iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP $>iptables -L -vn Chain pkts 5217 156 0 INPUT (policy ACCEPT 8058 bytes target prot opt 2287K all -10856 all -0 DROP tcp -- packets, 3277K bytes) in out source eth0 * 0.0.0.0/0 lo * 0.0.0.0/0 * * 0.0.0.0/0 destination 0.0.0.0/0 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x12 Ici, si l’on veut tous les drapeaux, à savoir : SYN, ACK, FIN, RST, URG, PSH il faut que les bits de SYN et ACK soient positionnés. Il existe encore deux autres drapeaux présents pour vous faciliter la tâche : ALL et NONE. ALL regroupe l’ensemble des drapeaux et NONE bien évidemment aucun. L’option –syn en corrélation avec l’option précédente. C’est un raccourci pour –tcp-flags SYN,RST,ACK SYN Les options –sport (ou –source-port) et –dport (ou –destination-port) distinguent le port source ou le port destination. Vous pouvez utiliser les noms des ports que vous souhaitez (www, ftp, ...) comme dans /etc/services ou directement les numéros de ceux-ci. Pour décrire une plage, séparez le port de début du port de fin par deux points ’ :’. $>iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20:2000 10 Si vous désirez insérer la notion de ”tous les ports supérieurs ou égaux à” ou bien ”tous les ports inférieurs ou égaux à”, laissez le champ vide avant ou apres les deux points, selon ce que vous désirez faire. $>iptables -A INPUT $>iptables -L Chain INPUT (policy target prot opt ACCEPT tcp -ACCEPT tcp -- -j ACCEPT -s 127.0.0.1 -p tcp --sport 20: ACCEPT) source destination localhost.localdomain anywhere localhost.localdomain anywhere tcp tcp spts:ftp-data:2000 spts:ftp-data:65535 L’option –tcp-option vous permet de traiter les datagrammes en fonction des options passées a tcp, pour en savoir plus sur celles-ci, reportez-vous à : 6.3 Les options pour UDP Les options disponibles pour le protocole UDP sont –sport (ou –source-port) et –dport (ou –destination-port). L’usage reste le même que celui vu pour TCP. 6.4 Les options pour ICMP L’option –icmp-type vous autorise le filtrage des paquets icmp selon leurs types. Vous retrouverez la liste des types à l’adresse suivante : Vous pouvez au choix nommer les types de manière numérique, le premier nombre représentant le type, le deuxième représentant le code, le tout étant séparé par un slash (/) $>iptables -A INPUT -p icmp --icmp-type 3/3 Chain INPUT (policy ACCEPT) target prot opt source icmp -- anywhere destination anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination icmp La seconde manière vous invite à utiliser les types icmp par nom. Je vous dresse ici la liste existante $>iptables -p icmp --help echo-reply (pong) destination-unreachable network-unreachable host-unreachable protocol-unreachable port-unreachable fragmentation-needed 11 port-unreachable source-route-failed network-unknown host-unknown network-prohibited host-prohibited TOS-network-unreachable TOS-host-unreachable communication-prohibited host-precedence-violation precedence-cutoff source-quench redirect network-redirect host-redirect TOS-network-redirect TOS-host-redirect echo-request (ping) router-advertisement router-solicitation time-exceeded (ttl-exceeded) ttl-zero-during-transit ttl-zero-during-reassembly parameter-problem ip-header-bad required-option-missing timestamp-request timestamp-reply address-mask-request address-mask-reply 6.5 La correspondance Il nous reste encore un sous chapitre à voir, il s’agit des extensions ”match”. En français, nous pourrions traduire par extensions de comparaison. L’option -m (ou –match) La différence avec les autres extensions réside dans le fait que celles-ci, si elles ne sont pas spécifiées, ne seront jamais chargées par défaut par votre filtre. La raison en est simple, la plupart de ces extensions sont spécifiques à des protocoles, ou juste présentes à titre de test/expérimentation ou encore pour vous montrer de quoi est capable iptables. Nous ne couvrirons donc que quelques options. L’option –mac-source Filtre les paquets selon leur adresse source. l’adresse mac sera évidemment donnée sous la forme XX :XX :XX :XX :XX :XX iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 12 Chain INPUT (policy target prot opt icmp -all -- ACCEPT) source anywhere anywhere destination anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination icmp MAC L’option –limit Cette option permet d’instaurer des limites, des taux, comme, par exemple, limiter le nombre de messages d’historique. Cette option est suivie d’un nombre ; vous pouvez aussi faire suivre ce nombre de l’unité temporelle désirée (/second ;/minute ;/hour ;/day). Par défaut, la limite est réglée à trois par heure. 6.6 Les cibles L’option -j (ou –jump) spécifie ce que vous désirez faire du paquet. La cible peut être une sous-chaı̂ne que vous aurez vous-même créée ou alors vers une valeur spéciale. Celle-ci peut prendre la forme de ACCEPT, DROP, QUEUE ou RETURN. – ACCEPT autorise le paquet à continuer son chemin. – DROP n’autorise pas le paquet à continuer son chemin. – QUEUE permet de passer le paquet a une application. Si jamais aucune application n’attend après le paquet, il est rejeté. – RETURN se comporte différemment selon son emplacement. S’il est dans une chaı̂ne que vous avez construite, le paquet est renvoyé à la chaı̂ne forgée d’où il vient. S’il se trouve déja dans une chaı̂ne forgée, c’est la police de cette même chaı̂ne qui décide du sort du paquet. 6.7 Les interfaces Les options -i (ou –in-interface) et -o (ou –out-interface) sont les spécifications des interfaces sur lesquelles les paquets arrivent ou partent. Si vous avez bien compris, cela signifie que toute règle comportant -o dans la chaı̂ne INPUT ne se verra pas beaucoup récompensée, il en va de même si vous insérez une règle avec -i dans la chaı̂ne OUTPUT. $>iptables -A INPUT -i eth0 $>iptables -A INPUT -i lo Si vous demandez à présent un listing simple de vos chaı̂nes, vous ne verrez aucune différence, pensez donc à demander un listing détaillé. $>iptables -L -vn Chain INPUT (policy ACCEPT 3045 packets, 1182K bytes) 13 port-unreachable 00:00:00:00:00:01 pkts bytes target destination 346 14 202K 1040 prot opt in out source all all * * 0.0.0.0/0 0.0.0.0/0 --- eth0 lo Chain OUTPUT (policy ACCEPT 1867 packets, 241K bytes) pkts bytes target prot opt in out source 0.0.0.0/0 0.0.0.0/0 destination Pour spécifier plusieurs interfaces du même type (eth0, eth1, eth2, etc... par exemple) vous pouvez utiliser le caractere +. $>iptables -A INPUT -i eth+ Toutes les interfaces commencant par eth seront alors concernées. Par défaut, si l’option n’est pas spécifiée, le ’+’ est mis d’office, sélectionnant toutes les interfaces. 6.8 La fragmentation Depuis le début, je ne vous parle que de paquets, mais qu’en est-il des fragments de paquets, ces petits bouts de puzzle qui au final constituent un splendide paquet ? Vous n’êtes pas sans savoir que des paquets trop conséquents n’ont aucune chance de traverser différents réseaux, les tailles autorisées étant différentes selon chaque routeur. Vous voyez donc votre paquet arriver petit a petit. Seule l’entête contiendra l’ip où il doit se rendre, que ferez vous donc des autres fragments ? Si vous désirez donc traiter le deuxième fragment, le troisieme, etc. utilisez l’option -f, (ou –fragment). 6.9 Enlever une règle Pour enlever ligne par ligne, il vous faut simplement exécuter : iptables -D la chaı̂ne la règle concernée ou encore iptables -D la chaı̂ne le numéro de la règle. Chaque chaı̂ne contenant des règles sont numérotées en partant de un. Il est à noter que dans le premier cas, si vous avez deux règles identiques, seule la premiàre (numériquement parlant) sera otée. Il est intéressant de noter que pour obtenir les numéros des règles dans les chaı̂nes, vous pouvez utiliser l’option –line-number. $>iptables -L --line-number Chain INPUT (policy ACCEPT) num target prot opt source 1 all -- anywhere 2 all -- anywhere 3 all -- anywhere destination anywhere anywhere anywhere Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) 14 num 1 target prot opt source all -- anywhere 7 Conclusion destination anywhere Mieux vaut avoir une souris dans la main qu’un chat dans la gorge. Ceci n’est qu’une petite présentation de l’outil, et il ne faut pas penser que tout est dit ici, loin s’en faut ; mais toutes les bonnes choses ont une fin, et comme le dit le dicton popuplaire, la faim justifie les moyens, ou peut-être est ce une histoire de coupe-fin. Au fait : ‘man iptables‘ ! 15