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]