Postfix Überwachung mit Mailgraph und pflogsumm
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
- Mailgraph: http://people.ee.ethz.ch/~dws/software/mailgraph
- pflogsumm: http://jimsun.linxnet.com/postfix_contrib.html
- RRDTool: http://oss.oetiker.ch/rrdtool
- Postfix: http://www.postfix.org