
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:
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:
2
3
4
5
6
7
8
9
10
11
12
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
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:
2
3
4
5
6
7
8
9
10
11
12
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:
2
3
4
5
6
7
8
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.
Kategorien: Betriebssystem Linux Netzwerk Sicherheit Software Unix