Netfilter
Un article de Wikipédia, l'encyclopédie libre.
![]() |
|
---|---|
Développeur | L'equipe Netfilter[1] |
Environnement | Linux |
Type | Pare-feu |
Licence | GPL[2] |
Site Web | www.netfilter.org |
Netfilter est le module qui fournit à Linux les fonctions de pare-feu, de partage de connexions internet (NAT) et d'historisation du trafic réseau. Netfilter fonctionne en mode noyau. Il intercepte et manipule les paquets IP avant et après le routage.
iptables est la commande qui permet à un administrateur de configurer Netfilter en mode utilisateur. iptables-restore et iptables-save sont deux commandes associées qui permettent de sauvegarder/restaurer la configuration Netfilter.
Sommaire |
[modifier] Historique et dénomination
Netfilter a été intégré à Linux à partir de la version 2.4. Il est issu de la réécriture d'ipchains qui fonctionnait dans la série des noyaux 2.2. Pour faciliter la transition, les paramètres d'iptables ressemblent à ceux de son prédécesseur.
Le nom iptables est souvent utilisé pour parler de toute l'infrastructure Netfilter mais il n'est que l'outil permettant de le configurer à partir d'un interpréteur de commandes.
[modifier] Fonctionnement général
Netfilter permet à un administrateur de définir comment Linux doit traiter les paquets réseau entrants et sortants. Chaque paquet passe systématiquement par une ou plusieurs tables. À l'intérieur de ces tables, les paquets parcourent des chaînes qui contiennent les règles de traitement.
Chaque règle spécifie des critères de sélection (adresse source, protocole, etc.) et ce qui doit advenir des paquets correspondants (rejet, autorisation, archivage, etc.). Les critères disponibles et les actions possibles ne sont pas toujours les mêmes suivant la chaîne dans laquelle on ajoute la règle. Suivant l'action choisie, le paquet parcourt ou non les règles suivantes de la chaîne. Si aucune règle ne correspond au paquet, c'est la politique par défaut de la chaîne qui décide du sort du paquet.
[modifier] Tables
Netfilter est fourni avec trois tables principales, mais des modules d'extension peuvent en créer de nouvelles. Chaque table contient des chaînes prédéfinies à travers lesquelles les paquets vont passer. L'administrateur peut ajouter et retirer des chaînes personnelles dans n'importe quelle table. Au départ, toutes les chaînes sont vides et leur politique par défaut est d'accepter les paquets.
[modifier] Table filter
Cette table est responsable du filtrage (bloquer ou autoriser le passage d'un paquet). Tous les paquets passent à travers cette table, dans l'une des chaînes suivantes :
- Chaîne INPUT — Tous les paquets destinés à cet ordinateur passent dans cette chaîne.
- Chaîne OUTPUT — Tous les paquets créés par cet ordinateur passent dans cette chaîne.
- Chaîne FORWARD — Tous les paquets traversant cet ordinateur passent dans cette chaîne (dans le cas d'un routeur, par exemple).
[modifier] Table nat
Cette table est responsable de la translation d'adresses et de ports. Seul le premier paquet de chaque connexion passe à travers cette table. Les règles vont alors déterminer comment seront modifiés tous les paquets relatifs à cette connexion.
- Chaîne PREROUTING — Les paquets arrivant de l'exterieur passent dans cette chaîne avant d'être routés. Elle permet de modifier la destination de la connexion pour, par exemple, rediriger une connexion.
- Chaîne POSTROUTING — Les paquets passent dans cette chaîne après la décision de routage, juste avant que le paquet soit expedié. Elle permet la modification de la source de la connexion. On peut ainsi camoufler la véritable origine d'une connexion.
- Chaîne OUTPUT — Elle fonctionne comme la chaîne PREROUTING mais pour les connexions issues d'un processus de l'ordinateur.
[modifier] Table mangle
Cette table est responsable de la transformation des options des paquets, comme la qualité de service. Tous les paquets passent à travers cette table, dans une ou plusieurs des chaînes suivantes :
- Chaîne PREROUTING — Tous les paquets entrant cet ordinateur passent dans cette chaîne, avant le routage.
- Chaîne INPUT — Tous les paquets destinés à cet ordinateur passent dans cette chaîne.
- Chaîne OUTPUT — Tous les paquets créés par cet ordinateur passent dans cette chaîne.
- Chaîne FORWARD — Tous les paquets traversant cet ordinateur passent dans cette chaîne.
- Chaîne POSTROUTING — Tous les paquets quittant cet ordinateur passent dans cette chaîne, après le routage.
[modifier] Qualités
- Étant le pare-feu officiel de Linux, Netfilter est très répandu et bien documenté. Il est facile d'obtenir de l'aide sur les forums.
- Des interfaces graphiques existent pour simplifier sa configuration.
- La translation d'adresse (NAT) est très flexible. On peut faire chaque type de NAT avec des restrictions de source, de destination et de service.
- L'architecture modulaire permet une grande évolution et l'adaptation à des besoins spécifiques[3]
[modifier] Défauts
- Chaque appel à la commande iptables accède à la configuration de Netfilter dans le noyau. Pour créer une grosse configuration, il faut souvent des milliers d'appels à iptables. Chaque appel prenant un verrou sur Netfilter, le fonctionnement de Netfilter peut-être altéré pendant la phase de configuration.
- Comme beaucoup d'autres pare-feux, netfilter permet l'inspection de service (appelé conntrack). Cela permet la translation d'adresses sur des protocoles particuliers comme FTP, H323, SNMP ou TFTP mais c'est une pratique risquée. L'inspection de service étant complexe, tout bug pourrait permettre la prise de contrôle de la machine. Mais cette inspection est facultative, en chargeant ou non les modules conntrack associés.
- Netfilter ne fait pas de règles de NAT statiques pour des plages d'adresses. Pour faire une NAT statique de plage, il faut écrire une règle iptables par adresse. Par contre il peut faire de la translation dynamique de plages d'adresses[4] ou utiliser l'extension NETMAP qui permet la translation statique d'un réseau[3].
- Netfilter ne gère pas certaines technologies comme les proxys, les IDS ou les serveurs d'authentification. Pour faire cela sous Linux il faut utiliser d'autres logiciels qui se configurent à part.
[modifier] Exemples d'utilisation
Vide les chaînes de la table filter (la table par défaut) :
iptables --flush INPUT iptables -F FORWARD iptables -F OUTPUT
Vide la chaîne POSTROUTING de la table nat :
iptables --table nat --flush POSTROUTING
La politique par défaut est d'accepter tous les paquets (généralement un mauvais choix pour la sécurité) :
iptables --policy INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
Autorise paquets sur le port telnet qui viennent du réseau local :
iptables --append INPUT --protocol tcp --dport telnet --source 192.168.13.0/24 --jump ACCEPT
Ignore les autres paquets entrants sur le port telnet :
iptables -A INPUT -p tcp --dport telnet -j DROP
Rejette les paquets entrants sur un port souvent utilisé par les proxies :
iptables -A INPUT -p tcp --dport 3128 -j REJECT --reject-with tcp-reset
Translation d'adresse automatique pour tous les paquets partant par la connexion internet :
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
[modifier] Voir aussi
[modifier] Interfaces graphiques
Ces programmes permettent de configurer Netfilter graphiquement :
[modifier] Les autres pare-feux libres
- Linux Ipchains, pare-feu libre du noyau Linux 2.2.
- Packet Filter ou PF, pare-feu libre de OpenBSD, et maintenant dans les autres BSDs.
- IPFilter ou IPF, pare-feu libre de BSD et Solaris 10.
- Ipfirewall ou IPFW, pare-feu libre de FreeBSD.
[modifier] Article connexe
[modifier] Liens externes
- (en)(fr) Site officiel
- (fr) Howto : Exemples et pratique d'Iptables
- (fr) Léa-Linux : IpTables par l'exemple
- (fr) Labo-Linux : Documentation en français
- (fr) Tutorial
- (fr) La page de Manuel officielle de la commande IPTABLES
- (fr) Netfilter et IPtables
[modifier] Notes
- ↑ The netfilter core team
- ↑ Plus d'informations sur la page officielle
- ↑ 3,0 3,1 Netfilter Extensions HowTo
- ↑ Voir dans le NAT HowTo section 6.3, Mappings Multiples, Dépassements et Clashs
|
|