Chapitre 18. iptables

Avec Red Hat Enterprise Linux sont installés des outils avancés permettant le filtrage de paquets réseau — le processus consistant à contrôler les paquets réseau lorsqu'ils entrent, traversent et sortent de la pile réseau au sein du noyau. Les versions de noyaux antérieurs à 2.4 utilisaient ipchains pour le filtrage de paquets et faisaient appel à des listes de règles appliquées aux paquets à chaque étape du processus de filtrage. Avec l'arrivée du noyau 2.4 est apparu iptables (aussi appelé netfilter), qui est semblable à la commande ipchains mais multiplie les potentialités et le degré de contrôle disponible en matière de filtrage de paquets réseau.

Ce chapitre décrit en détail les principes de base en matière de filtrage de paquets, explique les différences entre ipchains et iptables, présente les différentes options disponibles avec iptables et finalement montre comment maintenir l'intégrité des règles de filtrage entre les démarrages du système.

Pour obtenir des instructions sur la construction de règles iptables ou sur la configuration d'un pare-feu basé sur ces règles, reportez-vous à la Section 18.7.

AvertissementAvertissement
 

Le mécanisme de pare-feu par défaut avec le noyau 2.4 et des noyaux plus récents est iptables, mais iptables ne peut pas être utilisé si ipchains est déjà en cours d'exécution. Si ipchains est présent au démarrage, le noyau émet un message d'erreur et ne réussit pas à démarrer iptables.

Ces messages d'erreur n'affectent pas la fonctionnalité d'ipchains.

18.1. Filtrage de paquets

Dans le noyau Linux est intégrée la capacité de filtrer des paquets, permettant à certains d'entre eux d'être reçus par le système ou de le traverser alors que d'autres sont bloqués. Le netfilter du noyau contient trois tables ou listes de règles intégrées, à savoir :

TuyauAstuce
 

Outre ses tables intégrées, des tables spécifiques peuvent être créées et enregistrées dans le répertoire /lib/modules/<kernel-version>/kernel/net/ipv4/netfilter/<kernel-version> correspond au numéro de version du noyau.

Chacune de ces tables comporte à son tour un groupe de chaînes intégrées qui correspondent aux actions effectuées par netfilter sur le paquet.

Les chaînes pour la table filter sont les suivantes :

Les chaînes pour la table nat sont les suivantes :

Les chaînes intégrées pour la table mangle sont les suivantes :

Chaque paquet réseau reçu ou envoyé par un système Linux est soumis à au moins une règle. Un paquet peut toutefois être soumis à plusieurs règles à l'intérieur de chaque table avant d'arriver à la fin de la chaîne. La structure et le rôle de ces règles peuvent changer, mais elles visent généralement à identifier un paquet en provenance ou à destination d'une adresse IP donnée ou d'un groupe d'adresses, lors de l'utilisation d'un protocole et d'un service réseau particuliers.

NoteRemarque
 

N'utilisez pas de noms de domaines pleinement qualifiés dans les règles de pare-feu qui sont enregistrées dans les fichiers /etc/sysconfig/iptables ou /etc/sysconfig/ip6tables. Dans l'exemple ci-dessous, iptables -A FORWARD -s example.com -i eth0 -j DROP example.com n'est pas valide parce que le service iptables est lancé au démarrage avant tout DNS associé aux services, ce qui entraîne un message d'erreur. Seules des adresses IP sont valides dans la création de règles de pare-feu.

Indépendamment de leur destination, lorsque les paquets correspondent à une règle précise présente dans une des tables, ils se voient assigner une cible ou font l'objet d'une certaine action. Si la règle spécifie une cible de type ACCEPT pour un paquet vérifié, il évite les autres contrôles de règles et peut procéder vers sa destination. En revanche, si une règle spécifie une cible de type DROP, le paquet est abandonné et se voit refuser l'accès au système ; rien n'est envoyé en retour à l'hôte qui a expédié le paquet. Si une règle spécifie une cible de type QUEUE, le paquet est mis en attente dans l'espace-utilisateur (aussi appelé user-space). Finalement, si une règle spécifie une cible de type REJECT en option, le paquet est "abandonné" par rejet et dans ce cas, un "paquet d'erreur" est envoyé en retour à l'expéditeur.

Chaque chaîne dispose d'une politique par défaut pour accepter (ACCEPT), abandonner (DROP), rejeter (REJECT) ou mettre en attente (QUEUE). Si aucune des règles présentes dans la chaîne ne s'applique au paquetage, celui-ci est traité en fonction de la politique par défaut de la chaîne.

La commande iptables permet de configurer ces tables et d'en créer de nouvelles si nécessaire.