[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Postfix: Grundkonfiguration eines Mailservers] (optional) [:Cron: Verwalten von Cronjobs] (optional) [:Perl:] (optional) }}} [[Inhaltsverzeichnis()]] [sourceforge:logwatch:Logwatch] {en} ist ein in [:Perl:] geschriebenes Tool zur Analyse von [:Logdateien:]. Es soll Systemadministratoren helfen, die Übersicht über alle Vorgänge auf einem Serversystem zu behalten. Logwatch durchsucht die Logdateien des Systems und generiert eine Kurzfassung daraus, deren Gestaltung individuell konfiguriert werden kann. Diese kann dann entweder als Datei weiterverarbeitet oder zum Versenden an einen Mailserver weitergereicht werden. Zusätzlich zu den systemeigenen Logs können ohne weitere Konfiguration u.a. folgende Dienste überwacht werden: * Firewall: [:iptables:], [:fail2ban:] * DNS-Server: [wikipedia:Bind:BIND] * DHCP-Server: [:ISC-DHCPD:] * [:SSH:] und [:OpenVPN:] * [:Apache:] * Mailserver: [:Postfix:]/[wikipedia:Sendmail:]/[wikipedia:Exim:]/[wikipedia:qmail:]/Dovecot/[wikipedia:Courier_Mail_Server:Courier] * [wikipedia:Spamassassin:SpamAssassin] / Amavis-Spam-Virenfilter * FTP-Server: [wikipedia:PureFTPd:] / [wikipedia:ProFTPD:] / [:vsftpd:] * [:ClamAV:] * [:Samba:] * [wikipedia:RAID:] * [:Cron:] * [wikipedia:Simple_Authentication_and_Security_Layer:SASL] Eine Alternative zu Logwatch ist das Programm [packages:logcheck:] (siehe auch [http://www.deimeke.net/dirk/blog/index.php?/archives/2986-Logs-....html Logs...] {de}, Blogbeitrag 04/2012). = Vorbereitung = Falls die von Logwatch generierten Berichte per Mail versandt werden sollen, muss ein lokaler Mailserver vorhanden sein. Für Benutzer, die Logwatch für ihren [wikipedia:Small_Office,_Home_Office:SOHO-Server] verwenden wollen, muss ein Mailserver aufgesetzt werden, der die Nachrichten an einen Smarthost weiterleitet. Dies geschieht am einfachsten mit [:Postfix:]. = Installation = Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation logwatch }}} = Start = Die vordefinierte Einstellung ist ein zeitlich geplanter Start durch einen [:Cron:Cronjob]. Mehr dazu findet sich unter [#Automatisierung-Cron Automatisierung]. Möchte man Logwatch lieber per Hand im Terminal [2] [3] oder aus einem Shell-Skript starten, geschieht das mit dem Befehl `logwatch`. Im Terminal wird nun ein Bericht ausgegeben, der zunächst die Grundinformationen über das Geschehen des letzten Tages enthält. Die Ausgabe kann nun mit den Parametern aus der nachfolgenden Tabelle den eigenen Wünschen angepasst werden. Es kann dabei die Ausgabemethode, das Ziel der Ausgabe, die Detailtiefe und der Zeitraum des Berichts angegeben werden. ==Startparameter== {{{#!vorlage Tabelle < -3 tablestyle="width: 98%;" rowclass="titel"-2> Startparameter +++ Parameter Beschreibung +++ `--output stdout|mail|file` Bestimmt die Ausgabemethode. (Default: `stdout`) +++ `--format text|html` Bestimmt das Ausgabeformat. (Default: `text`) +++ `--filename X` Bestimmt die Ausgabedatei X. +++ `--detail low|med|high` Bestimmt die Detailtiefe des Berichts. (Default: `low`) +++ `--mailto X` Versendet den generierten Bericht per Mail an die Adresse X. (setzt einen installierten MTA voraus) +++ `--range today` Bestimmt den Zeitraum, über welchen berichtet werden soll (siehe `logwatch --range help`). }}} Weitere Parameter sind der Hilfe von Logwatch (`logwatch --help`) oder der [:man:Manpage] zu entnehmen: [man:logwatch:] {en}. Erfahrene Benutzer sollten auch den `--service`-Parameter beachten. Mit diesem ist es möglich, den Bericht auf nur einen Dienst oder eine Dienstgruppe zu beschränken. Die Namen der Dienste entsprechen den Namen des jeweiligen Konfigurationsskripts in '''/usr/share/logwatch/default.conf/services'''. ==Beispiele== * Einen Kurzbericht für den aktuellen Tag ausgeben: {{{#!vorlage Befehl logwatch --detail low --range today }}} * Einen detaillierten Bericht über den gestrigen Tag in einem Ordner als HTML-Datei mit Datum als Name ablegen: {{{#!vorlage Befehl logwatch --detail high --range yesterday --format html --filename ~/logwatch/$(date +%F).html }}} * Einen Kurzbericht über die letzten 30 Tage generieren und versenden: {{{#!vorlage Befehl logwatch --detail low --range 'between 30 days ago and yesterday' --mailto nobody@ubuntuusers.de }}} = Konfiguration = == Automatisierung (Cron) == In der Standardkonfiguration wird ein Skript namens '''/etc/cron.daily/00logwatch''' verwendet. Dieses wird jeden Tag einmal gestartet und führt dann Logwatch mit den dort festgelegten Parametern aus. Das Skript kann auch nach '''/etc/cron.weekly''', '''/etc/cron.monthly''' oder – weniger sinnvoll – nach '''/etc/cron.hourly''' verschoben werden. Möchte man Logwatch zu einem Zeitpunkt ausführen, der keinem der oben genannten entspricht, muss statt Anacron die normale, systemweite Crontab verwendet werden. Dazu muss das alte Logwatch-Skript gelöscht werden und ein neuer Eintrag in der Datei '''/etc/crontab''' hinzugefügt werden. Dieser sollte nach folgendem Schema aufgebaut sein: {{{ * * * * * /usr/sbin/logwatch | | | | | | | | | +----- Wochentag (1 - 7) | | | +------- Monat (1 - 12) | | +--------- Tag (1 - 31) | +----------- Stunde (0 - 23) +------------- Minute (0 - 59) }}} Angenommen, Logwatch soll einen Bericht mit den folgenden Parametern generieren: werktags; 2:00 Uhr; nicht detailliert; reiner Text; gestern; per Mail; nobody@ubuntuusers.de Der entsprechende Crontab-Eintrag würde dann wie folgt aussehen: {{{ 0 2 * * 1,2,3,4,5 /usr/sbin/logwatch --detail low --format text --range yesterday --mailto nobody@ubuntuusers.de > /dev/null 2>&1 }}} Der Inhalt der durch diesen Eintrag versandten E-Mail sähe wie folgt aus: {{{ ################### Logwatch 7.3.6 (05/19/07) #################### Processing Initiated: Tue Apr 3 01:55:24 2012 Date Range Processed: yesterday ( 2012-Apr-02 ) Period is day. Detail Level of Output: 0 Type of Output/Format: stdout / text Logfiles for Host: itchy ################################################################## --------------------- dpkg status changes Begin ------------------------ Installed: logwatch 7.3.6.cvs20090906-1ubuntu5 postfix 2.8.5-2~build1 ---------------------- dpkg status changes End ------------------------- --------------------- httpd Begin ------------------------ Requests with error response codes 404 Not Found /robots.txt: 2 Time(s) 408 Request Timeout null: 1 Time(s) ---------------------- httpd End ------------------------- --------------------- Kernel Begin ------------------------ WARNING: Kernel Errors Present [ 18.959797] EXT4-fs (sdb1): re-mounted. Opts: errors=remount-ro ...: 1 Time(s) ---------------------- Kernel End ------------------------- --------------------- pam_unix Begin ------------------------ su: Sessions Opened: root -> nxpgsql: 7 Time(s) root -> daemon: 1 Time(s) root -> postgres: 1 Time(s) sudo: Authentication Failures: simon(0) -> simon: 1 Time(s) ---------------------- pam_unix End ------------------------- --------------------- Connections (secure-log) Begin ------------------------ New Users: postfix (119) New Groups: postfix (131) postdrop (132) Changed password expiry for users: postfix : 1 Time(s) ---------------------- Connections (secure-log) End ------------------------- --------------------- SSHD Begin ------------------------ Users logging in through sshd: simon: 192.168.100.185 (iPad-Simon.home.lan): 4 times Received disconnect: 11: Normal Shutdown. Thank you! : 3 Time(s) ---------------------- SSHD End ------------------------- --------------------- Sudo (secure-log) Begin ------------------------ ============================================================================== root => simon ------------- /usr/bin/vlc - 1 Times. ============================================================================== simon => root ------------- /bin/chown - 1 Times. /bin/cp - 2 Times. /bin/zcat - 1 Times. /usr/bin/apt-get - 1 Times. /usr/bin/find - 1 Times. ---------------------- Sudo (secure-log) End ------------------------- --------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on /dev/sdb1 221G 9.0G 200G 5% / /dev/sda2 75G 58G 18G 78% /home /dev/md0 917G 217G 654G 25% /home/simon/Archiv ---------------------- Disk Space End ------------------------- ###################### Logwatch End ######################### }}} == Eigene Dienste == Das Hinzufügen eigener Dienste zu Logwatch erfordert den Umgang mit der Skriptsprache [:Perl:] [7]. Um so ein Modul entwickeln zu können, muss man zuerst die Verzeichnisstruktur von Logwatch verstehen. Diese mag auf den ersten Blick ein wenig verwirrend wirken, ergibt aber durchaus Sinn. Logwatch ist auf mehrere Konfigurationsverzeichnisse aufgeteilt. Nachfolgend wird deren Funktion erläutert: {{{#!vorlage Tabelle < -3 rowclass="titel"-2> Verzeichnisse +++ Pfad Beschreibung +++ '''/etc/logwatch/''' Dieses Verzeichnis enthält die benutzerdefinierte Konfiguration. Dieses Verzeichnis enthält die gleiche Struktur wie '''/usr/share/logwatch'''. +++ '''/usr/share/logwatch/''' Hier befindet sich die Standardkonfiguration. Diese sollte nicht editiert werden. +++ '''/usr/share/logwatch/default.conf/''' Konfiguration der von Haus aus in Logwatch integrierten Dienste. +++ '''/usr/share/logwatch/dist.conf/''' Konfiguration der speziell für Ubuntu hinzugefügten Dienste. +++ '''/usr/share/logwatch/scripts/''' Perl-Skripte zum Verarbeiten der Logfiles. }}} In den '''*.conf'''-Verzeichnissen befinden sich noch je zwei weitere Verzeichnisse namens '''logfiles''' und '''services'''. Im ersten wird das Logfile definiert, im letzteren die Dienste. Möchte man nun einen eigenen Dienst konfigurieren, erstellt man – falls nicht vorhanden – diese Verzeichnisstruktur unter '''/etc/logwatch/''' und legt dort das Perl-Skript und die Konfigurationsdateien ab. Es empfiehlt sich, einen bereits existierenden Dienst als Vorlage zu nutzen. = Links = * [sourceforge:logwatch:Projektseite] {en} * [:Logdateien:] * [:Serverdienste:] {Übersicht} Übersichtsseite #tag: System, Sicherheit, Shell, Server