öffnen Tags

öffnen Kategorien

Vom WebReader vorlesen lassen

Zentraler syslog-ng-Server

14. Dec 2009, 15:08

Wer mehr als zwei oder drei Server unter seiner Kontrolle hat kennt das Problem: Die Wartung der Logs ist nahezu unmöglich!

Abhilfe schafft hier ein zentraler Logserver, auf dem alle Logs gesammelt werden. Ich habe dies mit dem syslog-ng (noch Version 2) realisiert, ist gar nicht so schwierig!

Grundlage sind also drei Rechner, Master auf dem die Logs gesammelt werden, ein Gateway der die Logs über Netzgrenzen hinaus transportiert und ein Client der diese produziert. Auf jedem muss natürlich der syslog-ng installiert ist. Für Debian-Maschinen also:

1
aptitude install syslog-ng


Vorbereitung des Masters

Den Master müssen wir darauf einstellen, dass er gleich mit Log-Meldungen befeuert wird und diese bitte annehmen möchte. Dafür definieren wir in der syslog-ng-Konfiguration eine neue Log-Quelle, ein Ziel-File in das wir die Messages schreiben wollen und eine Log-Regel die dies übernimmt:

1
2
3
4
5
6
7
8
9
10
11
12
source netzwerk {
udp( port(514) );
};

destination netzwerk_dest {
file("/tmp/netzwerk.log");
};

log {
source(netzwerk);
destination (netzwerk_dest);
};

Heißt also, dass der Dienst am Port 514 UDP lauschen (üblicher Syslog-Port) und die dort empfangenen Meldungen nach /tmp/netzwerk.log schreiben soll.
Die Logs lassen sich dabei natürlich beliebig Filtern. Beispielsweise kann man den original Hostnamen beibehalten, indem man im options-Teil

1
keep_hostname(yes);

aufnimmt, und statt nach /tmp/netzwerk.log jetzt nach /tmp/$HOST/netzwerk.log schreibt. Weitere Macros kann man im der Reference finden. Die normalen Filter sind natürlich ebenso anwendbar, also können auch kernel-Logs von auth-Logs getrennt werden.
Bei großen Serverfarmen ist es zudem sinnvoll den sync-Wert in der options-Direktive hoch zu setzen, auf vielleicht 100, damit buffert syslog-ng mehrere Log-Einträge bevor sie auf die Platten geschrieben werden.

Vorbereitung eines Gateways

Es ist natürlich zu vermeiden für jeden Rechner ein Loch in die Firewall zu bohren, daher werden die Logs über ein Gateway geforwardet. Dieses Gateway hat nun also einfach die Aufgabe die bei ihm ankommenden Nachrichten an den zentralen Log-Server weiter zu leiten. Dafür definieren wir einfach eine neue Source und eine Destination und loggen einfach ohne zu filtern:

1
2
3
4
5
6
7
8
9
10
11
12
source netzwerk {
udp( port(514) );
};

destination logserver {
udp("logserver.dns.de" port (514));
};

log {
source(netzwerk);
destination (logserver);
};

Also werden alle Logs, die das Gateway auf Port 514 UDP erreichen an den oben definierten Log-Server weiter geleitet und dort ggf. sortiert. Soweit nicht spektakulär.

Einrichten der Clients

Auch die Clients sind schnell eingerichtet, sie brauchen nur ein neues Log-Ziel und eine Log-Regel:

1
2
3
4
5
6
7
8
destination gatewaylog_server {
udp("gateway.dns.de" port(514));
};

log {
source(s_all);
destination(gatewaylog_server);
};

Das war es im Prinzip schon. Wie man sieht ist syslog-ng ein recht mächtiges Werkzeug, einzig die Verschlüsselung fehlt mir. Hier sei auf das Tool stunnel verwiesen, es lauscht bei beiden Kommunikationspartnern am lokalen Interface und wrappt quasi die Verbindung durch einen SSL-Tunnel.

Tags: Debian Linux Netzwerk Security Software Syslog Unix

Kategorien: Betriebssystem Linux Netzwerk Sicherheit Software Unix

© 2009-2018 by Martin Scharm