2017-Jan-22, Postfix, SPF, DKIM & DMARC
Nach dem mein Mailserver einging, habe ich 4h benötigt einen neuen aufzusetzen. Inklusive TLS, SPF und DKIM. Was da noch fehlte war etwas gegen Spam (Greylisting, SPF), aber inzwischen ist auch das umgesetzt.
Besonders für das nächste Mal oder für Leute, die eine schnelle Anleitung haben wollen, ein paar Notizen.
Postgrey vs Postscreen: Nicht lange nachdenken, Postscreen. ;)
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/PATH/HOST.crt
smtpd_tls_key_file = /etc/ssl/PATH/HOST.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_loglevel = 1
smtp_tls_loglevel = 1
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_auth_only = yes
tls_ssl_options = NO_COMPRESSION
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3
lmtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_ciphers=high
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
Man kann natürlich auch LMTP verwenden, was sich in Multiserverumgebungen eventuell anbietet.
In Dovecot muss man dafür den LMTP-Server einschalten:
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
Und in Postfix statt mailbox_command
mailbox_transport
verwenden:
mailbox_transport = lmtp:unix:private/dovecot-lmtp
Dies hat noch weitere nette Eigenschaften. ;)
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_reverse_client_hostname,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
check_policy_service unix:private/policy-spf,
reject_rbl_client ix.dnsbl.manitu.net
# postscreen
postscreen_access_list = permit_mynetworks,
cidr:/etc/postfix/postscreen_access.cidr
postscreen_pipelining_enable = yes
# SPF
policy-spf_time_limit = 3600s
# DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891
OpenDKIM via Unix-Socket hat bisher bei mir nicht richtig funktioniert.
Vielleicht ein chroot in postfix? TODO.
Wäre praktisch, wenn OpenDKIM über postmaster gestartet werden könnte; dann könnte es bereits gelöst sein.
Oder es reicht das Socket in /var/spool/postfix/public
zu erstellen.
smtp inet n - - - 1 postscreen -o soft_bounce=yes
smtpd pass - - - - - smtpd -o syslog_name=postfix/smtps
dnsblog unix - - - - 0 dnsblog
tlsproxy unix - - - - 0 tlsproxy
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o tls_preempt_cipherlist=yes
policy-spf unix - n n - - spawn user=nobody argv=/usr/bin/policyd-spf