Autor: bert2002
Datum: 12.9.2006
Homepage: https://www.pissflitsche.net
syslog-ng
Bei diesem Howto möchte ich auf den Syslogger “syslog-ng” eingehen, da ich ihn in Zukuft nur noch einsetzen möchte. Er hat ein bessere Filterfunktion, Transport der Meldungen per udp oder tcp und Protokollierung in eine Mysql Datenbank. Was will man mehr?
Ich werde als erstes auf einen ganz normalen stand-alone Computer eingehen und dann noch erklären wie man einen Client und einen Server Konfiguriert. Damit ihr die Konfigurationsdateien nicht alle kopieren müsst, werde ich sie euch am Ende des Howtos zum Download anbieten.
Installation
Um den syslog-ng zu Installieren müsst ihr als erstes nicht viel beachten, den apt wird die Abhängigkeiten oder Konflikte lösen. Es kann sein das er syslog und kmesg deinstalliert.
apt-get install syslog-ng
Konfiguration eines Stand-Alone Computers
Als nächstes wollen wir uns einen normalen Computer unter der Haube anschauen und diesen für syslog-ng Konfigurieren. Die Konfigurationsdatei befindet sich in ‘/etc/syslog-ng/syslog-ng.conf’
Datei /etc/syslog-ng/syslog-ng.conf:
# syslog-ng Optionen
#
#options {chain_hostnames(no);
use_fqdn(yes);
keep_hostname(yes);
time_reopen(10);
time_reap(360);
log_fifo_size(2048);
create_dirs(yes);
dir_perm(0700);
use_dns(no);
};source s_local {# Nachrichten von syslog-ng selbst
internal();# Standard Unix logs
unix-stream(“/dev/log”);# Nachrichten vom Kernel
file(“/proc/kmsg” log_prefix(“kernel: “));};
# destinations
#
#destination df_auth { file(“/var/log/auth.log”); };
destination df_syslog { file(“/var/log/syslog.log”); };
destination df_cron { file(“/var/log/cron.log”); };
destination df_daemon { file(“/var/log/daemon.log”); };
destination df_kern { file(“/var/log/kern.log”); };
destination df_mail { file(“/var/log/mail.log”); };
destination df_user { file(“/var/log/user.log”); };destination df_messages { file(“/var/log/messages.log”); };
destination du_all { usertty(“*”); };
destination df_external { file(“/var/log/external.log”); };# filters
#
## Alle Nachrichten von auth und authpriv
filter f_auth { facility(auth, authpriv); };# Alle Nachrichten ausser auth und authpriv
filter f_syslog { not facility(auth, authpriv); };# Restlichen Nachrichten: cron, daemon, kern, lpr, mail, news, user und uucp
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };filter f_at_least_info { level(info..merg); };
# Alle Nachrichten von info, notice oder warn mit der warn Priorität die nicht von auth, authpriv, cron, daemon, mail oder news kommen
filter f_messages {
level (info,notice,warn)
and not facility (auth,authpriv,cron,daemon,mail,news);
};# Nachrichten mit der Priorität emerg
filter f_emerg { level(emerg); };# logs
#
#log {
source(s_local);
filter(f_auth);
destination(df_auth);
};log {
source(s_local);
filter(f_syslog);
destination(df_syslog);
};log {
source(s_local);
filter(f_cron);
destination(df_cron);
};log {
source(s_local);
filter(f_daemon);
destination(df_daemon);
};log {
source(s_local);
filter(f_kern);
destination(df_kern);
};log {
source(s_local);
filter(f_mail);
filter(f_at_least_info);
destination(df_mail);
};log {
source(s_local);
filter(f_user);
destination(df_user);
};log {
source(s_local);
filter(f_messages);
destination(df_messages);
};log {
source(s_local);
filter(f_emerg);
destination(du_all);
};log {
source(s_external);
destination(df_external);
};
Ich möchte jetzt nicht auf die genauere Bescheibung eingehen, denn die Dokumentation von syslog-ng ist sehr gut und wenn man sich einmal eingelesen hat, sieht alles ganz einfach und verständlich aus. Wenn ihr jetzt noch den syslog-ng daemon neustartet oder startet dann funktioniert auch wieder alles wie vorher mit dem “alten” syslogd.
Server Konfiguration
Um jetzt den normalen syslog-ng in einen Server zu verwandeln müssen wir zwei Änderungen an der Konfiguration vornehmen:
Datei: /etc/syslog-ng/syslog-ng.conf
# Dieser Eintrag ist schon vorhanden muss aber geaendert werden
log {
source(s_external);
destination(df_external);
destination(d_mysql);
};# syslog-ng Server
source s_external {
tcp ( ip(0.0.0.0) port(514) keep-alive(yes));
};# NTP Server Einstellungen
#
#
# Ihr müsst beim ersten mal die mysql.pipe erstellen: “mkfifo /var/log/mysql.pipe”
destination d_mysql {
pipe(“/var/log/mysql.pipe”
template(“INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( ‘$HOST’, ‘$FACILITY’, ‘$PRIORITY’, ‘$LEVEL’, ‘$TAG’,
‘$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC’,’$PROGRAM’, ‘$MSG’ );\n”)
template-escape(yes));
};
Wir stellen jetzt ein das die Nachrichten in die Datei mysql.pipe geschrieben werden, die wir zuvor anlegen müssen ( mkfifo /var/log/mysql.pipe ). Ausserdem erlauben wir syslog-ng das er Nachrichten über den Port 514 mit dem TCP Protokoll annehmen darf.
Die IP (0.0.0.0) sagt aus das er an jeder IP Nachrichten annehmen darf, wenn ihr mehrere Netzwerkkarten habt, dann ist es ganz gut wenn man den Zugriff nur von einer IP auszulaest.
Jetzt brauchen wir noch ein kleines script das die Daten aus der “/var/log/mysql.pipe” in die Mysql Datenbank, das sieht folgend aus:
#!/bin/bash
# Script: syslog2mysql.shif [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do
mysql -u syslogfeeder –password=ENTER_YOUR_PASSWORD_HERE syslog < /var/log/mysql.pipe >/dev/null
done
Das Password, werden wir bei der Installation von php-syslog-ng festlegen.
Das währe auch schon fast alles, doch jetzt brauchen wir noch eine Weboberfläche womit wir uns die logs sauber anschauen können und filtern können. Dazu verwende ich php-syslog-ng, doch dazu später mehr, zuerst möchte ich auf die Client Konfiguration eingehen.
Client Konfiguration
Wie auch bei der Server Konfiguration müssen wir nur etwas zu unserer Stand-Alone Konfiguration hinzufügen um die Nachrichten an den Server weiterzuleiten
Datei: /etc/syslog-ng/syslog-ng.conf
# NTP Client Einstellungen
#
#destination log_tcp { tcp(192.168.0.100 port(514));};
log { source(s_local); destination(log_tcp);};
Wir sagen syslog-ng das er mit dem Protokoll tcp, auf die IP: 192.168.0.100 und den Port 514, die wir vorher auf dem Server Konfiguriert haben. Und das wars für den Client
php-syslog-ng Installation und Konfiguration
Damit wir uns die Log Dateien auch ganz schön anschauen können brauchen wir ein Webinterface und ich habe mich für php-syslog-ng entschieden (gibt noch viele andere). Die Installation ist ganz einfach :
1) Neuste php-syslog-ng Paket herunterladen: http://sourceforge.net/projects/php-syslog-ng
2) tar -xzf php-syslog-ng-2.9.1r10.tar.gz
3) mv html /var/www/phpsyslogng
4) chmod -R 777 /var/www/phpsyslogng/config
5) Gehe mit einem Computer auf den Server -> http://192.168.0.100/phpsyslogng/install/ und befolge die Anweisungen.
5.1) Bei der Installation werden zwei Benutzer angelegt, diese must du auch in der Mysql Datenbank angeben.
6) und schwups sollte alles funktionieren
Im groben und ganzen war das schon alles, weitere Konfiguration möchte ich euch überlassen…
Sicherheit
Wenn man syslog-ng mit “enable-tcp-wrapper” übersetzt hat, dann kann man mit den hosts.deny und hosts.allow festlegen, wer auf den syslog-ng server alles senden darf. Das höhe dann so aus:
Datei: /etc/hosts.deny
syslog-ng: ALL EXPECT 192.168.0.0/255.255.255.0
Konfigurationsdateien
Standalone: https://www.pissflitsche.net/howto-ng/syslog-ng
Server: https://www.pissflitsche.net/howto-ng/syslog-ng-server
Client: https://www.pissflitsche.net/howto-ng/syslog-ng-client
syslog2mysql.sh: https://www.pissflitsche.net/howto-ng/syslog2mysql.sh