Le filtrage des paquets est un composant décisif pour la sécurité des systèmes des or­di­na­teurs faisant partie d’un réseau. Le contrôle et la main­te­nance du trafic des données entrantes et sortantes, qui fait souvent partie d’un pare-feu, est conçu pour veiller à ce que seuls les paquets exempts de spams et de malwares soient envoyés ou reçus. Un filtre de paquets, composé des modules du logiciel Netfilter, est intégré par défaut dans le noyau Linux. Toutefois, il est né­ces­saire de disposer d’un programme sup­plé­men­taire pour le con­fi­gu­rer. Pour les noyaux Linux 2.4 et 2.6, vous aurez besoin du programme gratuit iptables, également développé par l’équipe du projet Netfilter.

En tant qu’ad­mi­nis­tra­teur, vous utilisez iptables pour créer, modifier ou supprimer des règles, mais les pa­ra­mètres sont perdus en cas de re­dé­mar­rage du système. Grâce aux fonctions iptables-save et iptables-restore, vous pouvez en­re­gis­trer les règles que vous avez créées. Ceci peut même être en­tiè­re­ment au­to­ma­tisé pendant le reboot grâce au script init. Iptables est limité au protocole IPv4, car il existe des variantes pour les autres pro­to­coles, comme ip6tables pour IPv6 ou ebtables pour les paquets Ethernet, qui font également partie du module du noyau.

Dans le tutoriel Iptables qui suit, nous vous pré­sen­tons les fonc­tion­na­li­tés basiques et les options du logiciel de filtrage de paquets. Nous ex­pli­que­rons ensuite comment con­fi­gu­rer les tables grâce à plusieurs exemples.

Comment fonc­tionne iptables

En général, Iptable pour Linux est déjà pré-installé. Si ce n’est pas le cas, ou si vous voulez vous assurer d’utiliser la dernière version du programme, vous pouvez l’installer ou le mettre à jour grâce au ges­tion­naire de paquets de votre dis­tri­bu­tion. Il suffit de taper la commande suivante dans le terminal:

sudo apt-get install iptables

Il existe dif­fé­rentes in­ter­faces gra­phiques pour iptables, comme notamment Webmin, grâce aux­quelles le contrôle du programme avec la ligne de commande est re­la­ti­ve­ment simple et rapide à apprendre.

Iptables requiert des pri­vi­lèges de système étendus et ne peut donc être utilisé qu’avec un compte root ou des droits d’ad­mi­nis­tra­teur. Les tables chargées avec le programme et générées par le noyau con­tien­nent des chaînes de règles, four­nis­sant des in­for­ma­tions sur la façon dont les paquets de donnés envoyés et reçus doivent être traités. Ces paquets sont propagés de règle en règle au sein de la chaîne, dans laquelle chaque règle peut induire une action (jump target) ou un chan­ge­ment vers une autre chaîne (goto chain).

Les actions qui peuvent arriver lorsqu’une règle s’applique à un paquet sont :

  • ACCEPT : le paquet est accepté.
  • DROP : le paquet est rejeté.
  • QUEUE : le paquet est déplacé dans les processus uti­li­sa­teurs. Ceci nécessite un in­ter­mé­diaire (queue handler), qui transfère le paquet à une ap­pli­ca­tion.
  • RETURN : le paquet est renvoyé à la chaîne pré­cé­dente s’il s’agit d’une chaine per­son­na­li­sée par l’uti­li­sa­teur. Dans les chaînes standard, le règlement (policy) est exécuté (sans con­fi­gu­ra­tion par défaut : ACCEPT).

Les chaînes standard men­tion­nées dans l’action RETURN sont spé­ci­fiées dans les tables filter  iptables. Il s’agit des trois chaînes INPUT, FORWARD et OUTPUT. Input est en charge de livrer les paquets au système, tandis que FORWARD traite les paquets arrivants en attente d’être transmis. La chaîne OUTPUT, au contraire, contrôle le trafic de données généré par votre or­di­na­teur. Outre les tables filter, il existe une table NAT pour la trans­crip­tion des adresses réseau, et une table MANGLE pour la ma­ni­pu­la­tion des paquets. La page Man d’Unix, ac­ces­sible à tout moment grâce à la commande, fournit un aperçu détaillé des fonc­tion­na­li­tés du logiciel de filtrage.

man iptables

Autrement, il existe de nombreux conseils pour Iptables sur netfilter.org, dis­po­nibles en plusieurs langues.

Comment créer et gérer vos propres règles de filtres

Le tableau ci-dessous réunit les dif­fé­rentes commandes per­met­tant de créer et de gérer les chaînes. Pour réguler le trafic des données, vous pouvez soit créer votre propre chaîne, soit vous servir des trois chaînes standard INPUT, OUTPUT et FORWARD. Voici les options de con­fi­gu­ra­tion les plus im­por­tantes:

Commande iptables Exemple Ex­pli­ca­tion
-N "nom de la chaîne" sudo iptables -N test Crée une nouvelle chaîne appelée "test".
-X "nom de la chaîne" sudo iptables -X test Supprime la chaîne vide "test" ; ne fonc­tionne pas avec les chaînes standard INPUT, OUTPUT et FORWARD.
-L "nom de la chaîne " sudo iptables -L test Liste les règles de la chaîne "test".
-F "nom de la chaîne " sudo iptables -F test Supprime les règles de la chaîne "test".
-P "nom de la chaîne " "Action" sudo iptables -P INPUT ACCEPT Définit le règlement de la chaîne. Dans l’exemple, le paquet est au­to­ma­ti­que­ment accepté si les règles de filtre de la chaîne INPUT ne sont pas ac­ces­sibles.
-A "nom de la chaîne " "Règle" sudo iptables -A test -s 127.0.0.1 -j DROP Attache une nouvelle règle à la chaîne sé­lec­tion­née. Dans l’exemple, on ajoute à la chaîne "test" une règle pour rejeter les paquets de données provenant de l’adresse IP 127.0.0.1.
-D "nom de la chaîne " "Règle" sudo iptables -D test -s 127.0.0.1 -j DROP Supprime une règle spé­ci­fique à la chaîne sé­lec­tion­née.
-I "nom de la chaîne " "Position" "Regel" sudo iptables -I test 1 -s 127.0.0.1 -j DROP Ajoute une nouvelle règle à une position définie dans la chaîne sé­lec­tion­née (position 1 dans l’exemple).
-D "nom de la chaîne " "Position" sudo iptables -D test 1 Supprime une règle occupant une position pré­dé­fi­nie dans la chaîne sé­lec­tion­née (position 1 dans l’exemple).

Comment iptables contribue à la pro­tec­tion du système

Voici une pré­sen­ta­tion des pos­si­bi­li­tés d’iptables par exemple pour l’ins­tal­la­tion d’un pare-feu ru­di­men­taire. Puisque les trois chaînes standard INPUT, OUTPUT et FORWARD ont des règles pré­dé­fi­nies en fonction de la dis­tri­bu­tion, la première étape est de les supprimer:

sudo iptables -F

Ensuite, il faut ajouter le règlement DROP à chacune des trois chaînes, afin de s’assurer que les paquets de données soient de toute façon rejetés, dans la mesure où aucune des règles de filtres ins­tal­lées ne conduit à un résultat positif :

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

Ensuite, supprimez le localhost (lo) de votre système, pour le trafic entrant (-i) ou sortant (-o) (ACCEPT), en aug­men­tant à la fois les chaînes INPUT et OUTPUT de la règle ap­pro­priée (-A) :

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Précisez ensuite l’au­to­ri­sa­tion des con­nec­tions sortantes HTTP et HTTPS (port 80 et port 443) pour les ports TCP clas­siques 1024 à 65535 :

sudo iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -j ACCEPT

Dans un dernier temps, autorisez tous les paquets de données entrants ou sortants ap­par­te­nant à une connexion existante (--state ES­TA­BLI­SHED) ou s’y référant (--state RELATED) :

sudo iptables -A INPUT -i eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT

Dans la mesure où les règles créées avec iptables ne sont pas durables et ne valent que jusqu’à ce que votre or­di­na­teur ne s’éteigne, il est re­com­mandé d’utiliser iptables-save pour sau­ve­gar­der vos pa­ra­mètres sous forme de document .rules dans les fichiers d’iptables. La commande adaptée, par exemple pour un système Ubuntu, est la suivante :

sudo iptables-save > /etc/iptables/iptables.rules

En entrant la commande

sudo iptables-restore < /etc/iptables/iptables.rules

chargez ma­nuel­le­ment le fichier à chaque fois que vous re­dé­mar­rez votre système. Une al­ter­na­tive consiste à créer un script cor­res­pon­dant pour que l’ap­pli­ca­tion de filtrage de paquets fonc­tionne au­to­ma­ti­que­ment. Pour plus d’in­for­ma­tions sur le logiciel de filtrage, nous vous con­seil­lons le tutoriel iptables dis­po­nible gra­tui­te­ment dans la bi­blio­thèque Wikibooks.

Aller au menu principal