Accueil > Informatique > Systèmes d’exploitation > GNU/Linux > Configurer Netfilter

Configurer Netfilter

samedi 13 octobre 2007, par Sebastien Le Lourec

Cet article reste une ébauche à compléter et n’a pas pour vocation d’être aussi complet que l’original. Il s’agit davantage de notes personnelles que d’un vrai tutorial. Je conseille très fortement la lecture de l’article d’origine, dans son intégralité.

Dans les lignes suivantes, je n’utiliserai pas -t filter. Il s’agit de la table par défaut, il n’est donc pas utile de préciser.

La commande :
iptables -L -n -v
permet de lister les règles définies. Si vous exécutez cette commande sur une machine nouvellement installée, vous devriez voir ceci :

ip_tables: (C) 2000-2006 Netfilter Core Team
Chain INPUT (policy ACCEPT)
target    prot opt source destination

Chain FORWARD (policy ACCEPT)
target    prot opt source destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source destination

Si ce n’est pas le cas, il est préférable de repartir de zéro pour bien savoir où on en est. Pour cela, utiliser :
- iptables -F pour supprimer les tables prédéfinies ;
- iptables -X pour supprimer les tables utilisateurs.

Vous avez probablement noté que pour chacune des trois chaines de la table filter (input, forward et ouput) la politique est de tout accepter. Pour résoudre ce problème, on va commencer par taper les lignes suivantes :

iptables -t filter -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Créer les exceptions pour localhost (lo).

iptables -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT


La première ligne autorise les sorties de l’adresse de loopback vers elle même et la deuxième autorise les entrées avec les mêmes paramètres.

Vous avez ensuite la possibilité d’autoriser des adresses IP, des ports ou bien encore de filtrer avec ces deux paramètres. Dans mon cas, il est nécessaire d’ouvrir les ports 22 et 80 sur l’interface eth1 et dans les deux sens :

iptables -A OUTPUT -o eth1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT

Votre configuration pouvant être différente, vous devrez peut-être remplacer eth1 par eth0 ou autre chose.

Dans certains cas, il peut-être intéressant de n’autoriser les connexion qu’en réponse de requêtes lancées par des processus locaux. Conntrack offre cette possibilité. Pour activer ce module, taper :
modprobe ip_conntrack
Ensuite, pour paramétrer le firewall par rapport à ce souhait, utiliser :

iptables -A OUTPUT -o eth1 -s 192.168.1.x/24*  -d 0.0.0.0/0 -p all -m state --state ! INVALID -j ACCEPT
iptables -A INPUT  -i eth1 -s 0.0.0.0/0 -d 192.168.1.x/24* -p all -m state --state RELATED,ESTABLISHED -j ACCEPT

* Peut varier en fonction de votre paramétrage réseau.

Il faut savoir que les règles d’iptables ne sont sauvegardées nulle part par défaut. A chaque reboot de la machine, les paramètres sont perdus. Il est inconcevable de devoir refaire le paramètrage du firewall à chaque fois. Pour conserver les règles établies et faire en sorte qu’elles soient chargées à chaque lancement du système, il est nécessaire d’utiliser la commande :
# iptables-save -t filter > /etc/network/iptables-rules
Le choix de l’emplacement est libre, rien ne vous oblige à placer votre sauvegarde dans /etc/network/iptables-rules
L’idéal étant de passer par un script pour préparer ses paramètres dans un premier temps. Puis de les enregistrer avec la commande précédente dans un second temps. Cela permet en outre de commenter les lignes pour une meilleure lisibilité.

Pour charger les paramètres sauvegardés à chaque démarrage de votre interface réseau, ajoutez la ligne suivante :
pre-up iptables-restore < /etc/network/iptables-rules
dans le fichier :
/etc/network/interface
juste après la ligne concernant votre interface réseau, par exemple :
iface eth0 inet static.


Voir en ligne : Firewall et sécurité d’un réseau personnel sous Linux

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.