Gérer ses règles iptables. Proprement.

Base Debian

Je vois régulièrement des administrateurs sauvegarder leurs règles iptables dans un script init. Bien que cela fonctionne, ce n'est pas la manière la plus élégante. Je préfère pour ma part sauvegarder les règles existantes à l'aide de la commande iptables-save. Cette commande renvoie le résultat sur la sortie standard, redirigeons donc la sortie vers un fichier.

# iptables-save > /etc/iptables

Une option intéressante : le -c, qui permet d'afficher combien de fois la règle a été appliquée (en bytes et en paquets).

Pour charger les règles, il suffit d'utiliser la commande iptables-restore en fournissant le fichier de sauvegarde en entrée.

# iptables-restore < /etc/iptables

Ajoutez le -c pour prendre en compte les compteurs (s'ils ont été sauvegardés, of course). Si jamais des règles sont déjà chargées, vous n'avez même pas besoin de flusher, la commande le fait pour vous par défaut (-n pour les garder).

Pour restaurer automatiquement les règles au démarrage, on pourrait créer un petit script init. Je préfère directement lancer le restore avant que l'interface ne soit up. Cela permet d'éviter tout oubli lorsque vous flushez vos règles puis "uppez" vos interfaces. De plus, vous gagnez ainsi la possibilité de créer des règles personnalisées pour chaque interface. Si vos règles sont indépendantes des interfaces, vous pouvez toujours lancer le restore en pre-up de la boucle locale.

/etc/network/interfaces

iface eth0 inet static
        pre-up iptables-restore < /etc/iptables
        address 543.454.233.42
        netmask 255.255.255.0
        gateway 543.454.233.254
auto eth0

Pour ceux qui ont remarqué : oui, j'ai inventé une nouvelle classe d'adresses IP.

Base Red Hat

Le principe est identique, la manière légèrement différente. Pour sauvegarder les règles, vous pouvez passer par le service iptables:

# service iptables save

Les règles sont sauvegardées dans le fichier /etc/sysconfig/iptables par défaut. Le fichier est lu au démarrage du service iptables.

Éviter de s'enfermer dehors (Debian uniquement)

Soyons honnêtes. Qui ne s'est jamais enfermé dehors en modifiant les règles ou une policy du firewall à distance. Je dois avouer l'avoir vécu. L'échec dans toute sa splendeur.

Afin d'éviter cela, il existe pourtant un outil tout simple: iptables-apply. Cette commande va appliquer le fichier de règles fourni en paramètre, puis demander la confirmation de l'utilisateur. Dans le cas où l'utilisateur ne répond pas avant le timeout, iptables-apply fait machine arrière.

# iptables-apply /etc/iptables
[ ok ] Stopping authentication failure monitor: fail2ban.
Applying new ruleset... done.
Can you establish NEW connections to the machine? (y/N) apparently not...
Timeout. Something happened (or did not). Better play it safe...
Reverting to old ruleset... done.

Pratique, n'est-ce pas ?

Si vous connaissez d'autres bonnes pratiques pour gérer les règles iptables, n'hésitez à les partager dans les commentaires.

Vus : 2553
Publié par Jeyg : 33