Postfix Überwachung mit Mailgraph und pflogsumm

Version 1.0
Author: Falko Timme


Diese Anleitung beschreibt, wie Du Deinen Postfix Mail Server mit den Tools Mailgraph und pflogsumm überwachen kannst. Mailgraph erzeugt tägliche, wöchentliche, monatliche und jährliche Grafiken von gesendeten, empfangenen, bounced und zurückgewiesenen E-Mails sowie Spam und Viren, wenn SpamAssassin und ClamAV in Postfix integriert sind.Auf diese Grafiken kann man mit einem Browser zugreifen. Mit pflogsumm ("Postfix Log Entry Summarizer") können Berichte von Postfix Aktivitäten per E-Mail gesendet werden.

Im Folgenden werde ich beschreiben, wie man Mailgraph und pflogsumm auf Debian Sarge, Ubuntu Dapper Drake (6.06 LTS) und Fedora Core 5 installiert und konfiguriert.Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung hat mein Linux System die IP Adresse 192.168.0.100 und hostet die Webseite http://www.example.com mit dem Dokumenten-Root /var/www/www.example.com/web und einem cgi-bin Verzeichnis von /var/www/www.example.com/cgi-bin. Ich werde die pflogsumm Berichte an die E-Mail Adresse postmaster@example.com senden.

2 Debian Sarge

2.1 Mailgraph

Debian Sarge hat Pakete für Mailgraph und pflogsumm, also installieren wir sie einfach. Wir installieren außerdem rrdtool, das die Daten speichert, die von Mailgraph zum Zeichnen der Grafiken benötigt werden:

apt-get install rrdtool mailgraph

Dir werden ein paar Fragen gestellt:

Should Mailgraph start on boot? Which logfile should be used by mailgraph? Remove RRD files on purge?
Dann taucht diese Frage auf:

Count incoming mail as outgoing mail?

Wenn ein Content-Filter wie amavisd (zum Scannen von Spam und Viren) in Postfix integriert ist (wie in dieser Anleitung: Virtual Users And Domains With Postfix, Courier And MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)), dann antworte No, um zu verhindern, dass Mailgraph Deine E-Mails zählt (da Postfix E-Mails an amavisd weiterleitet, die dann - nach erfolgreichem Scannen - an Postfix zurückgeschickt werden). Wenn Du keinen Content-Filter verwendest, dann antworte mit Yes.

Während der Installation werden die System Startup Links für Mailgraph automatisch erstellt. Mailgraph wird ebenfalls automatisch gestartet, also müssen wir es nicht manuell starten.

Nun müssen wir das mailgraph.cgi Skript (das die Grafiken zeichnet und die Ausgabe für unsere Web Browser erstellt) in das cgi-bin Verzeichnis unserer www.example.com Webseite kopieren:

cp -p /usr/lib/cgi-bin/mailgraph.cgi /var/www/www.example.com/cgi-bin

Das Skript ist bereits ausführbar, also müssen wir es nicht chmoden. Falls Du für die www.example.com Webseite suExec verwendest, musst Du den Besitzer und die Gruppe von mailgraph.cgi ändern.

Richte nun Deinen Browser auf http://www.example.com/cgi-bin/mailgraph.cgi und schon siehst Du einige Grafiken. Natürlich müssen erst ein paar E-Mails durch Dein System bevor Du die ersten Resultate sehen kannst, sei also etwas geduldig.

Nach einiger Zeit könnten Deine Grafiken wie folgt aussehen (die folgende Ausgabe ist benutzerdefiniert, Deine wird also nicht genauso aussehen):


Tägliche Statistiken.


Wöchentliche Statistiken.


Monatliche Statistiken.


Jährliche Statistiken.

Bitte Merke: Mailgraph zeigt Spam und Viren nur dann an, wenn ein Content-Filter wie amavisd-new in Postfix integriert ist, der konfiguriert ist, SpamAssassin und ClamAV zu verwenden um Spam und Viren-Mails zu identifizieren. Wenn Du das nicht tust, wirst Du immer noch Grafiken sehen können, jedoch ohne Spam- und Viren-Bericht.

2.2 pflogsumm

Um pflogsumm zu installieren, führen wir Folgendes aus

apt-get install pflogsumm

Wir möchten, dass pflogsumm täglich von einem Cron Job ausgeführt wird und den Bericht an postmaster@example.com sendet. Daher müssen wir unser System so konfigurieren, dass es eine Mail Log-Datei für 24 Stunden schreibt und danach das nächste Mail Log startet, sodass das alte Mail Log von pflogsumm gelesen werden kann. Dazu konfigurieren wir logrotate (das ist das Programm, das die Log-Dateien unseres Systems rotiert) wie folgt: öffne /etc/logrotate.conf und hänge folgende Zeile hinter der Zeile # system-specific logs may be configured here an:

vi /etc/logrotate.conf

 

/var/log/mail.log {
missingok daily rotate 7 create compress start 0 }

Es gibt ein logrotate Skript in /etc/cron.daily. Dieses Skript wird jeden Tag zwischen 06:00 Uhr und 07:00 Uhr aufgerufen. Mit der soeben vorgenommenen Konfiguration kopiert es die derzeitige Postfix Log /var/log/mail.log nach /var/log/mail.log.0 und komprimiert sie. Die komprimierte Datei wird dann /var/log/mail.log.0.gz sein. Weiterhin wird eine neue, leere /var/log/mail.log erstellt, auf die Postfix dir nächsten 24 Stunden loggen kann.

Nun erstellen wir das Skript /usr/local/sbin/postfix_report.sh das pflogsumm aufruft und veranlasst, den Bericht an postmaster@example.com zu senden:

vi /usr/local/sbin/postfix_report.sh

 

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin gunzip /var/log/mail.log.0.gz pflogsumm /var/log/mail.log.0 | formail -c -I"Subject: Mail Statistics" -I"From: pflogsumm@localhost" -I"To: postmaster@example.com" -I"Received: from www.example.com ([192.168.0.100])" | sendmail postmaster@example.com gzip /var/log/mail.log.0 exit 0

Wir müssen dieses Skript ausführbar machen:

chmod 755 /usr/local/sbin/postfix_report.sh

Dann erstellen wir einen Cron Job, der das Skript täglich um 07:00 Uhr aufruft:

crontab -e

 

0 7 * * * /usr/local/sbin/postfix_report.sh &> /dev/null

Damit wird der Bericht an postmaster@example.com gesendet. So sieht es im E-Mails Client aus:

3 Ubuntu Dapper Drake (6.06 LTS)

3.1 Mailgraph

Um Mailgraph zu installieren, führen wir Folgendes aus

apt-get install rrdtool mailgraph

Ubuntu stellt uns keine Fragen. Dennoch müssen wir differenzieren, ob wir einen Content-Filter wie amavisd in Postfix verwenden oder nicht. Öffne /etc/default/mailgraph:

vi /etc/default/mailgraph

Wenn Du einen Content-Filter wie amavisd verwendest, sollte die Datei folgende Inhalte haben:

MAIL_LOG=/var/log/mail.log
IGNORE_LOCALHOST=true

Wenn nicht, sollte sie wie folgt aussehen:

MAIL_LOG=/var/log/mail.log
IGNORE_LOCALHOST=false

Ubuntu erstellt die System Startup Links für Mailgraph nicht automatisch, also führen wir dies jetzt aus:

update-rc.d mailgraph defaults

Außerdem müssen wir Mailgraph nun starten:

/etc/init.d/mailgraph start

Jetzt müssen wir das mailgraph.cgi Skript (das die Grafiken zeichnet und die Ausgabe für unsere Web Browser erstellt) in das cgi-bin Verzeichnis der www.example.com Webseite kopieren:

cp -p /usr/lib/cgi-bin/mailgraph.cgi /var/www/www.example.com/cgi-bin

Das Skript ist bereits ausführbar, also müssen wir es nicht chmoden. Falls Du für die www.example.com Webseite suExec verwendest, musst Du den Besitzer und die Gruppe von mailgraph.cgi ändern.

Richte nun Deinen Browser auf http://www.example.com/cgi-bin/mailgraph.cgi und schon siehst Du einige Grafiken. Natürlich müssen erst ein paar E-Mails durch Dein System bevor Du die ersten Resultate sehen kannst, sei also etwas geduldig.

3.2 pflogsumm

Der pflogsumm Teil ist genau das gleiche wie bei Debian Sarge:

Um pflogsumm zu installieren, führen wir Folgendes aus

apt-get install pflogsumm

Wir möchten, dass pflogsumm täglich von einem Cron Job ausgeführt wird und den Bericht an postmaster@example.com sendet. Daher müssen wir unser System so konfigurieren, dass es eine Mail Log-Datei für 24 Stunden schreibt und danach das nächste Mail Log startet, sodass das alte Mail Log von pflogsumm gelesen werden kann. Dazu konfigurieren wir logrotate (das ist das Programm, das die Log-Dateien unseres Systems rotiert) wie folgt: öffne /etc/logrotate.conf und hänge die folgende Zeile nach der Zeile # system-specific logs may be configured here an:

vi /etc/logrotate.conf

 

/var/log/mail.log {
missingok daily rotate 7 create compress start 0 }

Es gibt ein logrotate Skript in /etc/cron.daily. Dieses Skript wird täglich zwischen 06:00 Uhr und 07:00 Uhr aufgerufen. Mit der soeben vorgenommenen Konfiguration kopiert es die derzeitige Postfix Log /var/log/mail.log nach /var/log/mail.log.0 und komprimiert sie. Die komprimierte Datei ist dann /var/log/mail.log.0.gz. Weiterhin wird eine neue, leere /var/log/mail.log erstellt, auf die Postfix für die nächsten 24 Stunden loggen kann.

Nun erstellen wir das Skript /usr/local/sbin/postfix_report.sh das pflogsumm aufruft und veranlasst, den Bericht an postmaster@example.com zu senden:

vi /usr/local/sbin/postfix_report.sh

 

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin gunzip /var/log/mail.log.0.gz pflogsumm /var/log/mail.log.0 | formail -c -I"Subject: Mail Statistics" -I"From: pflogsumm@localhost" -I"To: postmaster@example.com" -I"Received: from www.example.com ([192.168.0.100])" | sendmail postmaster@example.com gzip /var/log/mail.log.0 exit 0

Wir müssen dieses Skript ausführbar machen:

chmod 755 /usr/local/sbin/postfix_report.sh

Dann erstellen wir einen Cron Job, der das Skript jeden Tag um 07:00 Uhr aufruft:

crontab -e

 

0 7 * * * /usr/local/sbin/postfix_report.sh &> /dev/null

Damit wird der Bericht an postmaster@example.com gesendet.

4 Fedora Core 5

4.1 Mailgraph

Es ist kein Mailgraph Paket für Fedora Core 5 verfügbar, also müssen wir es mauell installieren. Zuerst müssen wir die Voraussetzungen installieren, die Mailgraph benötigt:

yum install rrdtool rrdtool-perl perl-File-Tail

Dann laden wir die Mailgraph Quellen runter und kopieren die Mailgraph Skripte zu den entsprechenden Orten:

cd /tmp
wget http://people.ee.ethz.ch/~dws/software/mailgraph/pub/mailgraph-1.12.tar.gz
tar xvfz mailgraph-1.12.tar.gz
cd mailgraph-1.12
mv mailgraph.pl /usr/local/bin/mailgraph.pl
mv mailgraph-init /etc/init.d/mailgraph

Nun müssen wir das Mailgraph Init Skript /etc/init.d/mailgraph anpassen:

vi /etc/init.d/mailgraph

Auf Fedora ist das Postfix Mail Log /var/log/maillog, also ändern wir

MAIL_LOG=/var/log/syslog

zu

MAIL_LOG=/var/log/maillog

Dann fügen wir eine weitere Variable /etc/init.d/mailgraph, IGNORE_LOCALHOST hinzu. Falls Du einen Content-Filter wie amavisd in Postfix integriert hast, füge diese Zeile hinzu

IGNORE_LOCALHOST="--ignore-localhost"

zu dem Block, wo die Variablen wie MAIL_LOG definiert sind. Falls Du keinen Content-Filter verwendest, füge stattdessen diese Zeile hinzu:

IGNORE_LOCALHOST=""

Ändere in beiden Fällen

        nice -19 $MAILGRAPH_PL -l $MAIL_LOG -d
--daemon-pid=$PID_FILE --daemon-rrd=$RRD_DIR

zu

        nice -19 $MAILGRAPH_PL -l $MAIL_LOG -d
--daemon-pid=$PID_FILE --daemon-rrd=$RRD_DIR $IGNORE_LOCALHOST

Das endgültige Skript sollte wie folgt aussehen (in diesem Fall mit --ignore-localhost aktiviert):

#!/bin/sh
# $Id: mailgraph-init,v 1.4 2005/06/13 11:23:22 dws Exp $ # example init script for mailgraph # # chkconfig: 2345 82 28 # description: mailgraph postfix log grapher. # # processname: mailgraph.pl # pidfile: /var/run/mailgraph.pid PATH=/bin:/usr/bin MAILGRAPH_PL=/usr/local/bin/mailgraph.pl MAIL_LOG=/var/log/maillog PID_FILE=/var/run/mailgraph.pid RRD_DIR=/var/lib IGNORE_LOCALHOST="--ignore-localhost" case "$1" in 'start') echo "Starting mail statistics grapher: mailgraph"; nice -19 $MAILGRAPH_PL -l $MAIL_LOG -d --daemon-pid=$PID_FILE --daemon-rrd=$RRD_DIR $IGNORE_LOCALHOST ;; 'stop') echo "Stopping mail statistics grapher: mailgraph"; if [ -f $PID_FILE ]; then kill `cat $PID_FILE` rm $PID_FILE else echo "mailgraph not running"; fi ;; *) echo "Usage: $0 { start | stop }" exit 1 ;; esac exit 0

Als Nächstes machen wir das Skript ausführbar, erstellen die entsprechenden System Startup Links und starten Mailgraph:

chmod 755 /etc/init.d/mailgraph
chkconfig --levels 235 mailgraph on
/etc/init.d/mailgraph start

Immer noch im /tmp/mailgraph-1.12 Verzeichnis, packen wir mailgraph.cgi in unser cgi-bin Verzeichnis:

mv mailgraph.cgi /var/www/www.example.com/cgi-bin/

Nun öffnen wir die Datei und passen die Orte der beiden Mailgraph Datenbanken an.

vi /var/www/www.example.com/cgi-bin/mailgraph.cgi

Ändere

my $rrd = 'mailgraph.rrd'; # path to where the RRD database is
my $rrd_virus = 'mailgraph_virus.rrd'; # path to where the Virus RRD database is

zu

my $rrd = '/var/lib/mailgraph.rrd'; # path to where the RRD database is
my $rrd_virus = '/var/lib/mailgraph_virus.rrd'; # path to where the Virus RRD database is

Dann machen wir das Skript ausführbar:

chmod 755 /var/www/www.example.com/cgi-bin/mailgraph.cgi

Falls Du für die Webseite www.example.com suExec verwendest, musst Du den Besitzer und die Gruppe von mailgraph.cgi ändern.

Richte nun Deinen Browser auf http://www.example.com/cgi-bin/mailgraph.cgi und Du solltest schon einige Grafiken sehen. Natürlich müssen erst ein paar E-Mails durch Dein System bevor Du die ersten Resultate sehen kannst, sei also etwas geduldig.

4.2 pflogsumm

Die Schritte weichen nur wenig von denen bei Debian und Ubuntu ab. Der eigentliche Unterschied besteht darin, dass Postfix auf Fedora auf /var/log/maillog loggt und nicht auf /var/log/mail.log (Debian/Ubuntu) (achte auf den Punkt!).

Zuerst installieren wir pflogsumm:

yum install postfix-pflogsumm

Wir möchten, dass pflogsumm täglich von einem Cron Job ausgefürt wird und den Bericht an postmaster@example.com sendet. Daher müssen wir unser System so konfigurieren, dass es eine Mail Log-Datei für 24 Stunden schreibt und danach das nächste Mail Log startet, sodass das alte Mail Log von pflogsumm gelesen werden kann. Dazu konfigurieren wir logrotate (das ist das Programm, das die Log-Dateien unseres Systems rotiert) wie folgt: öffne /etc/logrotate.conf und hänge die folgende Zeile nach der Zeile # system-specific logs may be configured here an:

vi /etc/logrotate.conf

 

/var/log/maillog {
missingok daily rotate 7 create compress start 0 }

Ändere außerdem /etc/logrotate.d/syslog

vi /etc/logrotate.d/syslog

von

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }

zu

/var/log/messages /var/log/secure /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }

Es gibt ein logrotate Skript in /etc/cron.daily. Dieses Skript wird jeden Tag zwischen 06:00 Uhr und 07:00 Uhr aufgerufen. Mit der soeben vorgenommenen Konfiguration kopiert es die derzeitige Postfix Log /var/log/maillog nach /var/log/maillog.0 und komprimiert sie. Die komprimierte Datei ist dann /var/log/maillog.0.gz. Weiterhin wird eine neue, leere /var/log/maillog erstellt, auf die Postfix für die nächsten 24 Stunden loggen kann.

Nun erstellen wir das Skript /usr/local/sbin/postfix_report.sh das pflogsumm aufruft und veranlasst, den Bericht an postmaster@example.com zu senden:

vi /usr/local/sbin/postfix_report.sh

 

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin gunzip /var/log/maillog.0.gz pflogsumm /var/log/maillog.0 | formail -c -I"Subject: Mail Statistics" -I"From: pflogsumm@localhost" -I"To: postmaster@example.com" -I"Received: from www.example.com ([192.168.0.100])" | sendmail postmaster@example.com gzip /var/log/maillog.0 exit 0

Wir müssen dieses Skript ausführbar machen:

chmod 755 /usr/local/sbin/postfix_report.sh

Dann erstellen wir einen Cron Job, der das Sript täglich um 07:00 Uhr aufruft:

crontab -e

 

0 7 * * * /usr/local/sbin/postfix_report.sh &> /dev/null

Damit wird der Bericht an postmaster@example.com gesendet.

5 Links