Der alte Server war dann doch etwas langsam, daher der Umzug auf neue Hardware. Mit dem Umzug galt es auch den bisherigen IMAP Server (cyrus) durch dovecot zu ersetzen. Soweit der Vorsatz, die Umsetzung war dann weitaus schwieriger…
Setup
Neben der Grundfunktionalität (Mails empfangen und senden) sollte der Mailserver wenigstens folgendes können:
- DKIM zur Authentifizierung
- SPF
- Greylisting
- spamassassin Unterstützung
- Volltextsuche über IMAP
- Mehrere virtuelle Domains
- Weiterleitungen
- Mehrere Benutzer für IMAP/SMTP
- TLS Unterstützung
Vorarbeiten
- MX-Record im DNS einrichten: Der MX Eintrag verweist bei der Domain auf mail.ideas-in-logic.de als alleiniger Eintrag. Wichtig ist, das dieser Name einen eigenen A-Record bekommt. Ein CNAME für mail.elektrowolle.de wird von einigen Mailservern abgelehnt.
ideas-in-logic.de. 3600 IN MX 100 mail.ideas-in-logic.de. mail.ideas-in-logic.de. 3600 IN A 185.11.138.5
- SPF im DNS eintragen: über SPF gibt es zwar einige Diskussionen über die Sinnhaftigkeit, aber mir erscheint es sinnvoll, die zulässigen Mailserver bekannt zu geben:
ideas-in-logic.de. 3233 IN TXT "v=spf1 mx a ip4:185.11.138.5 ?all"
- PTR beim Provider für den MX eintragen:
$ host 185.11.138.5 5.138.11.185.in-addr.arpa domain name pointer mail.ideas-in-logic.de
Installation unter Debian
Folgende Pakete sind unter debian mindestens notwendig:
apt-get update apt-get install dovecot-core dovecot-imapd dovecot-lmtpd dovecot-managesieved dovecot-sieve postfix postgrey spamass-milter spamassassin spamc libmail-dkim-perl libopendkim9 opendkim openssl fail2ban
Benutzer einrichten für die einzelnen Hilfssysteme:
useradd -g mail -d /home/vmail -m vmail passwd -l vmail useradd -s /bin/false -m spamfilter passwd -l spamfilter useradd -g nogroup -s /bin/false -d /var/lib/spamass-milter -m spamass-milter passwd -l spamass-milter
TLS einrichten
Zunächst brauchen wir ein public-/private Key Paar für den Server. Dies kann mit openssl erzeugt werden:
> mkdir -p /etc/ssl/private/ > openssl req -nodes -new -newkey rsa:2048 -sha256 -out /etc/ssl/private/ideas-in-logic.de.csr -keyout /etc/ssl/private/ideas-in-logic.de-private-key.pem -subj '/C=DE/ST=Hessen/L=City/O=Ideas In Logic GbR/CN=ideas-in-logic.de/emailAddress=hostmaster@ideas-in-logic.de'
Wichtig ist dabei, dass der Eintrag bei CN mit dem Domainnamen übereinstimmt! Die hierbei erzeugte .csr kann dann von einer beliebigen Zertifizierungsstelle signiert werden. Für die meisten Zwecke reicht ein kostenloses Zertifikat bei StartSSL, hierfür muss aber bereits der Mailempfang für hostmaster oder postmaster funktionieren. StartSSL verlangt zusätzlich zu dem Domainnamen einen FQDN. Hier bietet sich der Name des MX-Servers (mail.ideas-in-logic.de) an. Die Installation geht davon aus, dass das Zertifikat mit allen evtl. vorhandenen Zwischenzertifizierungsstellen in der Datei /etc/ssl/private/ideas-in-logic.de.chain.crt.pem liegt.
Um Angriffe auf die Verschlüsselung zu verhindern sowie Perfect Forward Secrecy zu unterstützen sollten eigene Diffie-Hellman Parameter generiert werden:
openssl dhparam -out /etc/ssl/private/dhparams.pem 2048
Das StartSSL-Zertifikat kann auch gleichzeitig für den Webserver eingesetzt werden und schneidet bei https://www.ssllabs.com/ssltest/index.html gar nicht so schlecht ab:
Dovecot einrichten
Benutzerkonfiguration in /etc/dovecot/conf.d/10-auth.conf:
auth_mechanisms = plain login !include auth-passwdfile.conf.ext
Anmeldekonfiguration in /etc/dovecot/conf.d/auth-passwdfile.conf.ext:
passdb {
driver = passwd-file
args = scheme=plain username_format=%u /etc/dovecot/users
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%u
}
Anlegen neuer Benutzer in der Datei /etc/dovecot/users mit:
> echo NeuerUserName:`doveadm pw -s SSHA256` >> /etc/dovecot/users
SSL-Einstellungen in /etc/dovecot/conf.d/10-ssl.conf (siehe https://weakdh.org/sysadmin.html):
ssl_cert = </etc/ssl/private/ideas-in-logic.de.chain.crt.pem ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl_dh_parameters_length = 2048 ssl_key = </etc/ssl/private/ideas-in-logic.de-private-key.pem ssl_prefer_server_ciphers = yes ssl_protocols = !SSLv2 ssl = required
Mail Einstellungen in /etc/dovecot/conf.d/10-mail.conf:
mail_location=maildir:/home/vmail/%u
namespace inbox {
inbox = yes
}
mail_plugins = fts fts_squat
Generelle Service Einstellungen in /etc/dovecot/conf.d/10-master.conf:
default_process_limit = 100
default_client_limit = 1000
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 0
}
}
service lmtp {
unix_listener lmtp {
mode = 0666
user = postfix
group = postfix
}
inet_listener lmtp {
address = 127.0.0.1
port = 24
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
}
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
service auth-worker {
}
service dict {
unix_listener dict {
}
}
Automatische Anlage neuer Mailboxen in /etc/dovecot/conf.d/15-lda.conf:
lda_mailbox_autocreate = yes
protocol lda {
}
Workaround für die Suchfunktion auf dem iPhone in /etc/dovecot/conf.d/20-imap.conf:
protocol imap {
mail_max_userip_connections = 80
}
Benutzername ohne Domain in /etc/dovecot/conf.d/20-lmtp.conf:
auth_username_format = %n
protocol lmtp {
}
Automatische Volltextsuche in /etc/dovecot/conf.d/90-plugin.conf:
plugin {
fts = squat
fts_autoindex = yes
}
Sieve-Unterstützung in /etc/dovecot/conf.d/90-sieve.conf:
plugin {
sieve_before = /home/vmail/sieve/spam-global.sieve
sieve_dir = /home/vmail/%d/%n/sieve/scripts/
sieve = /home/vmail/%d/%n/sieve/active-script.sieve
}
Spam-Mails auf dem Server automatisch in den Ordner “Spam” verschieben (/home/vmail/sieve/spam-global.sieve):
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Spam";
}
Mit diesen Einstellungen sollte dovecot nun neu gestartet werden:
# /etc/init.d/dovecot restart
Dovecot sollte die Ports 143 (imap), 993 (imaps) und 4190 (sieve) öffnen (auf allen Interfaces) sowie Port 24 (lmtp) auf dem localhost Interface:
# netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:24 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:4190 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN
Ob die TLS-Verbindung funktioniert, kann mit openssl getestet werden:
# echo | openssl s_client -connect localhost:993 # echo | openssl s_client -connect localhost:143 -starttls imap # echo | openssl s_client -connect localhost:4190 -starttls smtp
Alle drei Kommandos sollten das Zertifikat des Servers ausgeben.
Infos zu dovecot: https://thomas-leister.de/mailserver-debian-stretch/, http://wiki.dovecot.org/Authentication/PasswordSchemes, http://wiki.dovecot.org/AuthDatabase/PasswdFile, http://wiki.dovecot.org/UserDatabase/Static
Postfix einrichten
In der /etc/postfix/main.cf sollten folgende Einträge gemacht werden:
smtpd_banner = mail.ideas-in-logic.de ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = mail.ideas-in-logic.de
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
milter_protocol = 2
milter_default_action = accept
mydomain=localhost
mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp
maps_rbl_domains = blackholes.mail-abuse.org, bl.spamcop.net, inputs.orbz.org, outputs.orbz.org, proxies.blackholes.easynet.nl, zombie.dnsbl.sorbs.net, cbl.abuseat.org
# smtpd_client_restrictions = sleep 5, permit_sasl_authenticated, permit_mynetworks, reject_rbl_client proxies.blackholes.easynet.nl, reject_rbl_client zombie.dnsbl.sorbs.net, reject_rbl_client cbl.abuseat.org, check_policy_service inet:127.0.0.1:10023, permit
smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_rbl_client proxies.blackholes.easynet.nl, reject_rbl_client zombie.dnsbl.sorbs.net, reject_rbl_client cbl.abuseat.org, check_policy_service inet:127.0.0.1:10023, permit
smtpd_helo_required = yes
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated
reject_unauth_destination,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_rbl_client cbl.abuseat.org,
permit
# virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps=hash:/etc/postfix/virtual
virtual_alias_maps=hash:/etc/postfix/virtual_alias
virtual_mailbox_domains=ideas-in-logic.de
#### Versand über LMTP von dovecot
mailbox_transport=lmtp:inet:localhost
transport_maps = hash:/etc/postfix/transport
#### SASL Einstellungen
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
message_size_limit=20480000
smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem
smtpd_tls_eecdh_grade = strong
tls_preempt_cipherlist = yes
smtpd_tls_protocols = !SSLv2
smtpd_tls_mandatory_ciphers=high
smtpd_tls_exclude_ciphers=aNULL,MD5,RC4,DES
smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_auth_only = yes
smtpd_tls_cert_file=/etc/ssl/private/ideas-in-logic.de.chain.crt.pem
smtpd_tls_key_file=/etc/ssl/private/ideas-in-logic.de-private-key.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_auth_only = yes
smtpd_milters = inet:localhost:12301,unix:/spamass/spamass.sock
non_smtpd_milters = inet:localhost:12301
milter_connect_macros = j {daemon_name} v {if_name} _
milter_default_action = accept
Der Aufbau geht davon aus, dass die Mails über greylisting auf Port 10023 sowie DKIM über Port 12301 gefiltert werden.
Die restliche Konfiguration ist in den Dateien /etc/postfix/transport, /etc/postfix/virtual/, /etc/postfix/virtual_alias sowie /etc/postfix/mime_header_checks.regexp:
> cat /etc/postfix/transport # Jeder IMAP Benutzer, der lokal zugestellt werden soll muss hier eingetragen werden NeuerUsername@localhost lmtp:127.0.0.1 > cat /etc/postfix/virtual # Jede Domain, die von uns verwaltet wird, muss hier mit OK aufgeführt werden meine-andere-domain.de OK meine-domain.de OK > cat /etc/postfix/virtual_alias # Jede Emailadresse, die von außen erreichbar sein soll, bekommt einen Alias auf den Localhost Benutzer. Die abuse, hostmaster und postmaster Adressen müssen nach RFC 2142 vorhanden sein abuse@meine-domain.de wolle@localhost webmaster@meine-domain.de wolle@localhost hostmaster@meine-domain.de wolle@localhost postmaster@meine-domain.de wolle@localhost # abuse@meine-andere-domain.de wolle@localhost webmaster@meine-andere-domain.de wolle@localhost hostmaster@meine-andere-domain.de wolle@localhost postmaster@meine-andere-domain.de wolle@localhost > cat /etc/postfix/mime_header_checks.regexp # Optionales Verbot für den Versand von den üblichen Binärdaten # /name=[^>]*\.(bat|chm|cmd|com|exe|hta|jse|scr|pif|vbe|vbs|vxd)/ # REJECT Rule #666 We do not like Windows executables for security reason. Please do not send us executables. Thank you. > postmap virtual transport virtual_alias # (Neu bauen der .db Dateien) > /etc/init.d/postfix reload
Die Postfix Konfiguration ist damit fast vollständig. Offen ist nur noch die Signatur mittels OpenDKIM.
Weitere Infos zu Postfix: http://www.stefan-seelmann.de/wiki/mailserver-postfix-dovecot, http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL
OpenDKIM konfigurieren
Die Konfiguration selbst liegt unter /etc/opendkim.conf und wird wie folgt geändert:
Syslog yes UMask 002 OversignHeaders From AutoRestart Yes AutoRestartRate 10/1h UMask 002 Syslog yes SyslogSuccess Yes LogWhy Yes Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 UserID opendkim:opendkim Socket inet:12301@localhost
In der Datei /etc/opendkim/TrustedHosts werden alle Hosts aufgeführt, deren Emails signiert werden sollen. Üblicherweise sind das nur wir selbst:
> cat /etc/opendkim/TrustedHosts 127.0.0.1 localhost mail.ideas-in-logic.de
Nun können die Schlüssel für unsere Domains generiert werden:
# mkdir -p /etc/opendkim/keys/ideas-in-logic.de # cd /etc/opendkim/keys/ideas-in-logic.de # opendkim-genkey --domain=example.com --selector=mail --verbose # chown -R opendkim:opendkim /etc/opendkim # chmod go-rwx -R /etc/opendkim
Die Schlüssel müssen jetzt nur noch in der KeyTable und SigningTable eingetragen werden:
> cat SigningTable *@ideas-in-logic.de mail._domainkey.ideas-in-logic.de > cat KeyTable mail._domainkey.ideas-in-logic.de ideas-in-logic.de:mail:/etc/opendkim/keys/ideas-in-logic.de/mail.private
Der Eintrag des öffentlichen Schlüssels ist in der .txt Datei unter “/etc/opendkim/keys/ideas-in-logic.de/mail.txt” abgelegt. Dieser Eintrag wird im nächsten Schritt benötigt.
Weitere Infos zu openDKIM unter http://edoceo.com/howto/opendkim und http://www.opendkim.org/docs.html
DNS anpassen für DKIM und DMARC
Damit andere Mailserver prüfen können, ob die Mail auch tatsächlich von unserem Mailserver stammt, muss der obige öffentliche Schlüssel im DNS eingetragen werden:
> dig mail._domainkey.ideas-in-logic.de txt mail._domainkey.ideas-in-logic.de. 3600 IN TXT "v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0mN1vza/Yq7Ub3ENPbfaxlWDxhiMcQ8UZV/Hur6Jtj6YjE09/+8cfdaicTFxEzOjfbRSVTWJMitEW6jnGj94vj8d+9O1417sislRWEjHdbr2MIzPkb7gqsLGsh+NM2HkBeuViMb0F9UOhTk635MNinDDdcooGvPR4xviAmnMFmQIDAQAB
Für das Reporting von Spam gehört noch ein DMARC Eintrag ins DNS:
> dig _dmarc.ideas-in-logic.de txt _dmarc.ideas-in-logic.de. 3600 IN TXT "v=DMARC1\; p=none\; sp=reject\; rua=mailto:postmaster@ideas-in-logic.de"
Infos zu DMARC von: http://blog.returnpath.com/reading-your-first-dmarc-reports/ und https://support.google.com/a/answer/2466563?hl=de
Letzte Anpassungen
/etc/default/spamass-milter Einstellungen prüfen:
OPTIONS="-u spamass-milter -m -I -- -U /var/run/spamassassin/spamd.sock" SOCKET="/var/spool/postfix/spamass/spamass.sock" SOCKETOWNER="postfix:postfix" SOCKETMODE="0660"
/etc/default/spamassassin Einstellungen prüfen:
ENABLED=1 OPTIONS="-x --virtual-config-dir=/var/lib/spamassassin/%u/spamassassin -c -u spamd --max-children 2 --socketpath=/var/run/spamassassin/spamd.sock --socketowner=spamd --socketgroup=spamd --socketmode=0660" PIDFILE="/var/run/spamd.pid" CRON=1
/etc/default/postgrey:
POSTGREY_OPTS="--inet=10023 --delay=60"
Wenn alles fertig ist (in der Zwischenzeit ist die TTL für die DNS Einträge abgelaufen…) kann der Mailserver getestet werden über:
- mxtoolbox
- Per Mail an check-auth@verifier.port25.com über den Service von https://www.port25.com/support/authentication-center/email-verification/
Update 2018-04-20:
Greylisting habe ich mittlerweile deaktiviert, es machte keine Unterschied, was das Spam-Aufkommen anging. Stattdessen kommt postscreen zum Einsatz. Ferner ist die Umstellung auf DNSSEC abgeschlossen und DANE wird nun für die meisten Provider erzwungen.
Kleine Stolperfallen:
- T-Online Zertifikat wurde nicht validiert: smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt siehe https://adminforge.de/mailserver/mta/fix-postfix-tls-error-untrusted-issuer/
- tls_policy-dane Liste habe ich bislang nur hier https://github.com/csware/postfix-tls-policy gefunden.
- dnssec muss lokal funktionieren, am einfachsten unbound installieren.
- TLSA Records sowohl für das Server-Zertifikat als auch die letsencrypt Intermediate CA installieren, siehe auch: https://forum.netcup.de/sonstiges/smalltalk/8361-anleitung-dane-tlsa-mit-letsencrypt/
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
default_transport = dane
disable_vrfy_command = yes
header_checks = regexp:/etc/postfix/header_checks
inet_interfaces = all
inet_protocols = ipv4
mailbox_size_limit = 0
mailbox_transport = lmtp:unix:private/dovecot-lmtp
message_size_limit = 30720000
milter_connect_macros = j {daemon_name} v {if_name} _
milter_default_action = tempfail
milter_header_checks = regexp:/etc/postfix/header_checks
milter_protocol = 2
mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp,
regexp:/etc/postfix/header_checks
mydestination = localhost
mydomain = localhost
myhostname = ideas-in-logic.de
mynetworks =
127.0.0.0/8,134.0.25.240/32,185.11.138.5/32,192.86.51.16/32,193.242.210.202/32,185.11.139.181/32
myorigin = ideas-in-logic.de
non_smtpd_milters = unix:/opendkim/opendkim.sock,unix:/opendmarc/opendmarc.sock
policy-spf_time_limit = 3600s
postscreen_access_list = permit_mynetworks,
cidr:/etc/postfix/postscreen_spf_whitelist.cidr,
cidr:/etc/postfix/postscreen_spf_blacklist.cidr
postscreen_bare_newline_action = ignore
postscreen_bare_newline_enable = no
postscreen_bare_newline_ttl = 30d
postscreen_blacklist_action = ignore
postscreen_cache_cleanup_interval = 12h
postscreen_cache_map = btree:$data_directory/postscreen_cache
postscreen_cache_retention_time = 7d
postscreen_client_connection_count_limit = $smtpd_client_connection_count_limit
postscreen_command_count_limit = 20
postscreen_command_filter =
postscreen_command_time_limit = ${stress?10}${stress:300}s
postscreen_disable_vrfy_command = $disable_vrfy_command
postscreen_discard_ehlo_keyword_address_maps =
$smtpd_discard_ehlo_keyword_address_maps
postscreen_discard_ehlo_keywords = $smtpd_discard_ehlo_keywords
postscreen_dnsbl_action = enforce
postscreen_dnsbl_sites = zen.spamhaus.org*2 bl.spamcop.net*1 cbl.abuseat.org*1
multi.uribl.com*1 multi.surbl.org*1
postscreen_dnsbl_threshold = 2
postscreen_dnsbl_ttl = 1h
postscreen_enforce_tls = $smtpd_enforce_tls
postscreen_use_tls = $smtpd_use_tls
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_dns_support_level = dnssec
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_cert_file = /etc/letsencrypt/live/ideas-in-logic.de/fullchain.pem
smtp_tls_key_file = /etc/letsencrypt/live/ideas-in-logic.de/privkey.pem
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy-dane
smtp_tls_security_level = dane
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtp_use_tls = yes
smtpd_banner = mail.ideas-in-logic.de ESMTP $mail_name (Debian/GNU)
smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks,
reject_unknown_client, permit
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, reject_invalid_hostname,
reject_unknown_hostname, reject_non_fqdn_hostname
smtpd_milters =
unix:/opendkim/opendkim.sock,unix:/opendmarc/opendmarc.sock,unix:/spamass/spamass.sock
smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch,
permit_sasl_authenticated, reject_unauth_destination,
reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname,
reject_non_fqdn_sender, reject_unknown_sender_domain,
reject_non_fqdn_recipient, reject_unknown_recipient_domain,
check_policy_service unix:private/policy-spf, permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = hash:/etc/postfix/controlled_envelope_senders
smtpd_sender_restrictions = texthash:/etc/postfix/access
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/ideas-in-logic.de/fullchain.pem
smtpd_tls_dh1024_param_file = /etc/postfix/dh_2048.pem
smtpd_tls_eecdh_grade = strong
smtpd_tls_exclude_ciphers = aNULL,MD5,RC2,RC4,SEED,IDEA,DES
smtpd_tls_key_file = /etc/letsencrypt/live/ideas-in-logic.de/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, SEED,
IDEA, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5,
CBC3-SHA
smtpd_tls_protocols = !SSLv2
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtpd_use_tls = yes
tls_preempt_cipherlist = yes
virtual_alias_maps = texthash:/etc/postfix/virtual_alias
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains = texthash:/etc/postfix/virtual
virtual_mailbox_maps = texthash:/etc/postfix/virtual
virtual_transport = lmtp:unix:private/dovecot-lmtp
Der Test, ob eine Verbindung zu einem externen Mailserver korrekt validiert werden kann, geht mit Boardmitteln:
posttls-finger -F /etc/ssl/certs/ca-certificates.crt -l dane -c -L verbose,summary ideas-in-logic.de
Das Ergebnis sieht dann wie folgt aus:
root@ideas-in-logic:/etc/postfix# posttls-finger -F /etc/ssl/certs/ca-certificates.crt -l dane -c -L verbose,summary ideas-in-logic.de posttls-finger: initializing the client-side TLS engine posttls-finger: using DANE RR: _25._tcp.mail.ideas-in-logic.de IN TLSA 2 1 1 60:B8:75:75:44:7D:CB:A2:A3:6B:7D:11:AC:09:FB:24:A9:DB:40:6F:EE:12:D2:CC:90:18:05:17:61:6E:8A:18 posttls-finger: using DANE RR: _25._tcp.mail.ideas-in-logic.de IN TLSA 3 1 1 73:58:FB:3C:57:BA:10:6B:2E:B0:11:BE:B5:27:03:0D:68:E7:72:48:71:93:F4:D9:E3:AC:E6:6E:3E:F1:E3:6A posttls-finger: setting up TLS connection to mail.ideas-in-logic.de[185.11.138.5]:25 posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: TLS cipher list "aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH:!aNULL" posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: depth=1 matched trust anchor public-key sha256 digest=60:B8:75:75:44:7D:CB:A2:A3:6B:7D:11:AC:09:FB:24:A9:DB:40:6F:EE:12:D2:CC:90:18:05:17:61:6E:8A:18 posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: depth=0 chain is trust-anchor signed posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: depth=1 verify=1 subject=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: depth=0 verify=1 subject=/CN=ideas-in-logic.de posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: depth=0 matched end entity public-key sha256 digest=73:58:FB:3C:57:BA:10:6B:2E:B0:11:BE:B5:27:03:0D:68:E7:72:48:71:93:F4:D9:E3:AC:E6:6E:3E:F1:E3:6A posttls-finger: mail.ideas-in-logic.de[185.11.138.5]:25: subject_CN=ideas-in-logic.de, issuer_CN=Let's Encrypt Authority X3, fingerprint=42:19:03:31:D0:F7:92:F1:AD:18:5C:87:CD:DC:00:96:F1:BF:0B:39, pkey_fingerprint=AA:64:43:AA:67:FC:6D:74:3C:64:16:3E:BD:A2:B2:43:4B:1C:80:93 posttls-finger: Verified TLS connection established to mail.ideas-in-logic.de[185.11.138.5]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

