Syslog-ng: Unterschied zwischen den Versionen
(→Filter) |
(→Filter) |
||
Zeile 192: | Zeile 192: | ||
|- | |- | ||
|message() | |message() | ||
− | | | + | |Ersetzt ab 3.0 match() |
|- | |- | ||
|match("regex" value("$MACRO")) | |match("regex" value("$MACRO")) |
Version vom 29. März 2012, 07:51 Uhr
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
Jede Zeile dieser Datei, die nicht leer ist oder mit einem # beginnt, beschreibt eine Regel, was mit einer bestimmten Meldung passieren soll. die grundlegende Form jeder Zeile ist immer gleich und lautet:
Herkunft.Priorität Aktion
Herkunft, auch Syslog-Facility
kern | Systemmeldungen direkt vom Kernel |
auth | Meldungen vom Sicherheitsdienst des Systems (login, ...) |
authpriv | Vertrauliche Meldungen der internen Sicherheitsdienste |
Meldungen des Mail-Systems | |
news | Meldungen des News-Systems |
lpr | Meldungen des Druckerdaemons |
cron | Meldungen des Cron-Daemons |
syslog | Meldungen des syslog-Daemons selbst |
daemon | Meldungen aller anderer Daemon-Prozesse |
user | Meldungen aus normalen Anwenderprogrammen |
local0-local7 | frei verwendbar |
Prioritäten in absteigender Reihenfolge
emerg | Der letzte Spruch vor dem Absturz |
alert | Alarmierende Nachricht, die sofortiges Eingreifen erforderlich macht |
crit | Meldung über eine kritische Situation, die gerade nochmal gut gegangen ist |
err | Fehlermeldungen aller Art aus dem laufenden Betrieb |
warn | Warnungen aller Art aus dem laufenden Betrieb |
notice | Dokumentation besonders bemerkenswerter Situationen im Rahmen des normalen Betriebs |
info | Protokollierung des normalen Betriebsablaufes |
debug | Mitteilungen interner Programmzustände bei der Fehlersuche |
none | Ist keine Priorität im eigentlichen Sinn, sondern dient zum Ausschluß einzelner Herkünfte |
Eine angegebene Priorität meint immer die genannte oder eine höhere. Wenn jedoch vor der Priorität ein Gleichheitszeichen (=) steht, so ist nur die genannte Priorität gemeint.
Aktion
/var/log/auth.log | schreibt in eine Datei |
root, tux | sendet an die Konsole der eingeloggten Bentzer root und tux |
* | sendet an alle eingeloggten Benutzer |
@server | sendet an den angegebenen Rechner |
- Ausschnitt /etc/syslog.conf , Standardlogdateien
auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log mail.info -/var/log/mail.info mail.warning -/var/log/mail.warn mail.err /var/log/mail.err ... # # Emergencies are sent to everybody logged in. # *.emerg * ...
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-" ...
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