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.