Syslog-ng

Aus xinux.net
Zur Navigation springen Zur Suche springen

syslog allgemein

Unter Linux verwaltet ein spezieller Daemon-Prozess ein Systemlogbuch, das von allen Programmen und insbesondere von allen anderen Daemon-Prozessen benutzt werden kann, um Meldungen abzugeben.

Jedes Programm kann also über einen Systemaufruf solche Meldungen abgeben. Der Daemon, der diese Meldungen entgegennimmt und entscheidet, was mit ihnen zu geschehen hat heißt syslogd. Damit der Systemverwalter entscheiden kann, was mit welchen Meldungen geschehen soll kann dieser Daemon über die Datei /etc/syslog.conf konfiguriert werden.

Die Datei /etc/syslog.conf

syslog-ng

Syslog bietet erweiterte Logging-Fähigkeiten und kann die Logs von Rechnern und teilweise auch Firewalls mitlesen.

Installation

root@zero:~# apt-get install syslog-ng

Spezifisches Logging am Beispiel einer IPtables-Firewall

Sources

Um eine Source zu definieren, braucht man das Source Statement im Konfigurationsfile. Source hat die folgende Syntax:

 source <identifier> { source-driver(params); source-driver(params); ... };

Sources

internal Nachrichten, die von syslog-ng intern generiert werden
unix-stream Öffnet den angegebenen Unix Stream im SOCK_STREAM Modus und wartet nach Nachrichten
unix-dgram Öffnet den angegebenen Unix Stream im SOCK_DGRAM Modus und wartet nach Nachrichten
file Öffnet die angegebene Datei und liest Nachrichten
pipe, fifo Öffnet die angegebene named pipe und liest Nachrichten
udp Lauscht auf dem angegebenen UDP Port nach Nachrichten
tcp Lauscht auf dem angegebenen TCP Port nach Nachrichten
sun-stream, sun-streams Öffnet STREAMS device auf dem angegebenen Solaris System und liest Nachrichten

Alles was über UDP reinkommt

source s_udp { udp(); };

Alles von Port 1999 auf dem lokalen Rechner

source s_tcp { tcp(ip(127.0.0.1) port(1999)); };

Filter

Filter haben einen klar identifizierbaren (einzigartigen) Namen, damit kann man in den Log statements auf die Filter zurückgreifen.

Syntax für ein Filter statement:

 filter <identifier> { expression; };

Expression kann die Operatoren "and", "or" und "not" beinhalten, und alle von den untestehenden Funktionen.

Filterfunktionen

facility() Wählt Nachrichten aufgrund ihres Facility Codes aus
level() or priority() Wählt Nachrichten aufgrund ihrer Priorität aus
program() Versucht aufgrund des Namens (regulärer Ausdruck) im Namensfeld der Nachrichten auszuwählen
host() Versucht aufgrund des angegebenen Hostnamens (regulärer Ausdruck) im Hostfeld der Nachrichten auszuwählen
match() Versucht aufgrund eines regulären Ausdrucks in der Nachricht selbst auszuwählen
message() Ersetzt ab 3.0 match()
match("regex" value("$MACRO")) Ab 3.0

Filtert auf Nachrichten der lpr-Facility

filter f_lpr { facility(lpr); }; 

Filtert auf Nachrichten, die "iptables" enthalten

filter f_iptables { match(iptables); };

Ziele

Eine destination ist der "Ausgang", wo die Nachrichten hingesendet werden wenn eine Filter Regel zutrifft.

destination <identifier> { destination-driver(params); destination-driver(params); ... };

Verfügbare Ziele

file Schreibt Nachrichten in die angegebene Datei
fifo, pipe Schreibt in die angegebene Named Pipe
unix-stream sendet Nachrichten an den angegebenen Socket
udp Sendet Nachricht an den angegebenen Host und UDP Port
tcp Sendet Nachricht an den angegebenen Host und TCP Port
usertty Sendet Nachricht an einen eingeloggten Benutzer
program Startet das angegebene Programm und schickt die Nachrichten als Standardeingabe

Schreibt nach /var/log/syslog

destination df_syslog { file("/var/log/syslog"); };

Schreibt in eine pipe zum Auslesen mit einer Konsole unter X

destination dp_xconsole { pipe("/dev/xconsole"); };

Sendet an alle eingeloggten Benutzer

destination du_all { usertty("*"); };    

Zusammenfassung

  • /etc/syslog-ng/syslog-ng.conf

Filter definieren

filter f_iptables { match(iptables); };

Ziel definieren

destination df_firewall { file("/var/log/firewall"); };

Log-"Pfad" definieren

log {
       source(s_all);
       filter(f_iptables);
       destination(df_firewall);
};

Exclude zu altem Filter hinzufügen

filter f_syslog { not facility(auth, authpriv) and not match(iptables); };
  • Firewall
...
iptables -A INPUT -j LOG --log-prefix="-iptables-in-"
iptables -A OUTPUT  -j LOG --log-prefix="-iptables-out-"
iptables -A FORWARD -j LOG --log-prefix="-iptables-for-"
...

Logging von IKE

destination d_ike { file("/var/log/ike"); };
filter f_ike { facility(auth, authpriv) and match(pluto); };
log { source(s_src); filter(f_ike); destination(d_ike); };

Netzwerklogging

Kommentarzeichen # vor udp(); entfernen, um Log-Einträge über das Netzwerk (UDP Port 514) zu empfangen

  • /etc/syslog-ng/syslog-ng.conf
...
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();
};

DNS erlauben für Namensauflösung der Clients (optional)

...
       use_dns(yes);
       dns_cache(yes);
...

syslog-ng neustarten

root@zero:~# /etc/init.d/syslog-ng restart

syslog auf dem Client einrichten

  • /etc/syslog.conf
...
*.*    @192.168.242.12

syslog auf dem Client neustarten

root@kallen:~# /etc/init.d/sysklogd restart

Überprüfen der Funktionalität

tcpdump

root@zero:~# tcpdump -ni eth0 udp port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:26:08.900825 IP 192.168.242.11.514 > 192.168.242.12.514: SYSLOG authpriv.info, length: 73
11:28:04.855498 IP 192.168.242.11.514 > 192.168.242.12.514: SYSLOG authpriv.info, length: 79
11:28:04.868755 IP 192.168.242.11.514 > 192.168.242.12.514: SYSLOG cron.info, length: 104
11:28:05.247020 IP 192.168.242.11.514 > 192.168.242.12.514: SYSLOG authpriv.info, length: 68

syslog auf dem Server

root@zero:~# tail /var/log/syslog -f
Jul 10 11:23:58 kallen syslogd 1.5.0#5ubuntu3: restart.
Jul 10 11:23:58 kallen anacron[2821]: Job `cron.daily' terminated
Jul 10 11:23:58 kallen anacron[2821]: Normal exit (1 job run)
Jul 10 11:25:04 kallen /USR/SBIN/CRON[4971]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jul 10 11:25:58 zero kernel: [93344.288627] device eth0 entered promiscuous mode
Jul 10 11:28:04 kallen /USR/SBIN/CRON[5067]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)

auth.log auf zero

Loginversuch auf Kallen

root@kallen:~# login
kallen login: gast
Passwort: gast

auth.log auf zero

root@zero:~# tail /var/log/auth.log -f
...
Jul 10 11:35:43 kallen login[5320]: pam_unix(login:auth): check pass; user unknown
Jul 10 11:35:47 kallen login[5320]: FAILED LOGIN (2) on 'pts/1' FOR `UNKNOWN', Authentication failure

Weitere Log-Dateien

  • /var/log/daemon.log : Logdatei für Hintergrunddienste
  • /var/log/kern.log : Logdatei für Kernelmeldungen
  • /var/log/mail.log : Logdatei für Mails (auf Mailservern)
  • /var/log/messages : Allgemeine Meldungen