Sie sind auf Seite 1von 10

LOG-Server

- Network Syslog Monitor -

Dokumentation

©Erik Franz, 06.09.2005


erik_franz@web.de
Inhaltsverzeichnis

1 Allgemeines....................................................................................................................3
1.1 Was ist ein Log-Server ............................................................................................3
1.2 Verwendete Hardware.............................................................................................4
1.3 Verwendete Software ..............................................................................................4

2 Installation / Konfiguration .............................................................................................5


2.1 Clients.....................................................................................................................5
2.1.1 Linux-Systeme ................................................................................................5
2.1.1.1 Uhren synchronisieren .................................................................................5
2.1.1.2 Alter syslog-Daemon ...................................................................................5
2.1.1.3 Neuer syslog-Daemon .................................................................................5
2.1.2 Windows-Systeme...........................................................................................5
2.2 Server .....................................................................................................................6
2.2.1 Betriebssystem installieren ..............................................................................6
2.2.2 php-syslog-ng Paket anpassen .........................................................................6
2.2.3 sqlsyslog Daemon erstellen .............................................................................8
2.2.4 Web-Frontend aufsetzen..................................................................................9
2.2.5 Pflege der Datenbank ......................................................................................9

3 Einige wichtige Kommandos ........................................................................................10


3.1 MySQL.................................................................................................................10
3.2 Apache2................................................................................................................10
3.3 Web-Frontend .......................................................................................................10

2
1 Allgemeines

1.1 Was ist ein Log-Server


Um ein mittleres bis großes heterogenes Netzwerk optimal verwalten zu können, ist es
mitunter sinnvoll, einen dedizierten Logging-Server zu installieren, auf dem sämtliche
Logging-Nachrichten der wichtigsten Rechner/Server zentral zusammenlaufen.
Analyse und Fehlersuche im Netzwerk ist durch eine solche Lösung effektiver,
effizienter und außerdem mit erheblichen Zeitersparnissen gegenüber einem
dezentralen System verbunden.

Dieser Server empfängt über seine Netzwerkschnittstelle sämtliche von anderen im


Intranet befindlichen Servern generierten Statusmeldungen, die sogenannten Log-
Files.
Diese Informationen werden über einen festgelegten Port versendet und empfangen.
Möglich wird dies durch den neuen syslog-Daemon syslog-ng (ng = new generation),
der inzwischen Einzug auf vielen UNIX-basierenden Betriebssystemen hält.
Dieser umkonfigurierte syslog-ng-Daemon des Log-Servers „lauscht“ auf einem
definierten Port auf ankommende UDP-Pakete und leitet diese in eine Fifo-Pufferdatei
um.
Die Logging-Informationen aus den empfangenen Paketen werden durch ein Template
in eine Datenbank-konforme Syntax gebracht und der passende INSERT-Befehl
hinzugefügt.
Mittels eines Shellscripts, dass als Daemon im Hintergrund läuft, wird die Fifo-Datei
kontinuierlich überwacht, direkt ausgelesen, und neue Inhalte sofort an die MySQL-
Datenbank weitergeleitet.
Auf dem Server läuft weiterhin ein Apache2-Webserver mit PHP4-Unterstützung.
Für eine sowohl grafische als auch benutzerfreundliche Ausgabe der in den Tabellen
der Datenbank gespeicherten Log-Dateien werden diese per PHP direkt ausgelesen
und mittels einem HTML-Frontend übersichtlich ausgegeben.
Verschiedene Möglichkeiten der Sortierung und Filterung der gewünschten
Datenausgabe sind ebenso gegeben.
Um die Log-Nachrichten auf Clientseite an den Server weiter zu leiten, wird auf
Linux-Systemen eine Zeile in der entsprechenden syslog-Konfigurationsdatei
hinzugefügt, auf Windows-Rechnern ein kleiner Client installiert.
Das gesamte System läuft in „Echtzeit“ ab und die hier verwendete Software ist
Freeware bzw. steht unter GPL-Lizenz.

Die beschriebene Installation ist nicht allgemein gültig.


Je nach verwendeten Distributionen und Programmversionen kann die Einrichtung
eines solchen Log-Servers von dieser Anleitung abweichen.
Deshalb bitte immer die den verschiedenen Paketen beigelegten Dokumente lesen und
gegebenenfalls berücksichtigen.

3
1.2 Verwendete Hardware
- Desktop-PC Intel Pentium 4 Prozessor 3.0GHz
- 512MB Arbeitsspeicher
- 80GB Festplatte
- Ethernet-Karte 10/100/1000 Mbit

1.3 Verwendete Software

- SuSE Linux 9.3 Professional mit kernel 2.6.11.4 (http://www.suse.de)


- syslog-ng 1.6.5 (http://www.balabit.com)
- php-syslog-ng 2.8 (http://sourceforge.net/projects/php-syslog-ng)
- MySQL 4.1.10a (http://www.mysql.de)
- phpMyAdmin 2.6.1-pl3 (http://phpmyadmin.net)
- PHP4 4.3.10 (http://www.php.net)
- Apache2 2.0.53 (http://www.apache.de)
- ntsyslog 1.13 (http://www.sabernet.net)
- tcpdump 3.8.3 (http://www.tcpdump.org)
- emacs 21.3 (http://www.gnu.org/software/emacs)
- nmap 3.81 (http://www.insecure.org)
- netdate 1.2 (http://home.august.com/~akfullfo/netdate/)

 Die verwendete Software ist Bestandteil der vorliegenden


Suse Linux Distribution.
Wer auf Aktualität besteht, kann sich die Sourcen selbstverständlich auch auf
den oben angegebenen Seiten im Internet herunterladen und „per Hand“
Konfigurieren-Kompilieren-Installieren.
Nur die beiden Pakete php-syslog-ng und ntsyslog-1.13 wurden nachträglich
installiert.

4
2 Installation / Konfiguration

2.1 Clients

 Wie schon anfangs beschrieben handelt es sich hierbei um ein heterogenes


Netzwerk mit auf WindowsNT bzw. UNIX basierenden Betriebssystemen.
Da beide Seiten unterstützt werden sollen, wird für
Windows-Maschinen das kleine Tool ntsyslog-1.13 genutzt, um die Log-Dateien
weiterzuleiten. (Alternative: http://www.kiwisyslog.com/)
Weiterhin sollte beachtet werden, dass auf Linux-Rechnern mit älteren
Distributionen möglicherweise noch kein syslog-ng verwendet wird.

2.1.1 Linux-Systeme
2.1.1.1 Uhren synchronisieren

 Aufgrund permanent vorgehender Uhren (2 Stunden) auf den Linux-Systemen,


wird die Zeit auf diesen Rechnern mittels „netdate“ über einen Zeitserver im LAN
synchronisiert.
Eine Anleitung dazu ist unter folgender Adresse zu finden:
http://www.robidu.de/linux/trickkiste/zeitsync.html

2.1.1.2 Alter syslog-Daemon

- In Datei /etc/syslog.conf folgenden Eintrag machen:


*.* @< IP_LogServer>
um alle Log-Events an den Log-Server weiterzuleiten

2.1.1.3 Neuer syslog-Daemon

- In Datei /etc/syslog-ng/syslog.conf folgenden Eintrag machen:


destination log_udp { udp(„<IP_LogServer>“ port(514));};
log { source(src); destination(log_udp);};
um alle Log-Events an den Log-Server weiterzuleiten

2.1.2 Windows-Systeme
- Programm „ntsyslog“ von oben genannter Quelle herunterladen und als Dienst
installieren.
- Die IP-Adresse des Log-Servers für die Weiterleitung der Syslog-
Informationen eintragen.
- gewünschte Event-Logs, die weitergeleitet werden sollen, auswählen.

5
2.2 Server
2.2.1 Betriebssystem installieren
- Standard-Installation mit Yast2
- 2 Partitionen erstellt, / und swap
- Minimale Software-Installation ausgewählt, weitere Applikationen wie oben
beschrieben hinzugefügt.
- Rechnername: <Rechnername>
- IP-Adresse: <IP_LogServer>
- Subnet-Mask: <Subnet_Mask>
- Domain: <domain>
- Nameserver1: <nameserver_1>
- Nameserver2: <nameserver_2>
- Default Gateway: <default_gw>
- Integrierte SuSE Firewall deaktiviert, um Komplikationen zu vermeiden. Der
Server steht im Intranet, das bereits durch eine Firewall-Lösung geschützt ist.
- root Passwort festgelegt.
- Benutzer angelegt: log
- Das Paket php-syslog-ng-2.8 herunterladen und in einem separaten download-
Verzeichnis abgelegt (/usr/local/src/)

2.2.2 php-syslog-ng Paket anpassen


- Laut
/usr/share/doc/packages/syslog-ng/README.SuSE
nutzt Suse Linux bereits seit 2003 den neuen syslog-Daemon „syslog-ng“
- Darauf achten, dass in der Konfigurationsdatei
/etc/sysconfig/syslog
folgendes eingetragen ist:
SYSLOG_DAEMON=“syslog-ng“
um sicher zu stellen, dass der neue syslog-ng Daemon aktiviert ist.
- Die Konfigurationsdatei für syslog-ng ist
/etc/syslog-ng/syslog-ng.conf
- Der Daemon sollte unter dem Namen „syslog“ laufen.
- Testen durch den Befehl
/etc/init.d/syslog status
Erscheint ein „running“ läuft der Dienst.
- MySQL-Server und Apache2-Server sind zwar installiert, laufen jedoch noch
nicht als Daemon im Hintergrund, deshalb die Runlevel für beide Programme
konfigurieren um sicher zu stellen das diese beim Neustarten des Servers
aktiviert werden.
- Am einfachsten einzustellen mit dem Suse-Dienstprogramm „yast“
- Folgende Schritte ausführen:
yast  System  Runlevel-Editor  Expertenmodus  mysql in den
Runleveln 2, 3 und 5 starten.
- Die gleichen Schritte für Apache2 ausführen.
- Entpacken des php-syslog-ng Paketes mit
tar xvzf phpsyslogng-2.8.tar.gz

6
- Ins neue Verzeichnis wechseln
cd phpsyslogng-2.8
- In config/config.php folgendes anpassen:

define (´DEFAULTLOGTABLE´, ´logs´);


define (´DBUSER´, ´sysloguser´);
define (´DBUSERPW´, ´<password>´);
define (´DBADMIN´, ´syslogadmin´);
define (´DBADMINPW´, ´<password>´);
define (´DBNAME´, ´syslog´);
define (´DBHOST´, ´localhost´);
deine (´DBPORT´, ´3306´);
define(´URL´, ´http://<IP_LogServer>/´);

- Den Inhalt von scripts/syslog.conf der Datei


/etc/syslog-ng/syslog-ng.conf anfügen und gegebenenfalls editieren:

source src {
internal();
unix-dgram("/dev/log");
};

source net {
udp(ip("0.0.0.0") port(514));
};

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));
};
log {
source(net);
destination(d_mysql);
};

- /etc/init.d/syslog restart ausführen um Änderungen zu übernehmen.


- Die Datei dbsetup.sql umlenken, so dass in der Datenbank die richtigen
Tabellen und User angelegt werden.
 Wichtig: Passwörter in der Datei anpassen!
 Damit werden 4 User angelegt: admin (password: admin), sysloguser,
syslogfeeder und syslogadmin.
INSERT INTO user (Host, User, Password) VALUES ('localhost','sysloguser',
password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','sysloguser');
INSERT INTO user (Host, User, Password) VALUES ('localhost','syslogfeeder',
password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','syslogfeeder');
INSERT INTO user (Host, User, Password) VALUES
('localhost','syslogadmin',password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','syslogadmin');

- mysql –u root –p < dbsetup.sql


(sollte noch kein Passwort für MySQL - root angelegt worden sein, bitte nachholen!
Siehe Kapitel 3.1)

7
2.2.3 sqlsyslog Daemon erstellen
- Fifo-Datei mysql.pipe anlegen mit dem Befehl
mkfifo /var/log/mysql.pipe
- Script aus Dokumentation von php-syslog-ng-2.51 auf
http://www.vermeer.org/docs/1 übernommen.
 leitet die Informationen aus der Puffer-Datei im Hintergrund an die
Datenbank weiter.
 Bitte Änderungen berücksichtigen (User/Passwort/Pfade).

#!/bin/bash
#
# sqlsyslogd This is a daemon that takes syslog-ng input and pipe it into
# a MySQL database.
#
# chkconfig: 2345 92 10
# description: sqlsyslogd bridges syslog-ng and mysql.
# author: Josh Kuo Thu 2004/08/12 13:21:56 PDT

# Unter Suse nicht verfügbar, nicht relevant.


#. /etc/rc.d/init.d/functions

case "$1" in
start)
if [ -x /var/log/mysql.pipe ]; then
mkfifo /var/log/mysql.pipe
else
# if the service is already running, do not start another one
PIDS=`pidofproc mysql`
if [ "$PIDS" ]; then
printf "sqlsyslogd is already running.\n"
exit 1
fi
mysql -u syslogfeeder --password=<password> syslog < /var/log/mysql.pipe
&
fi
;;
stop )
killproc mysql
;;

*)
printf "Usage: sqlsyslogd {start|stop}\n"
exit 1;
esac
exit 0;

- Die nötigen Rechte mit chmod +x sqlsyslogd vergeben.


- Damit das Script bei Systemstart geladen wird, wird es für Runlevel 3 und 5
konfiguriert.
- Kopieren des Scripts in /etc/init.d/
- Dann Wie unter 2.2.2 beschrieben verfahren.
- Damit sollte der Daemon bei Neustart des Systems im Hintergrund laufen.
 Mit ps -ef |grep sqlsyslogd überprüfen
- Der FirstInFirstOut Puffer kann testweise auf seine Funktionalität überprüft
werden:
cat /var/log/mysql.pipe
- Ob Pakete von den Clients über das Netzwerk geschickt werden, ist mit dem
Programm „tcpdump“ sehr einfach einzusehen.
Es sollten z.B. nachfolgend eingefügte Zeilen auftauchen sobald ein Ereigniss
auf Clientseite auftritt:

8
16:29:31.420429 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 49
16:29:31.420543 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 30
16:29:31.429269 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 73

- Es ist klar erkennbar, dass der Rechner mit der IP <IP_Client> UDP-Pakete an
den Rechner <LogServer> sendet, unseren Log-Server.

2.2.4 Web-Frontend aufsetzen


- Folgende Dateien und Verzeichnisse nach /srv/www/htdocs kopieren:
config/ css/ includes/ scripts/ index.php
 Die Web-Oberfläche des Log-Servers ist ab sofort zu
erreichen unter http://<IP_LogServer>/

- Für Nutzung von phpMyAdmin die Datei


/src/www/htdocs/phpMyAdmin/config.inc.php
folgendermaßen anpassen:
$cfg[´PmaAbsoluteUri´] = ´http://<IP_LogServer>/phpMyAdmin/´;
- Das Passwort für root eintragen.
 phpMyAdmin ist zu erreichen unter http://<IP_LogServer>/phpMyAdmin/
 Damit ist eine konfortable Verwaltung der Datenbank gegeben.

2.2.5 Pflege der Datenbank


- Damit die Datenbank nicht unendlich viel Platz belegt, wird sie durch ein
script gesichert und gleichzeitig alte Einträge gelöscht.
- In Datei /srv/www/htdocs/scripts/logrotate.php den Pfad berichtigen:
$APP_ROOT = '/srv/www/htdocs';
- Diese Datei in den Ordner /etc/cron.weekly/ kopieren, um das Script
wöchentlich auszuführen.

9
3 Einige wichtige Kommandos

3.1 MySQL

Aktion Befehl
mysqladmin -u root password <neues_passwort>
Passwort festlegen
Einloggen mysql –u <user> -p
Ausloggen exit
Daemon steuern etc/init.d/mysql{start|stop|status|reload|restart|try
-restart|force-reload}
Datenbank auswählen use <database>;
Tabellen anzeigen show tables;
Alle Infos einer Tabelle ausgeben SELECT * FROM <tabelle>;

3.2 Apache2

Aktion Befehl
/etc/apache2/httpd.conf
Wichtige Konfigurationsdatei
Daemon steuern etc/init.d/apache2{start|stop|status|restart|try-
restart}

3.3 Web-Frontend

- beim Hinzufügen eines neuen Hosts beachten, dass der Cache aktualisiert
werden muss, um die neue Maschine auch auf der Search-Seite angezeigt zu
bekommen.
- Dazu auf das Feld „Config“ drücken, und auf der folgenden Seite den Button
„Reload Cache“ anklicken.
- Wichtig: Mit den nötigen Rechten einloggen!

10