Docu review done: Tue 17 Oct 2023 10:50:21 AM CEST
Table of Content
General
Sender Policy Framework (SPF) is an email authentication method designed to detect forging sender addresses during the delivery of the email. SPF alone, though, is limited to detecting a forged sender claim in the envelope of the email, which is used when the mail gets bounced. Only in combination with DMARC can it be used to detect the forging of the visible sender in emails (email spoofing), a technique often used in phishing and email spam.
SPF allows the receiving mail server to check during mail delivery that a mail claiming to come from a specific domain is submitted by an IP address authorized by that domain’s administrators. The list of authorized sending hosts and IP addresses for a domain is published in the DNS records for that domain.
Sender Policy Framework is defined in RFC 7208 dated April 2014 as a “proposed standard”.
Installation
If you are running Debian, you can install the needed packages like this:
$ apt install postfix-policyd-spf-python
Setup
DNS config
To get validate from others, you will need a TXT
DNS record on your side, which can look like this:
TXT @ v=spf1 mx ~all
TXT
indicates this is a TXT record.- Enter
@
in the name field. v=spf1
indicates this is an SPF record and the SPF record version is SPF1.mx
means all hosts listed in the MX records are allowed to send emails for your domain and all other hosts are disallowed.~all
indicates that emails from your domain should only come from hosts specified in the SPF record. Emails that are from other hosts will be flagged as untrustworthy. Possible alternatives are+all
,-all
,?all
, but they are rarely used.
Postfix config
First what you need is to add the SPF policy to the master.cf
of postfix.
Add now the line shown below into your master.cf
(normally added at the bottom of the file).
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Next setup is to modify the main.cf
of postfix.
Here you have to add two new configuration parameters.
smtpd_recipient_restrictions
will alrady have some entries in there, just add therecheck_policy_service unix:private/policyd-spf
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
With the first parameter (policyd-spf_time_limit
) you specify the timeout setting of the sfp agent and with the second one check_policy_service unix:private/policyd-spf
you enable the validation of incoming mails and rejection of unauthorized ones with validation the SPF record
Now it is time to restart the postfix service.