Inhaltsverzeichnis

erweiterte gewichtete Prüfungen mittels policyd-weight

Da wir mit greylisting_mit_postgrey nur die Botnetze erschlagen, setzen wir noch einen weiteren Hebel an, um uns vor ungeliebten Botschaften zu schützen.
Dazu nutzen wir den Policy-Dämon policyd-weight.

Installation

Da es noch kein vorgefertigtes RPM in den einschlägigen RPM-Quellen gibt, welchen wir vertrauen, installieren wir den daemon selbst per Hand.
Wir holen uns also das besagte Perl-Script in der aktuellen Version und speichern es unter /usr/local/sbin und passen die Dateirechte entsprechend an:

wget http://www.policyd-weight.org/policyd-weight
chmod u+rx policyd-weight
mv policyd-weight /usr/local/sbin/

Anschließend ändern wir noch wie auf der policyd-weight homepage angegeben die Variable $LOCKPATH ab.

vim /usr/local/sbin/policyd-weight

...
## cache stuff
my $LOCKPATH          = '/var/run/policyd-weight/'; # must be a directory (add
                                                    # trailing slash)

my $SPATH             = $LOCKPATH.'/polw.sock';     # socket path for the cache
                                                    # daemon. 
...

Für den Betrieb benötigen wir noch einen User polw, den wir mit

useradd -r -s /sbin/false polw
groupadd -r polw

anlegen.
Den ersten Programmstart nehmen wir nun mittels

policyd-weight start

vor. Im Maillog wird uns der Start entsprechend quittiert:

Oct 13 22:41:48 nss postfix/policyd-weight[23123]: policyd-weight 0.1.14 beta-17 started and daemonized. conf:default settings; GID:105 105 EGID:105 105 UID:102 EUID:102; taint mode: 0 

In der Prozessliste finden wir zwei Prozesse, die gestartet wurden:

# ps auxw | grep policyd-weight
polw      3234  0.0  0.6  12756  1652 ?        Ss   Oct06   0:00 policyd-weight (cache)
polw     23123  0.0  3.0  12616  7908 ?        Ss   22:41   0:00 policyd-weight (master)

Mittels lsof können wir nun noch überprüfen, welcher Port von policyd-weight verwendet wird.

# lsof -i :12525
COMMAND     PID USER   FD   TYPE  DEVICE SIZE NODE NAME
policyd-w 23123 polw    4u  IPv4 3539466       TCP localhost.localdomain:12525 (LISTEN)

policyd-weight konfigurieren

Wie auch bei postgrey konfigurieren wir für policyd-weight postfix.
Wir fügen also in unsere /etc/postfix/main.cf folgende Option nach # RBL überprüfen (Kapitel 10.11 Realtime Blackhole Lists) mit ein:

# Policyd-Weight                                        (Kapitel 9.3 policyd-weigt)
        check_client_access hash:/etc/postfix/policyd_weight_client_whitelist
        check_policy_service inet:127.0.0.1:12525,

automatisches Starten des Dienste beim Systemstart

Da bei dem Archiv kein startup-script mit dabei ist, legen wir dies kurzer Hand selbst an:

# vim /etc/init.d/policyd-weight
policyd-weight
#!/bin/sh
#
# chkconfig: 2345 79 31
# description: Postfix Policy Weight Server
#
# processname: policyd-weight
#
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
 
prog=policyd-weight
policydweight=/usr/local/sbin/$prog
 
# Source an auxiliary options file if we have one, and pick up OPTIONS,                                                                                                     
if [ -r /etc/sysconfig/$prog ]; then
    . /etc/sysconfig/$prog
fi
 
start() {
    echo -n $"Starting $prog: "
    $policydweight start
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
    echo -n $"Stopping $prog: "
    $policydweight stop
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
 
restart() {
    stop
    start
}
 
reload() {
    echo -n $"Reloading $prog: "
    $policydweight reload
    RETVAL=$?
    echo
}
 
# See how we were called.
case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    reload)
        reload
    ;;
    *)
        echo $"Usage: $0 {start|stop|restart|reload|}"
        exit 1
esac
 
exit $RETVAL

automatisches Starten des Dienste beim Systemstart

Damit der postgrey-Daemon automatisch bei jedem Systemstart startet, denn ohne laufenden policyd-weight-daemon verweigert nun unser postfix die Annahme der Nachrichten, kann die Einrichtung des Start-Scripte über folgenden Befehle erreicht werden:

# chkconfig policyd-weight on

Die Überprüfungung ob die beiden Dienste (Daemons) postfix und postgrey wirklich bei jedem Systemstart automatisch mit gestartet werden, kann durch folgenden Befehle erreicht werden:

# chkconfig --list | grep post*
postfix         0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus
postgrey        0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus

# chkconfig --list | grep poli*
policyd-weight  0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus

Wichtig sind jeweils die Schalter on bei den Runleveln - 2 3 4 5.

Ausnahmeregelungen für Absendeserver

Leider kommt es auch vor, dass vor allem große Provider hinter ihren MX ein cluster betreiben, die mit wechselnden IP-Adrressen aus einem Pool aufschlagen. Damit können unter Umständen Probleme bei der Bewertung entstehen. Diese schalten wir dann bei Bedarf in der policyd_weight_client_whitelist frei.

vim /etc/postfix/policyd_weight_client_whitelist

# 2008-10-08: 1und1.com (big pool, inserted by Django)
kundenserver.de         OK

Nach dem Verändern der Textdatei müssen wir noch die Informationen in das binäre Datenbankformat überführen. Hierzu nutzen wir postmap:

postmap /etc/postfix/policyd_weight_client_whitelist

erfolgreiche Bewertung einer Anlieferung

Am nachfolgenden Beispiel sehen wir, den erfolgreichen Mailversand nach der Bewertung durch policyd-weight.

Oct 14 22:31:30 nss postfix/smtpd[14044]: connect from www.linuxtv.org[212.227.166.180]
Oct 14 22:31:34 nss postfix/policyd-weight[2715]: decided action=PREPEND X-policyd-weight: using cached result; rate: -7.6; <client=212.227.166.180> <helo=www.linuxtv.org> <from=vdr-bounces+michl=naush.org@linuxtv.org> <to=grossermeister@naush.org>; delay: 1s 
Oct 14 22:31:34 nss postgrey[21879]: action=pass, reason=triplet found, client_name=www.linuxtv.org, client_address=212.227.166.180, sender=vdr-bounces+michl=naush.org@linuxtv.org, recipient=michl@naush.org 
Oct 14 22:31:34 nss postgrey[21879]: cleaning up old logs... 
Oct 14 22:31:34 nss postfix/smtpd[14044]: 31F5E76022D: client=www.linuxtv.org[212.227.166.180]
Oct 14 22:31:34 nss postfix/cleanup[14048]: 31F5E76022D: message-id=<Pine.LNX.4.64.0810142329220.5339@shogun.pilppa.org>
Oct 14 22:31:34 nss postfix/qmgr[1304]: 31F5E76022D: from=<vdr-bounces+michl=naush.org@linuxtv.org>, size=3523, nrcpt=1 (queue active)
Oct 14 22:31:34 nss postfix/smtpd[14044]: disconnect from www.linuxtv.org[212.227.166.180]