NetFilter/IPTables est le couple de base pour mettre en place un pare-feu sous GNU/Linux. Par défaut les enregistrements vont dans le fichier "/var/log/messages", ce qui pose un problème de lisibilité des logs vu le nombre de lignes qui finissent dans ce fichier. On peut utiliser grep pour affiner l'affichage, mais le plus efficace reste de directement envoyer les logs en provenance d'IPTables vers un fichier spécifique.

iptables-firewall-securite-informatique.jpg


Petit rappel

En gros, sous GNU/Linux les logs sont enregistrés avec deux critères, les "facility" et les "priority".

Les "facility" désignent la provenance de l'enregistrement, et les "priority" désignent sa gravité.

syslog-listes.png

Pour de plus amples détails sur les logs sous GNU/Linux, il y a bien sûr les pages de manuel, en particulier celle de syslog : man syslogd.


Avec Syslog

Avec le vieillissant mais encore très présent Syslog, nous allons jouer avec ces deux critères pour diriger les logs d'IPTables dans un fichier spécifique.

Les logs en provenance d'IPTables sont toujours classés dans la "facility" nommée "kern", et il n'est pas possible de modifier simplement ce comportement. Par contre, il est très simple de spécifier la "severity" des logs à utiliser. C'est possible grâce à l'option --log-level d'IPTables, qui attend comme paramètre une "severity".

Prenons comme exemple la règle IPTables suivante :

iptables -A INPUT -i eth0 -d 1.2.3.4 -p tcp -j LOG --log-level warning

Elle permet d'enregistrer tous les paquets en provenance de l'IP 1.2.3.4 sur l'interface eth0.

Maintenant il faut dire à Syslog de diriger les logs de critère "kern" et "warning" vers un fichier particulier, grâce à cette ligne à ajouter dans le fichier ''/etc/syslog.conf" :

kern.=warning -/var/log/iptables.log

On peut également modifier la ligne suivante :

kern.* -/var/log/kern.log

Et la remplacer par celle ci :

kern.*;kern.!=warning -/var/log/kern.log

Elle permet de ne pas enregistrer deux fois les logs d'IPTables, une fois dans "/var/log/kern.log" et une fois dans "/var/log/iptables".

Ne pas oublier de redémarrer Syslog une fois les modifications réalisées.


Avec rSyslog

rSyslog est un projet lancé par Rainer Gerhards en mars 2005. Adopté en novembre 2007 par le projet Fedora puis en février 2009 par Debian, rSyslog est en passe de s'imposer comme le système standard d'enregistrements des logs.

Il apporte son lot d'avantages, et en particulier, pour le sujet qui nous intéresse, la possibilité de filtrer les logs et de les diriger vers un fichier spécifique en fonction du contenu de l'enregistrement.

Il n'est donc plus nécessaire d'envoyer tous les enregistrements "kern.debug" vers le fichier de son choix, au risque de trouver des enregistrements n'ayant rien à voir avec le pare-feu dans le fichier qui lui est pourtant dédié, mais simplement de spécifier dans le script IPTables un préfixe aux enregistrements du pare-feu grâce au paramètre --log-prefix, et de surveiller ce préfixe avec une simple ligne dans la configuration de rSyslog.

Par exemple avec un fichier /etc/rsyslog.d/iptables.conf contenant ceci :

:msg, startswith, "IPTables : " -/var/log/iptables.log
& ~

Et une règle de pare-feu dans ce genre :

iptables  -A INPUT -i eth+ -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "IPTables : "

C'est simple et très efficace. Là encore pensez à redémarrer le daemon rsyslog après avoir effectué les modifications !

Commentaires

1. Le 30 juin 2010, 00:15 par blackmen972

Super !

Tu viens de sauver ma fin de soirée, je vais pouvoir aller me coucher.

J'ai installé iptables sur mon serveur web et j'avais constamment les messages de logs qui s'affichaient sur ma console, même quand je me logguais à distance en ssh, c'était assez embêtant, pour infos pour ceux qui utilisent lenny c'est la manipulation avec rsyslog qu'il faut faire....

Encore merci pour cet article...

Allez au dodo lol

Bonen fin de soirée !

2. Le 7 février 2011, 00:22 par Dedales

Attention : une petite erreur s'est glissée dans l'article : Dans la partie sur rsyslog, le code de iptables.conf recherche la chaîne "IPTable: ", alors que le log d'iptables défini en dessous utilise le préfixe "IPTable : " (avec un espace de plus).

Il faut donc ajouter un espace à la règle de filtrage, ou le supprimer dans les règles d'iptables.

3. Le 10 février 2011, 15:24 par Matthieu Patout

@Dedales : Salut,

Bien vu, la boulette est corrigée. :-)

Merci !

4. Le 2 mai 2013, 20:01 par Endu_

Bonjour,

billet interessant ! Je suis à la recherche - dans syslog-ng - d'une présentation des logs (redirigés /var/log/ipatbles) dans ce qui me semblerait être une page web, jolies avec des couleurs.... :i *
J'essaye aussi de supprimer les "débuts de logs" May 2 19:59:17 ......kernel: [4179... ] qui alourdissent un peu la lecture.
Une idée ?

5. Le 17 mai 2013, 14:20 par Matthieu Patout

@Endu_ Salut, voir peut-être du coté de CCZE : http://blog.pastoutafait.org/billet...