Firewall avec Iptables

Iptables est un firewall très fiable remplaçant ipchains (avec le noyau 2.2) tournant sous Linux. Iptables permet de faire du firewalling stateful (à états), de la translation de port et d’adresse, du filtrage au niveau 3 et 4 du modèle OSI.

Iptables est l’interface d’administration et de configuration de Netfilter qui est le module intégré à Linux.

Iptables est donc intégré à Linux et sans doute il est déjà installé sur votre machine (noyau >= 2.4). Pour voir quelle version du noyau vous avez, faites un ‘uname -a’.

Avant tout,rappelons qu’un firewall est un dispositif de sécurité réseau qui se place en général au niveau des couches 3 et 4 du modèle OSI et il ne voit que ces couches, rien au dessus. Il est donc capable de savoir quel type de données il filtre (pages web, mails, streaming) en se basant sur les informations contenues dans les en-têtes de paquets IP.
Un firewall ne filtre donc pas les contenus réels des messages échangés, il ne fait donc pas la différence entre un mail contenant un virus et un mail normal, c’est le rôle d’un antivirus…

Tout d’abord, voici un peu de vocabulaire :

– Une règle est la brique de base permettant de fabriquer son firewall, en gros ce elle qui contient les descriptions et les actions… Le paquet est identifié (description) et il est analysé (actions) pour savoir si il peut continuer ou pas. Vous me suivez ?

– Une chaîne est une série de règles.
exemple de chaîne : INPUT : elle contient toutes les règles en entrée (up), c’est à dire tout ce qu’on m’envoie.

– Une table est un ensemble de chaînes
Il y a 3 tables principales :
-filter (contient les chaînes et règles de filtrage)
-nat (chaînes et règles NAT*)
-mangle (modifications arbitraires sur les paquets de tous les types)

*NAT : paquets qui veulent traverser une machine sans s’y arrêter (la machine filtrante n’est ni source ni destination)
Chaque règle que l’on créera contiendra une action :

Chaque règle contiendra une action :
– ACCEPT : le paquet filtré sera accepté
– REJECT : le paquet filtré sera rejeté, c’est à dire que la machine émettrice recevra de nous un paquet signifiant “port fermé”
– DROP : le paquet sera filtré “silencieusement”, la machine émettrice ne sait pas qu’il a été filtré par nous.

Voici les options principales de notre commande iptables :

-A chaîne : pour ajouter une règle en fin de chaîne
-I chaîne : pour insérer une règle en début de chaîne
-D n°chaîne : pour supprimer une chaîne n°
-P chaîne action : permet de donner la politique par défaut
-p : définit le protocole (tcp, udp, icmp…)
-dport : définit le port de destination (service que l’on émet)
-sport : définit le port source (service que l’on reçoit)
-s : @IP source
-d : @IP destination
-i : interface réseau empruntée par le paquet pour entrer sur la machine (seulement pour la chaîne INPUT)
-o : interface réseau de sortie (seulement pour la chaîne OUTPUT)
-m : utiliser le module spécial
-f : vider les règles
-x : vider les chaînes
-L : visualiser vos chaînes

Voici mon script iptables que je rend disponible librement ici, bien sûr, j’attends vos remarques et questions…

Plus de documentation sur ce site.

  • bochecha

    Tres bon article de vulgarisation.

    Attention toutefois a ne pas confondre le firewall (NetFilter) avec son interface de configuration (IPTables) ;)

    http://en.wikipedia.org/wiki/Iptables

  • http://snurf.info Scurz

    Tres bel article. Je tiens a souligner que pour activer le script (donc avoir les regles) au demarrage, il est egalement possible de mettre le script directement dans /etc/network/if-up.d/ (il faut bien sur le rendre executable via un chmod +x).

  • Remy

    >> une règle qui ferme le port 80, vous ne pourrez plus surfer sur mon blog

    Non, c’est ton serveur qui écoute sur le port 80, si je ferme mon port 80, c’est mon serveur http qui ne sera plus accessible.

  • Admin

    Merci pour la faute, je l’ai corrigée de suite…