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.
![]() | Avertissement |
---|---|
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. |
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 :
filter — Table par défaut pour le traitement des paquets réseau.
nat — Table utilisée pour modifier les paquets qui créent une nouvelle connexion et utilisée pour la traduction d'adresses réseau (ou NAT de l'anglais Network Address Translation).
mangle — Table utilisée pour la modification de types spécifiques de paquets.
![]() | Astuce |
---|---|
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/ où <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 :
INPUT — Cette chaîne s'applique aux paquets ciblés pour l'hôte.
OUTPUT — Cette chaîne s'applique aux paquets réseau générés localement.
FORWARD — Cette chaîne s'applique aux paquets routés à travers l'hôte.
Les chaînes pour la table nat sont les suivantes :
PREROUTING — Cette chaîne modifie les paquets lorsqu'ils arrivent.
OUTPUT — Cette chaîne modifie des paquets réseau générés localement avant qu'ils ne soient envoyés.
POSTROUTING — Cette chaîne modifie les paquets avant qu'ils ne soient envoyés.
Les chaînes intégrées pour la table mangle sont les suivantes :
INPUT — Cette chaîne modifie des paquets réseau ciblés pour l'hôte.
OUTPUT — Cette chaîne modifie des paquets réseau générés localement avant qu'ils ne soient envoyés.
FORWARD — Cette chaîne modifie des paquets réseau routés à travers l'hôte.
PREROUTING — Cette chaîne modifie les paquets réseau entrants avant qu'ils ne soient routés.
POSTROUTING — Cette chaîne modifie les paquets avant qu'ils ne soient envoyés.
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.
![]() | Remarque |
---|---|
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.
Précédent | Sommaire | Suivant |
Ressources supplémentaires | Niveau supérieur | Différences entre iptables et ipchains |