policyd-weight: Score-basierte Spamabwehr für Postfix

Es ist immer wieder das gleiche: Sobald man denkt, dass man das System perfekt eingerichtet hat, bekommt/ findet man gleich mehrere Hinweise, die einen daran zweifeln lässt.

Ausgangslage

Bei vielen, die sich halbwegs um einen spamgeschützten Postfix-Mailserver kümmern, wird die Konfiguration ungefähr so aussehen:


[...]
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
reject_invalid_hostname
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_sender_domain
reject_unknown_recipient_domain
reject_rbl_client dnsbl.ahbl.org
reject_rbl_client cbl.abuseat.org
reject_rbl_client sbl-xbl.spamhaus.org
reject_rbl_client dul.dnsbl.sorbs.net
reject_rbl_client bl.spamcop.net
check_policy_service inet:127.0.0.1:60000
reject_unknown_client
warn_if_reject reject_unknown_hostname
permit
[...]

Anmerkung: Diese Konfiguration hatte ich bereits hier gepostet, wurde von mir nun aber mehrfach verfeinert (siehe weiter unten).

Wie man sehen kann, sind mehrere RBL-Checks (Realtime-Blackhole-List) in der Konfiguration, welche bei jedem SMTP-Connect von anderen Mailservern überprüft werden und bei einem positiven Treffer sofort zum REJECT führen. Dies hat zwar funktioniert, birgt aber die Gefahr, dass man einen legitimen Mailserver ablehnt, weil er durch einen Fehler in einer der RBL landete.

Besser wäre es also doch, wenn man nachschauen könnte, ob der Mailserver in mehr als einer dieser RBLs steht. Mit Boardmitteln von Postfix ist dies vorerst nicht möglich.

Einführung in policyd-weight

Hier kommt policyd-weight als policy-Server ins Spiel und bietet folgende Zusatzfunktionen in der Standardkonfiguration an (Auszug von der Website):

  • Score-basierte Auswertung von RBL/RHSBL
  • Score-basierte Auswertung der Beziehung und Korrektheit von DNS-Einträgen, HELO und MAIL-FROM
  • Caching von a) DNS-Request und b) Score-Ergebnissen (= Beschleunigung und weniger Traffic)
  • eigene, schnelle DNS-Lookup.Routine
  • frei konfigurierbare Scores und RBLs (sinnvolle Standardwerte bereits enthalten)
  • keine Datenbank-Abhängigkeit
  • Einrichtung auch nur für eine Teilmenge von Mails/Mailservern nutzbar (via postfix restriction classes)

Policyd-weight arbeitet als Policy-Server mit Postfix zusammen und entgegen z.B. AMAViS noch auf der Ebene des SMTP-Connects und ist daher in der Lage, Postfix einen REJECT der Verbindung zu empfehlen und die Mail erst gar nicht anzunehmen zu lassen. (Dies ist auch im Hinblick auf die Rechtslage ein wichtiger Unterschied.)

Diese Vorteile sprechen ja deutlich für den Einsatz von policyd-weight und daher nahm ich mir auch gleich die Installation vor, welche im Folgenden beschreiben werde.

Installation

Die Installation gestaltet sich Debian-typisch wieder ganz einfach, denn es gibt bereits ein Installationspaket.

aptitude install policyd-weight

Nach der Installation kann man den Dienst theoretisch sofort mittels

/etc/init.d/policyd-weight start

starten, denn die Standardkonfiguration ist bereits sehr gut.

Die Einbindung in Postfix erfolgt in der main.cf innerhalb der smtpd_recipient_restrictions:


smtpd_recipient_restrictions=
[...]
reject_unauth_destination
[...]
check_policy_service inet:127.0.0.1:12525
[...]
permit 

ACHTUNG: Bitte nicht die Zeile reject_unauth_destination VOR check_policy_service vergessen, denn sonst wird der Mailserver zu einem Open Relay.

Noch schnell abspeichern und Postfix die neue Konfiguration einlesen lassen:

/etc/init.d/postfix reload

Fertig! Von nun an wird postfix ankommende Verbindungen durch policyd-weight überprüfen lassen.

Anpassungen

Auch wenn die Standardkonfiguration bereits sehr gut ist, möchte man vielleicht doch noch einige Anpassungen vornehmen.

Da bei der Installation eher Debian-untypisch keine Konfigurationsdatei erstellt wird, muss man diese noch anlegen. Standardmäßig sucht policyd-weight die Datei /etc/policyd-weight.conf. Nun kann man entweder die Datei dort anlegen oder policyd-weight mit dem Startparameter ‘-f /path/to/policyd-weight.conf’ den Ort der eigenen Konfiguration übergeben.

In diesem Beispiel verändere ich den Port auf dem der daemon lauscht:

edi /etc/policyd-weight.conf

Dort wird einfach folgende Zeile eingefügt:

my $TCP_PORT = 60001;

Abspeichern und policyd-weight neustarten.

/etc/init.d/policyd-weight restart

Anmerkung: Bei Ändern des Ports muss natürlich auch die Zeile in der main.cf von Postfix angepasst werden!

Um einen Überblick über alle Konfigurationsparameter zu sehen kann man auch policyd-weight eine Beispielkonfiguration erstellen lassen (Achtung: Eine evtl. vorhandene Config würde überschrieben werden!):

policyd-weight defaults > /etc/policyd-weight.conf

Dies ist zwar ganz interessant, aber nicht unbedingt nötig und auch etwas unperformanter beim Start des Dienstes, denn sämtliche Parameter werden doppelt geladen.

Nun kann man eigentlich nur das Log beobachten, am besten mit pflogsumm, um die evtl. Notwendigkeit der Manipulation der Standard-Regeln zu erkennen. Bisher war das bei mir aber noch nicht der Fall.

Fragen? Probleme? Immer her damit…

Nachtrag

Die weiter oben im Text versprochene neue Version der Konfiguration von Postfix ist in diesem Artikel zu finden, da ich dazu noch kurze Erläuterungen geben will und es hier etwas OT wäre.

3 Gedanken zu „policyd-weight: Score-basierte Spamabwehr für Postfix“

  1. Pingback: WE ARE ROOT

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *