Sender Policy Framework (SPF) mit Postfix
Ich habe mich echt lange davor gedrückt mit endlich mal richtig mit SPF (und DKIM, dazu aber ein andermal mehr) zu beschäftigen. Heute habe ich es dann endlich gemacht und er hat gar nicht gebohrt es war verblüffend einfach und schnell gemacht.
SPF ist dazu da einem empfangenden Mailsystem eine Möglichkeit zu geben festzustellen ob der einliefernde Server vom Domaininhaber überhaupt für den Mailversand vorgesehen wurde.
Damit das klappt muss der Domaininhaber einen TXT-Record im DNS anlegen. Dieser legt dann fest, welche Mailserver für die entsprechende Domains für den Mailversand freigegeben sind. Schickt nun ein anderer Mailserver eine Mail im Namen unter Verwendung dieser Domain kann der Empfänger davon ausgehen dass es sich um SPAM handelt.
Den nötigen TXT-Record kann man sich mittels eines Generators erstellen lassen, z.B.: http://www.spf-record.de/generator
Der Record für 21×9.org sieht wie folgt aus:
v=spf1 mx a ip4:89.238.78.112/29 -all
Das v=spf1
dient nur zur Identifikation des Records. a
und mx
erlauben den Versand über die IP/den Hostnamen des A- und MX-Records. Zusätzlich ist noch meine IP-Range (ip4
) angegeben, so muss ich nicht daran denken den Eintrag zu ändern, sollte ich den Mailserver mal auf eine andere IP legen wollen. -all
letztlich gibt an dass nicht-konforme Mails abgewiesen werden. Alternativ könnte ~all
genutzt werden. In diesem Fall werden nicht konforme Mails nur markiert aber nicht verworfen.
Hat man seinen SPF-String zusammengestellt geht man damit zu seinem Domainverwalter und trägt diesen als TXT-Record für die entsprechende Domain im DNS ein. Wie das geht ist von Anbieter zu Anbieter sehr unterschiedlich. Einige Anbieter erlauben auch, neben dem TXT-Record, direkt einen Record vom Typ SPF anzulegen, in diesem Fall sollte der TXT-Eintrag trotzdem auch vorgenommen werden.
Ob der Eintrag korrekt gesetzt wurde kann mittels dig TXT $domainname
geprüft werden. Eventuell dauert es eine Weile bis der Eintrag angezeigt wird, da sich der Eintrag erst im DNS-System herumsprechen muss. Die genauen Auswirkungen des Eintrags können auch noch einmal mittels http://www.spf-record.de/spf-lookup geprüft werden.
Ab nun sollten fremde Mailserver, sofern sie SPF nutzen, entsprechend auf gefälschte Mails reagieren. Damit unser Mailserver dies ebenfalls tut sind noch ein paar weitere Schritte nötig.
Zunächst muss das Paket postfix-policyd-spf-python
installiert werden:
apt-get install postfix-policyd-spf-python
Wer SpamAssassin nutzen sollte in der Datei /etc/postfix-policyd-spf-python/policyd-spf.conf
folgende Anpassungen vornehmen:
HELO_reject = False
Mail_From_reject = False
Dadurch setzt policyd-spf nur entsprechende Header, die SpamAssassin auswerten kann, blockt Mails aber nicht selbst ab. Die gleichen Settings kann man auch nutzen wenn man erst einmal die Auswirkungen von SPF in seinen Logfiles sehen, aber Mails noch direkt nicht ablehnen, möchte.
Anschließend muss die Postfix-Konfiguration mittels /etc/postfix/master.cf
angepasst werden. An das Ende der Datei wird der folgende Eintrag eingefügt:
policyd-spf unix – n n – 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Weiter geht es in /etc/postfix/main.cf
. Hier wird zunächst folgende neue Zeile eingefügt:
policyd-spf_time_limit = 3600
Der bestehende Eintrag smtpd_recipient_restrictions
wird um die folgende Zeile erweitert:
check_policy_service unix:private/policyd-spf
Wichtig: Die Zeile muss unterhalb des (hoffentlich) bereits bestehenden Eintrags reject_unauth_destination
eingefügt werden.
Abschließend wird postfix neu gestartet:
systemctl restart postfix
Eingehende Mails sollten ab nun einen Header Received-SPF
enthalten. Im Postfix-Logfile sollten Meldungen von policyd-spf
enthalten sein, die Auskunft über den SPF-Status der eingehenden Mails geben.
Wie in der Einleitung oben schon angedeutet wird es im nächsten Artikel dann um DKIM (DomainKeys Identified Mail) gehen.