Syslog-ng ist ein gebräuchlicher Syslog-Server auf der Linux- und Unix-Plattform. Dieses Programm implementiert das syslog-Protokoll und bietet einige Erweiterungen, die bekannte Schwachstellen des Protokolles beheben sollen. Syslog-ng ist eine quelloffene Softwarelösung. Quelle: Wikipedia
Im Gegensatz zum alten syslog bietet syslog-ng mehr Funktionen (z. B. tcp-Verbindungen) und ist flexibler zu konfigurieren. Es existiert auch eine kommerzielle Variante.
Die Konfiguration von syslog-ng ist relativ gut in der Datei /etc/syslog-ng/syslog-ng.conf erklärt.
Die allgemeine Syntax ist nach dem Schema
NAME {
# Kommentare
EINSTELLUNG(PARAMETER);
};
Jede Zeile und jeder Block (geschweifte Klammerm) wird also mit einem Semikolon abgeschlossen
Grundsätzlich sind vier Arten von Einstellungen zu machen
Optionen (options) wirken global.
options {
# the number of lines buffered before written to file
# you might want to increase this if your disk isn't catching with
# all the log messages you get or if you want less disk activity
# (say on a laptop)
# (default is 0)
#sync(0);
};
Quellen (source): Hier wird die Quellen von Protokolldaten angegeben.
Allgemeine Syntax:
source NAME {
Einstellung
};
Als Quellen werden
unix-stream("/dev/log");
file("/proc/kmsg" log_prefix("kernel: "));
udp( ip(127.0.0.1) port(514) )
(für alte syslogs) oder
source NAME {tcp(ip("127.0.0.1")
port(514));
};
Letzteres wird bei einer Konfiguration als Log-Host (siehe unten) wichtig.
Die vorgegebene Quelle s_all sieht so aus:
source s_all {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" log_prefix("kernel: "));
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)
# udp();
};
Ziele (destinations): Die eigentlichen Logdateien bzw. entfernte Rechner.
destination d_syslog { file("/var/log/DATEI.log" owner("root") group("adm") perm (0640)); };
Anstatt Dateien können auch andere Ziele (z. B. über tcp) angegeben werden:
destination loghost {tcp("IP" port(514));};
Als Ziel ist auch eine Datenbank (siehe sqlsyslogd usw.) möglich.
Es gibt die Möglichkeit ein Ausgabeformat mit template() festzulegen. Dies und mehr wird in der Selflinux-Dokumentation zum destination Objekt beschrieben.
Auf einem Loghost eine eine Sortierung nach Hosts usw. sehr nützlich. Beispiel:
destination std {
file("/var/log/HOSTS/$HOST/$YEAR/$MONTH/$DAY/$FACILITY_$HOST_$YEAR_$MONTH_$DAY"
owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)
);
};
Ein minimales Beispiel für die facility local0:
destination df_local0 { file("/var/log/local0.log"); };
filter f_local0 { facility(local0); };
log {
source(s_all);
filter(f_local0);
destination(df_local0);
};
syslog-ng auf Client und Server installieren/etc/syslog-ng/syslog-ng.conf: destination loghost {tcp("192.168.0.1" port(30514));};
log {
source(s_all);
destination(loghost);
};
Als IP des Servers 192.168.0.1 und als Port wird 30514 angenommen, die Werte sollten angepasst werden. Wenn Meldungen über fehlgeschlagene Logins (faciliy: auth, authpriv) nicht im Protokoll enthalten sein sollen, fügt man zwischen source und destination noch folgenden Zeile an:
filter(f_syslog);
/etc/syslog-ng/syslog-ng.conf:source s_remote {
tcp(ip("192.168.0.1")
port(30514)
max-connections(1));
};
destination d_remote_syslogs {
file("/var/log/loghosts/syslogs.log");
};
# syslog von den Clients
log {
source(s_remote);
filter (f_syslog);
destination(d_remote_syslogs);
};
# auth,authpriv von den Clients
destination d_remote_auths {
file("/var/log/loghosts/auths.log");
};
log {
source(s_remote);
filter (f_auth);
destination(d_remote_auths);
};
Als IP des Servers 192.168.0.1 und als Port wird 30514 angenommen, die Werte sollten angepasst werden. Ebenso die Pfade der Protokolldateien (
/var/log/loghosts/auths.log und /var/log/loghosts/syslogs.log). Falls oben auth und authpriv herausgefiltet hat, ist der Abschnitt ab „# auth,authpriv von den Clients“ natürlich nicht mehr nötig. Ggf. sollten die Optionen angepasst werden:
options {
long_hostnames(off);
sync(0); # Anzahl der Zeilen bevor auf die Festplatte geschrieben wird
keep_hostname(yes); # Hostnamen beibehalten?
chain_hostnames(no); # "chained hostname"-Format?
};
Die Filter f_auth und f_syslog sind in der Konfiguration bereits standardmäßig vordefiniert und brauchen daher nicht mehr angegeben zu werden. Der Vollständigkeit halber dennoch:
# all messages from the auth and authpriv facilities
filter f_auth { facility(auth, authpriv); };
# all messages except from the auth and authpriv facilities
filter f_syslog { not facility(auth, authpriv); };
unfertig.
Allgemeine Konfigurationsbeispiele siehe Seite von stunnel4.
syslog-ng und stunnel4 installierenopenssl req -new -x509 -nodes -days 1095 -out loghost-server.pem -keyout loghost-server.pem
openssl req -new -x509 -nodes -days 1095 -out client1.pem -keyout client1.pem
cat *-client.pem > all-clients.pem nano all-clients.pem
Dabei sollen —–BEGIN CERTIFICATE—– und —–END CERTIFICATE—– gelöscht werden.
/etc/stunnel kopieren/etc/syslog-ng/syslog-ng.conf anfügen destination loghost {tcp("78.47.94.237" port(50515));};
# destination stunnel {tcp("127.0.0.1" port(514));};
#
# log {source(src); destination(loghost);}
#
# *.*;auth,authpriv.none -/var/log/syslog
log {
source(s_all);
# filter(f_syslog); #
destination(loghost);
};
options { long_hostnames(off);
sync(0);};
source src {unix-stream("/dev/log");
pipe("/proc/kmsg");
internal();};
destination dest {file("/var/log/messages");};
destination stunnel {tcp("127.0.0.1" port(514));};
log {source(src); destination(dest);};
log {source(src); destination(stunnel);};
Wenn man an der Konfigurations schraubt muss man aufpassen, dass nach Konfigurationsfehlern am Ende auch syslog-ng wieder läuft. Ein normales
/etc/init.d/syslog-ng reload
gibt nämlich bei Debian Etch keinen Muks von sich wenn syslog-ng nicht läuft.
Einen Patch dafür und wie man ihn anwendet hab ich als Beispiel hinterlegt. Wenn man weiter anpasst kann man syslog-ng auch gleich starten lassen.