Wer SSL-Zertifikate von einer anerkannten Certificate Authority besitzt, die auf allen Clients und Servern gültig sind, kann diese benutzen, um nicht nur die Verbindung zwischen Client und Postfix Server, sondern auch die Verbindung zwischen den Mailservern (S2S) abzusichern und zu verschlüsseln.
Die Verschlüsselung des Mailtransports ist das, was auch von United Internet (GMX, Web.de) und der Telekom als „E-Mail made in Germany” beworben wird. Diese Server-2-Server Verschlüsselung kann man problemlos auch auf seinem eigenen Mailserver einrichten, sodass der Server ebenfalls verschlüsselt mit den Mailservern der großen Anbieter kommunizieren kann.
Nochmal zur Erinnerung:
Es handelt sich hier NUR um eine Transportverschlüsselung. Die E-Mails werden nach dem Transport trotzdem wieder in Klartext auf den Mailservern gespeichert. PGP und ähnliche Technik sind immer noch unerlässlich, wenn man wirklich sicher kommunizieren will!
Unter Zuhilfenahme der bettercrypto.org Richtlinien ist bei meinen Servern folgende Konfiguration aktiv, die im Folgenden näher erklärt wird:
##### TLS settings ###### tls_ssl_options = NO_COMPRESSION tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA ### outgoing connections ### smtp_tls_security_level=may smtp_tls_cert_file=/etc/myssl/public-combined.pem smtp_tls_key_file=/etc/myssl/privkey.pem smtp_tls_session_cache_database = btree:${data_directory}/smtpd_scache ### incoming connections ### smtpd_tls_security_level=may smtpd_tls_cert_file=/etc/myssl/public-combined.pem smtpd_tls_key_file=/etc/myssl/privkey.pem smtpd_tls_session_cache_database = btree:${data_directory}/smtp_scache ### Secure outgoing connections only ### # smtp_tls_security_level=encrypt # smtp_tls_cert_file=/etc/myssl/public-combined.pem # smtp_tls_key_file=/etc/myssl/privkey.pem # smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 # smtp_tls_mandatory_ciphers=high # smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache ### Secure incoming connections only ### # smtpd_tls_security_level=encrypt # smtpd_tls_cert_file=/etc/myssl/public-combined.pem # smtpd_tls_key_file=/etc/myssl/privkey.pem # smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 # smtpd_tls_mandatory_ciphers=high # smtpd_tls_session_cache_database = btree:${data_directory}/smtp_scache
Der erste Konfigurationsblock schaltet die TLS-Kompression aus, die unter bestimmten Umständen die Verschlüsselung schwächen kann. In der Zeile danach wird eine sog. Cipherliste / ein Cipherstring für das Profil „high” angegeben. In dem String wird definiert, welche Cipher für die Verschlüsselung beim Profil „high” zum Einsatz kommen dürfen und mit welcher Priorität.
Der nächste Block dreht sich um die ausgehenden Verbindungen, d.h. um Verbindungen zu anderen Mailservern, wenn eine E-Mail übermittelt werden soll. Das „may” legt dabei fest, dass zwar grundsätzlich eine TLS-gesicherte Verbindung genutzt werden soll, dass aber auf eine ungesicherte Verbindung zurückgegriffen werden kann, wenn der jeweils andere Server kein TLS beherrscht. Die Transportverschlüsselung wird also nur genutzt, wenn der andere Server das auch kann. Ansonsten wird nicht verschlüsselt. Diese Einstellung ist sinnvoll, wenn man sich nicht sicher sein kann dass alle anderen Mailserver ebenfalls verschlüsselte Verbindungen zulassen.
Der dritte Block legt die Einstellungen für eingehende Verbindungen (smtpd) fest. Auch hier wird die Einstellung „may” genutzt, damit auch Mails empfangen werden können, die nicht verschlüsselt übertragen werden konnten. Mailserver, die kein TLS können, haben sonst keine Möglichkeit, eine E-Mail zuzustellen.
Der vierte und fünfte Block ist auskommentiert. Die Blöcke sind jeweils wieder für ausgehende (smtp) und eingehende (smtpd) Verbindungen zuständig. Der Unterschied zu den anderen beiden Konfigurationsblöcken ist aber: Hier wird mit „encrypt” statt „may” eine verschlüsselte Verbindung erzwungen. Sowohl bei ausgehenden als auch bei eingehende Verbindungen. Wenn der jeweils andere Server kein TLS unterstützt, wird die Verbindung abgelehnt und E-Mails können nicht zugestellt werden. Außerdem wird über „mandatory_protocols” und „mandatory_ciphers” bestimmt, welche Protokolle und Cipher für die Übertragung genutzt werden würden und welche nicht. So werden die Protokolle SSLv2 und v3 nicht erlaubt, weil sie als unsicher gelten. Als Cipher werden nur jene erlaubt, die oben in der Konfiguration unter dem Profil „high” angegeben wurden. Werden diese starken Cipher vom anderen Server nicht unterstützt, schlägt die Übertragung einer E-Mail ebenfalls fehl.
Wenn man diese zweite Konfigurationen mit „encrypt” nutzt, sollte man sich also sicher sein, dass nur E-Mails an Server übermittelt werden sollen, die auf dem aktuellen Stand der Technik sind und TLS unterstützen.
Ich habe auf meinem Server die zweite Konfiguration mit „encrypt” aktiviert, weil ich den Meinung bin dass Transportverschlüsselung ein Mindeststandard ist und in jedem Fall genutzt werden soll. Wenn mal eine E-Mail nicht ankommt, weiß ich, warum… ;)