Firewallmeldungen loggen mit syslog-ng

Dieses Kapitel beschäftigt sich mit dem gezielten loggen von Informationen, die entstehen, sobald Angriffe gedroppt werden. Ist Debian frisch installiert, und die Firewall neu aufgesetzt, tauchen meist unangenehme Fehlermeldungen auf der Konsole auf. Dies liegt daran, daß der Kernel seine Fehlermeldungen standardmäsig unter log-Priorität 7 auf der Konsole ausgibt und iptables-Module nun mal Bestandteil des Kernels sind. Man kann das mit dem Kommando
cat /proc/sys/kernel/printk
prüfen. Gibt man diesen Befehl auf der Konsole ein, so erscheint eine folgende Ausgabe:
7 4 1 7
Die erste Zahl, steht für die Log-Priorität. Will man diese ändern, so kann man dies mit
echo 2 4 1 7 > /proc/sys/kernel/printk
erzielen. Problematisch ist nur, das von Zeit zu Zeit diese Datei wieder überschrieben wird. Um dauerhaft und schon zum Bootzeitpunkt, das Loglevel auf beispielsweise 2 zu setzen, muß man die Datei /etc/init.d/klogd editieren und bei KLOGD= den Eintrag -c 2einfügen. Speichert man die Datei ab und startet /etc/init.d/klogd erneut mit restart, so werden ab sofort nur noch Log-Meldungen mit Priorität unter 2 auf der Konsole ausgegeben. Die iptables-Meldungen jedenfalls, solange man deren Log-Priorität nicht ändert, erscheinen nicht mehr auf der Konsole. Trotzdem noch nicht perfekt, denn die Meldungen erscheinen immer noch unter /var/log/messages, /var/log/syslog und /var/log/kern.log. Leider läst sich das mit dem syslog nicht ohne weiteres kaschieren (siehe auch man syslog.conf). Wir benötigen etwas besseres, um gezielte Firewallmeldungen in einer separaten Datei zu loggen - syslog-ng - ein Tool welches das herkömmliche syslog ersetzt. Mit ihm lassen sich gezielte iptables-Meldungen in andere Dateien umleiten, indem man sogenannte Filter definiert. Nach der Installation mit apt
apt-get install syslog-ng
befindet sich unter /etc ein Verzeichnis syslog-ng mit der entsprechenden ../syslog-ng.conf. Diese editieren wir und fügen zuerst ein neues Ziel (destination) ein - um unsere firewall.log-Datei zu erstellen. Der Eintrag lautet:
# Firewall Script destinations
destination firewall { file("/var/log/firewall.log" owner("root") group(ädm") perm(0640)); };
Danach erzeugen wir unseren entsprechenden Filter, der uns aus den zahlreichen Kernelmeldungen die entsprechenden iptables-loggings herausfiltert:
# Firewall filter
filter firewall { match("DROP"); };
filter no_firewall { not match("DROP"); };
Der zusätzliche Eintrag no_filter wird benötigt, damit wir verhindern können, daß trotz der eigenen firewall.log-Datei die Meldungen noch zusätzlich in der /var/log/messages, /var/log/syslog und /var/log/kern.log erscheinen, denn jetzt folgt die Verknüpfung der Filter mit der Destination.
log { source(src); filter(firewall); destination(firewall); };
Das ist zunächst die Verknüpfung mit unserer firewall.log-Datei. Jetzt sperren wir die Firewall-Logs für die /var/log/messages, /var/log/syslog und /var/log/kern.log, in dem wir folgende Zeilen durch filter(no_firewall); ergänzen:
log { source(src); filter(f_messages); filter(no_firewall); destination(messages); };
log { source(src); filter(f_kern); filter(no_firewall); destination(kern); };
log { source(src); filter(f_syslog); filter(no_firewall); destination(syslog); };
Nach einem Neustart loggt iptables ausschliesslich in unsere firewall.log-Datei.

Sven Alisch 2005-08-28