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

Das könnte dich auch interessieren …