System- und Netzwerkmanagement Protokollierung mit Syslog-NG Markus Müller (11043150) Sven Nissel (11042398) Roman Pyro (11042289) Christian Fehmer (11042419)
Versuchsaufbau - Übersicht
Syslog Konfiguration Client Für die Syslog Konfiguration haben wir fünf Mechanismen in den Konfigurationsdateien benutzt source filter template destiantion log
Konfiguration - source Die Quelle der Logging Nachrichten wird im Client nicht verändert. Dadurch werden vorhandene Konfigurationen nicht gestört. source s_all { internal(); unix-stream("/dev/log"); };
Konfiguration - filter Ein Filter soll dafür sorgen, dass nur relevante Nachrichten behandelt werden Dazu wird mit Hilfe eines regulären Ausdrucks nach Programmen gefiltert, die mit einer bestimmten Kennung beginnen filter f_cpu{ program("^cpu ^PRC ^DSU**"); };
Konfiguration - template Ein Template gibt das Format einer Nachricht vor. Jedes Template kann beim Speichern oder Verschicken einer Nachricht benutzt werden. template t_log{ template("[$program] $DAY.$MONTH.$YEAR $HOUR:$MIN:$SEC $@$FULLHOST: $MSGONLY\n"); };
Konfiguration - destination Angabe des Zielortes der Nachrichten. Hier kann ein Rechner im Netzwerk oder eine Datei angegeben werden. Es kann ein Template für die Umformatierung einer Nachricht genutzt werden. destination d_tcp_server { tcp("192.168.6.33" template(t_log)); file("/var/log/test.log" template(t_log)); };
Konfiguration - log Log verbindet Source und Destination über einen oder mehrere Filter miteinander. Ohne den log - Eintrag würden Source und Destination nicht berücksichtigt. log{ source(s_all); filter(f_cpu); destination(d_tcp_server); };
Syslog Konfiguration - Server Der syslog Server ist nach einem ähnlichen Prinzip wie der Client aufgebaut. Es werden Nachrichten empfangen, gefiltert, formatiert und gespeichert. Die Nachrichten vom Client nimmt der Server über TCP entgegen. source s_net { tcp(); };
Syslog Konfiguration - Server Zum Aufteilen der Nachrichten wurde für jedes Programm ein Filter erstellt filter f_dsu { match("^\\[dsu"); }; Die Festplattenbelegung wird über eine Pipe an den DSUactor geschickt und in eine Datei geschrieben. destination d_dsu { file("/var/log/dsu.log" template("$msg\n")); pipe("/root/dsuactor.pipe"); };
cpuwatch.sh Die Watcher Ermitteln der CPU Auslastung der letzen Minute, der letzten 5 und 15 Minuten Senden mit logger -t CPU 0.10 0.20 0.30 prcwatch.sh Ermitteln der laufenden Prozesse inklusive Status Senden mit logger -t PRC <Daten> dsuwatch.sh Ermitteln des freien Speichers pro Partition in % Senden je Partition mit logger -t DSU <Daten>
cpuwatch.sh #!/bin/sh cat /proc/loadavg cut -d " " -f1-3 logger -t CPU Ausgabe von cat /proc/loadavg: 0.00 0.00 0.00 2/37 3648 Auswahl der ersten 3 Felder mit Leerzeichen als Trennung 1 2 3 4 5 0.00 0.00 0.00 2/37 3648 Ergebnis 0.00 0.00 0.00 wird an logger -t CPU gepiped
#!/bin/sh top -bn1 grep Tasks logger -t PRC prcwatch.sh top -bn1 listet alle laufenden Prozesse auf. Die Parameter -bn1 starten den Top-Befehl im Batchmode und veranlasst das Beenden des Programms nach der ersten Iteration. Mit grep Tasks selektieren wir die für uns interessante Zeile mit dem Inhalt Tasks Ergebnis Tasks: 38 total... wird an logger -t CPU gepiped.
dsuwatch.sh #!/bin/sh df -m awk '/sda/ {print $1,"=",$5}' cut -d"%" -f1 logger -t DSU Ausgabe df -m: Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda1 1869 465 1310 27% / awk '/sda/' selektiert Zeilen die sda enthalten. {print $1,"=",$5} zerlegt die Zeile in Spalten und gibt die erste ($1) und fünfte ($5) mit einem = verbunden aus. Durch cut -d wird das % abgeschnitten. Ergebnis /dev/sda1 = 27 wird an logger -t CPU gepiped
Öffne pipe dsuactor.pipe while(true)do Einlesen von der Pipe Ermitteln des Prozentwertes val if (val>grenzwert) filestream an Programm --> mail -s \"LOW DISK SPACE\" root Sende Nachricht an filestream fi end DSUActor DSUActor wird als Daemon gestartet und fragt in Endlosschleife die named Pipe ab. Bei einer Eingabe wird Überprüft, ob der gegebene Grenzwert überschritten wurde und dann eine Mail an den Administrator gesendet.
Testfälle 1.Senden von einer nicht authorisierten IP 2.Senden von einem nicht bekannten Programm 3.Loggen der Prozesse 4.Loggen der CPU 5.Loggen der Disk mit überschrittenen Grenzwert 6.Loggen der Disk mit nicht erreichten Grenzwert 7.Zyklisches Loggen beobachten.
TC1: Unauthorisietes Senden Ändern der IP des fertig konfigurierten Clients ifconfig eth1 192.168.6.35 Aufruf von logger -t CPU TEST von nicht authorisierter IP Ergebnis: Portmapper blockiert den Request Syslog-Client kann die Nachricht nicht zustellen Nachricht wird aber in einer Queue gespeichert und nach dem Ändern der IP korrekt zugestellt syslog-ng: 192.168.6.34 :ALLOW ALL:ALL:DENY
TC2: Unbekanntes Programm Aufruf von logger -t TEST foo auf dem Client Ergebnis: Nachricht wird an den Syslog übergeben und im Message-Log gelogged Nachricht wird aufgrund des Filters nicht an den Server gesendet. filter f_cpu{ program("^cpu ^PRC ^DSU**"); }; log{ }; source(s_all); filter(f_cpu); destination(d_tcp_server);
TC3: Anzahl d. Prozesse Aufruf des Watcherscriptes prcwatch.sh impliziert logger -t PRC <daten> Ergebnis: Nachricht wird vom Client formatiert und übertragen Server logged Nachricht im prc.log [PRC] 11.06.2007 13:18:02 @snma2-client: Tasks: 42 total, 1 running, 41 sleeping, 0 stopped, 0 zombie
TC4: CPU-Auslastung Aufruf des Watcherscriptes cpuwatch.sh impliziert logger -t CPU <daten> Ergebnis: Nachricht wird vom Client formatiert und übertragen Server logged Nachricht im cpu.log [CPU] 11.06.2007 13:31:01 @snma2-client: 0.11 0.03 0.01
TC5: Diskusage >= Grenzwert Aufruf logger -t DSU /dev/sda1 = 95 Ergebnis: Nachricht wird vom Client formatiert und übertragen Server schreibt Nachricht in named pipe und in dsu.log Dsuactor ließt named pipe und verschickt email Abruf des Mailkontos zeigt die Warnmail [DSU] 11.06.2007 13:25:02 @snma2-client: /dev/sda1 = 95 --> Mail: To: root@snma2-server.bavw.de Subject: LOW DISK SPACE From: root <root@snma2-server.bavw.de> Jun 11 13:29:17 192.168.6.34 [DSU] 11.06.2007 13:22:59 @snma2-client: /dev/sda1 = 95
TC6: Diskusage < Grenzwert Aufruf logger -t DSU /dev/sda1 = 27 Ergebnis: Nachricht wird vom Client formatiert und übertragen Server schreibt Nachricht in named pipe und dsu.log Dsuactor ließt named pipe, verschickt keine Mail Abruf des Mailkontos, keine neue Nachricht [DSU] 11.06.2007 13:25:02 @snma2-client: /dev/sda1 = 27
Überwachen Logfiles tail -f /var/log/cpu.log Ergebnis: TC7: Zyklisches Senden Cron startet die Watcher auf dem Client Server schreibt die Nachrichten in die Logfiles [CPU] 11.06.2007 13:29:01 @snma2-client: 0.52 0.17 0.08 [DSU] 11.06.2007 13:29:01 @snma2-client: /dev/sda1 = 27 [PRC] 11.06.2007 13:29:01 @snma2-client: Tasks: 42 total, 1 running, 41 sleeping, 0 stopped, 0 zombie
Zum Schluss Zum Schluss noch 2 Elementare Dinge zum mit nach Hause nehmen Feuer Wasser
...und danke für den Fisch Vielen Dank für die Aufmerksamkeit.