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)