Table des matières Page précédente Page suivante

III-5 Chaînes, règles et iptables

III-5-1 Les chaînes utilisateurs

Nous avons vu précédemment qu'il existe 5 principales chaînes, appelées aussi chaînes pré-définies, (PREROUTING, INPUT, FORWARD, OUTPUT et POSTROUTING). Ce sont les fameux signes "STOP" de nos illustrations. Et nous avons aussi vu que ces chaînes sont constituées d'un certain nombre de règles, qui forment une "check list" que Netfilter parcourra afin de décider quoi faire des paquets.

Ce que nous n'avons pas vu par contre, c'est qu'il est possible à l'utilisateur, au root pour être précis, de créer ses propres chaînes. Ce sont les chaînes utilisateurs. Pourquoi diable faire cela ? Nous ne sommes pas tous des programmeurs avides de milliers de ligne de code ?!?! Ne vous inquiétez pas, il ne s'agit pas là de programmer quoi que ce soit. Mais simplement de rajouter votre propre "check list" lors de l'un ou l'autre des "contrôles de gendarmerie". Ouf, vous avez eu chaud, pas vrai ? Smiley

Sur le dessin ci-dessous, on voit quelques chaînes utilisateurs qui sont crées pour la table "Filter". Comme vous le voyez, les chaînes utilisateurs peuvent :
  • Êtres utilisées par une chaîne en particulier : perso_2
  • Êtres appelées par plusieurs chaînes : perso_1
  • Ne pas êtres appelées du tout (perso_3). A quoi cela sert il alors ? A rien tout simplement : le root qui a écrit ces chaînes là à oublié pourquoi il les as créées, et il a du s'endormir sur son clavier avant de faire le ménage... Smiley
Chaînes utilisateur
Chaînes utilisateur : Des agents de sécurité privés

III-5-2 Règles et cibles

Les règles, comme leur nom l'indique, sont une série de critères auquel doivent ou non répondre les paquets. En fait, on peut associer une règle à un "délit de sale gueule". Si le paquet réseau ressemble à l'un ou l'autre des critères, alors la règle est appliquée. Les différentes règles d'une chaînes sont appliquées les unes à la suite des autres.

Les critères peuvent être multiples :
  • Interface source ou destination.
  • Adresse IP source ou de destination.
  • Port source ou de destination.
  • Type de trame.
  • Nombre de paquets.
  • Paquet marqué par la table Mangle.
  • Etc.
Il peut y avoir autant de règles que l'on veut dans une chaîne, mais il est intéressant de limiter au maximum leur nombre, afin d'avoir une vue claire et précise de notre système de filtrage.

Enfin, à chaque règle est associée une action (ou "CIBLE" dans la nomenclature de Netfilter) à effectuer si la règle doit s'appliquer. C'est là que Netfilter agit, qu'il fait (enfin) quelque chose avec le paquet réseau. Les principales actions sont :
  • DROP : Le paquet est détruit purement et simplement. C'est typique du "délit de sale gueule"... Smiley
  • ACCEPT : Le paquet a une "bonne tête", il est donc autorisé à continuer à passer. Mais une autre règle située après la règle qui a accepté ce paquet peut très bien finalement décider de le supprimer.
  • LOG / ULOG : Le paquet est autorisé à continuer de passer, mais ses caractéristiques sont notées au passage. En général, c'est qu'on estime que le paquet est "louche", et que l'on veut en prendre note. Mais plus souvent encore, on décidera de le supprimer. Car, en informatique, tout ce qui est louche est anormal, et tout ce qui est anormal doit être supprimé ! Smiley
  • MASQUERADE : Le paquet va être modifié, afin de dissimuler (de masquer en fait) certaines informations concernant son origine. Cette technique sera utilisée un peu plus loin.
  • MARK : le paquet est marqué en y attachant une information. Ceci est principalement utilisé avec les tables "Mangle", donc nous n'y reviendrons pas dessus.
  • Une chaîne utilisateur : Nous avons vu un peu plus haut qu'il existe des chaînes utilisateurs. Dans le cas de cette action, le paquet est envoyé à une chaîne définie par l'utilisateur, où il passera à travers de nouvelles règles. Ceci est illustré par les flèches rouges dans ce schéma ci. Si aucune décision n'est prise à la fin de la chaîne utilisateur, le paquet revient dans la chaîne courante, et passe à la règle suivante. C'est ce qu'indiquent les flèches bleues de ce même schéma.

III-5-3 Iptables

Iptables est donc une commande que seul le root peut lancer. Son but est de dialoguer avec Netfilter, afin de contrôler les règles des chaînes, dans le but de configurer les tables.

Iptables est la boîte à tout faire de Netfilter. Cette commande va pouvoir :
  • Rajouter des règles / chaînes.
  • Supprimer des règles / chaînes.
  • Modifier des règles / chaînes.
  • Afficher les règles / chaînes
Comme toute commande Linux qui se respecte, "iptables" est un programme qui se lance en ligne de commande, et qui attend de nombreux paramètres. Les lister tous n'est pas forcément très intéressant (et puis la commande "man iptables" doit bien servir à quelque chose, non ?), aussi ne verrons nous que les options les plus intéressantes.
OptionParamètreParamètre
optionnel ?
ExplicationExemple
-t
(table)
"filter", "nat", "mangle"OuiIndique sur quelle table nous voulons travailler. Si aucun paramètre n'est fourni, c'est la table filter qui est sélectionnée par défaut.
Par la suite, si aucun paramètre "-t" n'est utilisé dans une commande "iptables", c'est que cette commande est destinée à la table filter.
"iptables -t nat ..." permet de travailler sur ta table "NAT".
-F
(Flush)
"filter", "nat", "mangle"OuiSupprime toutes les règles d'une chaîne prédéfinie (tel "PREROUTING", "INPUT", "FORWARD", "OUTPUT" et "POSTROUTING"). Si aucun paramètre n'est donné, toutes les chaînes prédéfinies sont supprimés."iptables -F" supprime toutes les chaînes prédéfinies de la table "filter".
-X
(eXclude)
[Chaîne utilisateur]OuiSupprime une chaîne utilisateur. Si il n'y a aucun paramètre, toutes les chaînes utilisateurs sont supprimées."iptables -X perso_3" supprime la chaîne utilisateur "perso_3".
-P
(Policy)
"filter", "nat", "mangle"NonDéfinie la politique (ou cible) par défaut d'une chaîne. Seules les chaînes prédéfinies peuvent avoir un comportement par défaut. Cette cible ne sera appliquée qu'après l'exécution de la dernière règle de la chaîne."iptables -P INPUT DROP" supprime par défaut tout les trames dans la chaîne "INPUT". Si aucune règle plus "souple" n'est définie, aucun paquet réseau n'arrivera aux processus utilisateurs de notre machine. C'est efficace comme technique, mais peu fonctionnel.
-N
(New)
[Chaîne utilisateur]NonCette option crée une nouvelle chaîne utilisateur. Par la suite, des règles doivent êtres créées, afin de remplir cette chaîne. Sinon, elle ne sera pas très utile !"iptables -N LogAndDrop" crée une chaîne utilisateur dont le nom laisse supposer que l'on va logger les paquets, puis les supprimer.
-A
(Append)
[Chaîne]NonAjoute une règle à une chaîne prédéfinie ou utilisateur. Nous allons utiliser majoritairement cette commande."iptables -A INPUT ..." ajoute une règle à la table des paquets entrant dans l'espace des programmes.
-D
(Delete)
[Chaîne] [Numéro de règle]NonSupprime une règle dans une chaîne particulière. Le numéro de la règle peut être retrouvé avec la commande "iptables -L" ou "iptables -L -n""iptables -D OUTPUT 1 -t mangle" supprime la 1ère règle de la chaîne "OUTPUT" de la table "Mangle".
-L
(Liste)
[Chaîne]OuiAffiche la liste des règles pour la chaîne indiquée. Ou, si aucune chaîne n'est indiquée, cela affichera les règles pour toutes les chaînes de la table indiquée. Note : Rajouter à "-L" les options "-n" et "-v" est très utile."iptables -L -n -v" affiche le maximum d'informations sur les règles de la table "filter".
-j
(jump)
[Cible]NonDéfini l'action à prendre si un paquet répond aux critères de cette règle. Les principales valeurs sont : ACCEPT, DROP, REJECT, LOG"iptables -A OUPUT -j DROP" supprime tous les paquets sortant des processus locaux. Ca, c'est de la censure !!
-i
(input)
[Interface réseau]NonCritère sur l'interface réseau dont provient le paquet"iptables -A INPUT -i eth0 ..." filtre les paquets arrivant aux programmes et venant de l'interface réseau eth0.
-o
(output)
[Interface réseau]NonCritère sur l'interface réseau d'où les paquets vont sortir"iptables -A OUTPUT -o ppp0" filtre les paquets créés par les programmes et sortant sur Internet.
-s
(source)
[!] [Adresse IP ou réseau]NonCritère sur l'adresse IP source du paquet"iptables -t nat -A PREROUTING -i 192.168.0.0/24 ..." travaille sur le routage des paquets du réseau interne sky.net.
-d
(destination)
[!] [Adresse IP ou réseau]NonCritère sur l'adresse IP de destination du paquet"iptables -A OUTPUT -d 192.168.0.0/24 ..." filtre les paquets sortant de l'espace utilisateur, à destination du réseau sky.net.
-p
(protocole)
[!] "all", "tcp", "udp", "icmp", ou un numéroNonCritère sur le type de trames utilisé dans le paquet. D'autres numéros de protocoles peuvent être utilisés. Voir votre fichier "/etc/procoles""iptables -A INPUT -p udp ..." filtre uniquement les paquets de type UDP.
--sport[!] [Port ou service]NonCritère sur le port source des paquets IP"iptables -A INPUT -sport 80 ... " filtre tout ce qui vient du port HTTP (80).
--dport[!] [Port ou service]NonCritère sur le port de destination des paquets IP"iptables -O OUPUT -dport ! 21 ... " filtre tout ce qui n'est pas à destination du FTP (21).
-m
(module)
[Nom d'un module]NonDemande d'utiliser un module particulier"iptables ... -m state ..." utilise le module de suivi de connexion ("state" veut dire "statut" en français).
--state[!] "NEW", "ESTABLISHED", "RELATED", "INVALID"NonCette option ne s'utilise que cumulée avec l'option "-m state", afin d'être utilisé pour le suivi de connexion"iptables ... --state NEW,ESTABLISHED ..." filtre les paquets de nouvelles connexions, ou de connexions déjà établies via une "poignée de main".
--log-prefix
--ulog-prefix
[Un mot]NonRajoute un commentaire pour les cibles LOG et ULOG"iptables ... -j LOG --log-prefix toto" rajoutera le mot "toto" au log de cette règle.

Remarque : On trouve parfois dans la colonne "Paramètre" du tableau le paramètre "[!]". Ce paramètre peut se rajouter aux autres paramètres de l'option, afin d'indiquer la négation. Exemples :
  • "iptables -I INPUT -p tcp -sport 80 -j DROP" : Supprime toutes les trames HTTP rentrant dans l'espace utilisateur.
  • "iptables -I INPUT -p tcp -sport ! 80 -j DROP" : Supprime toutes les trames rentrant dans l'espace utilisateur, excepté celles de HTTP.
Dans la suite de ce document, je vous conseille de revenir régulièrement sur ce tableau, afin de bien comprendre le mécanisme des règles que nous allons utiliser. Lorsque ce tableau aura répondu à toutes vos questions, et qu'il ne suffira plus à répondre à votre soif de connaissances, je vous invite à taper un petit "man iptables" !! Smiley Place maintenant à la pratique d'iptables, et lançons nous dans les scripts !


Table des matières Page précédente Page suivante
Valid XHTML 1.0! Valid CSS!
Site de référence : http://olivieraj.free.fr/ Last modified: Sat Jul 19 02:20:14 CEST 2003