Diriger les logs d'IPTables vers un fichier spécifique
Publié le 01 février 2010 - EnBref
Dernière mise à jour le 07 juin 2011
- Article
- |
- Commentaires (3)
- |
- Fichiers attachés (0)
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.

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é.

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 !
-
blackmen972 · 30 juin 2010, 00:15
-
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 !
-
Dedales · 07 février 2011, 00:22
-
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.
-
Matthieu Patout · 10 février 2011, 15:24
-
@Dedales : Salut,
Bien vu, la boulette est corrigée. :-)
Merci !

