Perfect Forward Secrecy (PFS) für Postfix und Dovecot einrichten

verschluessung e-mail perfect forward secrecy pfsFür verschiedene Unternehmen und ISPs haben wir in den letzten Tagen die SSL/TLS-Einrichtungen vorgenommen oder verbessert und insb. auch Perfect Forward Secrecy (PFS) eingerichtet, das durch die NSA-Abhöraffäre bekannt geworden ist. Dieses Howto beschreibt die PFS-Einrichtung für Postfix und Dovecot, so daß gut geschützte SSL/TLS-Verbindungen angeboten werden können.

Die NSA-Diskussionen haben aufgerüttelt: Was eigentlich schon seit über einem Jahrzehnt klar war und wovor wenige Rufern in der Wüste (ungehört) gewarnt haben, ist ins Bewußtsein gerückt: Geheimdienste hören im großen Stil, teilweise flächendeckend, Internet Traffic ab. Nur das tatsächliche Ausmaß hat letztenendes überrascht.

Vielen Unternehmen und ISPs ist in den letzten Wochen ins Bewußtsein gerückt, daß Datenverschlüsselung über SSL/TLS überhaupt nötig wird — nicht wenige auch große Provider haben selbst das bislang nicht genutzt.

Perfect Forward Secrecy schützt gegen nachträgliche Entschlüsselung

Andererseits hat sich in der Wahrnehmung ebenso festgesetzt, daß eine schlechte Verschlüsselung nicht ausreicht und es mit „irgendeinem“ SSL/TLS nicht getan ist. Viel mehr noch: Solange damit zu rechnen ist, daß Unternehmen und große ISPs mit den Geheimdiensten kooperieren und ggf. auch Zugriff auf Schlüssel ermöglichen, oder solange damit zu rechnen ist, daß Geheimdienste auf anderem Weg Kenntnis der benutzten Schlüssel erlangen können, ist auch ein Schutz gegen eine nachträgliche Entschlüsselung nötig. Ein heute (unentschlüsselbar) aufgezeichneter Netzwerkverkehr soll nicht in einigen Monaten oder Jahren  nachträglich noch entschlüsselt werden können.

Die Lösung dieses Problems heißt „Perfect Forward Secrecy“ (PFS) und ist in aktuellen Softwareversionen vorhanden, muß aber oft noch manuell aktiviert werden. Die nachfolgende Anleitung beschreibt den status quo und die nötigen Schritte in aller Kürze.

Perfect Forward Secrecy (PFS) basiert auf der Idee, daß Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, daß der Schlüssel selbst gar nicht ausgetauscht werden muß, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich.

Diffie-Hellmann-Verfahren bieten PFS

Grundlage von PFS sind Verfahren nach dem Diffie-Hellmann-Verfahren (DHE), bzw. in der weiterentwickelten (etwas performanteren) Variante  Elliptic Curve Diffie Hellmann (ECDHE). Sobald man in seinen Logfiles oder beim Debugging mit openssl diese Kürzel in den verwendeten Ciphern findet, ist PFS aktiv.

Hilfreich sind immer aktuelle Versionen, so wird ECDHE erst ab openssl 1.x unterstützt, was aber mittlerweile gut  verbreitet ist.

So richten wir Perfect Forward Secrecy (PFS) bei Dovecot und Postfix ein:

Einrichtung von Perfect Forward Secrecy (PFS) in Postfix

Prüfen Sie, ob Sie Postfix > 2.6  (ideal: > 2.8) und openssl > 0.9 (ideal: > 1.0) haben:

openssl version
postconf mail_version

Für Postfix müssen dann zwei Diffie-Hellmann-Schlüssel erzeugt und in die main.cf eingebunden und einige kleine Anpassungen zur besseren Schlüsselauswahl vorgenommen werden. Die Anhebung des tls_loglevels sorgt dafür, daß die verwendeten Ciphers im Logfile auftauchen — anschließend sollten dort (EC)DHE-Ciphers verzeichnet werden.

Diese Kommandoabfolge kann per Cut & Paste in die eigene Shell übernommen werden:

openssl gendh -out /etc/postfix/dh_512.pem -2 512
openssl gendh -out /etc/postfix/dh_1024.pem -2 1024

postconf -e "smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem"
postconf -e "smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem"
postconf -e "smtpd_tls_eecdh_grade = strong"
postconf -e "tls_preempt_cipherlist = yes"
postconf -e "smtpd_tls_loglevel = 1"
postconf -e "smtp_tls_loglevel = 1"

postfix reload

tls_preempt_cipherlist wird erst ab Postfix 2.8 ausgewertet, wird von vorherigen Versionen aber einfach ignoriert.

Anschließend kann nach DHE oder ECDHE im Mail-Logfile gegreppt werden oder ein manueller Login-Test mit openssl vorgenommen werden (siehe unten).

Einrichtung von Perfect Forward Secrecy (PFS) in Dovecot

Dovecot unterstützt ab 2.1.x das normale DHE-Verfahren und ab 2.2.x das performantere ECDHE-Verfahren. Idealerweise ist openssl in einer Version > 1.0 verfügbar.

doveconf | head -n1
openssl version

Dovecot benutzt dann von Hause aus Perfect Forward Secrecy (PFS), was jedoch nicht in den Logfiles verzeichnet ist. Über den Platzhalter „%k“ läßt sich das in den Logzeilen ergänzen. Dazu paßt man in /etc/dovecot/conf.d/10-logging.conf an:

login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k"

Anschließend kann nach DHE oder ECDHE im Mail-Logfile gegreppt werden oder ein manueller Login-Test mit openssl vorgenommen werden.

PFS mit openssl debuggen/testen

Mit einem klassischen SSL-Verbindungsaufbau über openssl läßt sich leicht testen, ob das eigene System entsprechende DHE- oder ECDHE-Verfahren anbietet.

openssl s_client -starttls smtp -connect mx2.heinlein-support.de:25
openssl s_client -starttls imap -connect imap.heinlein-support.de:143

und im Output ist dann die Cipher-Zeile interessant:

Protocol  : TLSv1.2    
Cipher    : ECDHE-RSA-AES256-GCM-SHA384

Die richtige Schlüsselauswahl bei alten Clients (AppleMail)

Leider obliegt es in den meisten Fällen dem Client, welches der angebotenen Schlüsselverfahren er auswählt — und alte Softwareversionen greifen dabei nicht immer auf DHE-VErfahren zurück.  So diskutiert Mike Kuketz in seinem Blog derzeit, was die optimale Reihenfolge der angebotenen Ciphers ist um insb. Apple Mail auf die Sprünge zu helfen.

Wir werden das selbst weiter bei uns im Praxisbetrieb testen und in den nächsten Tagen unseren Blog-Eintrag entsprechend aktualisieren.

 

 

 

Dieser Beitrag wurde unter Blog, Howtos, Mailserver, Security abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

19 Antworten auf Perfect Forward Secrecy (PFS) für Postfix und Dovecot einrichten

  1. Werner Flamme sagt:

    Vielen Dank – so erzielt man mit wenig Aufwand viel Wirkung! Ein typischer Peer-Tip :-)

  2. Peter Beck sagt:

    Hallo Peer,
    wir haben bei einigen Kunden Zarafa im Einsatz. Deren IMAP-Implementation kann meines Wissens kein PFS. Ist es ein Problem, das ganze erstmal nur bei Postfix einzurichten ? Macht das überhaupt Sinn ?
    Gruss Peter

  3. Naja, alles, was besser verschlüsselt ist, hilft halt. Und wenn Postfix PFS kann, dann sind auch ausgehende E-Mails besser verschlüsselt. Warum also nicht?

  4. Raoul Bhatia sagt:

    Es gibt ein Problem zwischen Postfix und Debian Exim version bis 4.80-3,
    vgl. http://www.postfix.org/announcements/postfix-2.10.2.html und http://cdn.postfix.johnriley.me/mirrors/postfix-release/official/postfix-2.10.2.RELEASE_NOTES

    In Debian Jessie und Ubuntu 13.10 ist Postfix 2.10.2+ bereits enthalten.

    LG,
    Raoul

  5. Hallo Raoul, Danke für diesen Hinweis. Diesen Bug hatten wir im Juni/Juli gemeldet und fleißig mit Wietse und Viktor ausdiskutiert; das das nun im aktuellen Release gefixt ist, hatte ich selber noch gar nicht mitbekommen. Sehr schön!

  6. marko weber sagt:

    Hallo Peer,

    aus dem applied crypto settings pdf:

    main.cf:
    ———–
    # applied crypto settings
    smtpd_tls_mandatory_protocols = ! SSLv2 , ! SSLv3
    smtpd_tls_mandatory_ciphers = high
    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
    smtpd_tls_eecdh_grade = ultra

    master.cf
    ————-
    submission inet n – n – – smtpd
    -o smtp_tls_security_level=encrypt
    -o tls_preempt_cipherlist=yes

    so ist dann auch beim submission alles lecker.

    bis zur Mailserverkonferenz?,

    beste grüße

    marko

  7. Besten Dank.

    Funktioniert bestens auf meinem Debian 7.3 Server (postfix/dovecot). Allerdings hat das bereits ohne die oben gezeigten Zeilen funktioniert: Trusted TLS connection established to mx00.gmx.net[213.165.67.99]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM
    -SHA384 (256/256 bits) beim Versand an einen GMX-Empfänger. Wie auch immer, ich werde das sicher beim nächsten Mailserver explizit beachten.

    Beim Abholen via Thunderbird (eine aktuelle Version vorausgesetzt) sollte man via about:config TLS v1.2 einschalten: security.tls.version.max=3 und security.tls.version.min=1. Wenn man einen eigenen Server unter Debian 7.x betreibt ist das natürlich kein Problem und kann dann auch fix auf TLS 1.2 (natürlich abhängig vom verwendeten Client) festgenagelt werden. Für die nicht so Glücklichen gilt wohl ausprobieren.

    OT: ein aktuelles K9Mail verwendet beim IMAP-Login TLSv1 with cipher RC4-MD5 (128/128 bits), beim Versenden via postfix/submission kann es aber TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits) – immerhin 😉 Es gibt angeblich ein aktuelles Developer-Build vom Nov. 2013, das dieses Manko teilweise behebt: http://code.google.com/p/k9mail/downloads/detail?name=k9-4.701-release.apk&can=2&q= und auch dem IMAP-Login eine halbwegs sichere Cipher beschert…

    Mir fehlt eine Vorschaufunktion 😉
    Torsten

  8. fritz3366 sagt:

    Mi 140211.06:14.
    Wieder so ein völlig nutzloser Eintrag. Miemand kann ihn verwenden. muss ich jetzt an einer UNI 1Jahr IT büffeln?

    Meine Frage, muss auch der Mail-Empfänger wieder Schlüssel hantieren ?

    Grüsse fritz3366

  9. Ingo Schmitt sagt:

    Hi Leute, diese howto hat mir sehr geholfen. Vielen Dank.
    Mir ist aufgefallen, dass gmail im header vermerkt, ob und wie die mails verschluesselt empfangen worden sind:

    Received: from ….
    by mx.google.com with ESMTPS id …
    for
    (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);

    Wie bekomme ich meinen Postfix dazu?

  10. Ingo Schmitt sagt:

    RTFM kann auch helfen :)
    —————————————–
    To include information about the protocol and cipher used as well as the client and issuer CommonName into the „Received:“ message header, set the smtpd_tls_received_header variable to true. The default is no, as the information is not necessarily authentic. Only information recorded at the final destination is reliable, since the headers may be changed by intermediate servers.

    Example:

    /etc/postfix/main.cf:
    smtpd_tls_received_header = yes

  11. Sie haben vollauf richtig erkannt, daß es sich hier um einen Fachbeitrag für IT-Systemadministratoren handelt. Normale Endanwender haben mit PFS nichts zu tun und administrieren üblicherweise auch keine Server. Insofern würde ich Ihnen empfehlen, mehr als nur ein Jahr IT zu büffeln.

  12. Thomas sagt:

    Moin,

    ich habe meinen Postfix (2.10.2) nach dieser Anleitung konfiguriert und dann versucht mit OpenSSL (1.0.1e) die Verbindung zu testen.
    Ergebnis:
    Protocol : TLSv1.1
    Cipher : ECDHE-RSA-AES256-SHA

    Eigentlich hätte ich jetzt TLSv1.2 erwartet, meine main.cf enthält dazu folgendes:
    smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.1, TLSv1, SSLv3, !SSLv2
    smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.1, TLSv1, SSLv3, !SSLv2

    Hab ich da was übersehen? Woran kann es liegen, dass Postfix nicht TLSv1.2 spricht?

    Viele Grüße,
    Thomas

  13. Pingback: Perfect Forward Secrecy nun auf www.stacktracer.de | stacktracer's Blog

  14. Markus Pachali sagt:

    Hallo Peer,

    RedHat scheint den PFS-Support auch schon für Dovecot <2.1 implementiert zu haben. Ich habe das ganze hier gerade auf einem CentOS 6.5 mit Dovecot 2.0.9 eingerichtet:

    doveconf | head -n1
    # 2.0.9: /etc/dovecot/dovecot.conf

    openssl s_client -starttls imap -connect imap.example.com:143
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : DHE-RSA-AES256-SHA

  15. Clark sagt:

    Hallo,

    wie ist das Zusammenspiel des erzeugten PEM-Zertifkats und einen beglaubigten Zertifikats einer öffentlichen CA. Macht es Sinn das PEM aus der beglaubigten CRT zu erzeugen oder spielt das keine Rollen. Meine Frage begründet sich in einer Zeile im Header.

    (using TLSv1.2 with cipher DHE-RSA-AES256-SHA256 (256/256 bits))
    (No client certificate requested)

    Das „no client …“ läßt mich glauben, dass ein PEM aus einen beglaubigten Zertifikat reibungsloser arbeitet.

    Viele Grüße,
    Clark

  16. Christian sagt:

    Hallo,

    vielen Dank für die tolle Anleitung.

    Funktioniert das alles, wenn man nur einen 2048-Bit-DH-Schlüssel einbindet?
    Sprich, wenn ich nur den „non export“ EDH eingebe, und auf dem 512-Bit „export EDH“ verzichte.

    Meine CA stellt nämlich keine Schlüssel unter 2048-Bit aus.
    Vielen Dank im Voraus.

  17. Frank sagt:

    Markus Pacchali erwähnte, dass auf seinem RedHat System mit Dovecot 2.0.9 schon PFS eingesetzt würde.
    Das habe ich nun auch auf meinem System mit Ubuntu 12.04.5 LTS getestet und da scheint es auch schon so zu sein:

    ...
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
    Server public key is 4096 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : DHE-RSA-AES256-GCM-SHA384
    ...

  18. Es gab da in der Vergangenheit immer etwas Verwirrung und widersprüchliche Aussagen zu der Frage, ab wann openssl ein PFS unterstützt. Ganz einfach: Auch ältere openssl-Versionen können schon DHE-Ciphers und damit PFS (so auch hier). Aber erst neuere Versionen können das bessere und vor allem performantere ECDHE. Aus diesem Grunde sagt man aus Performancegründen, daß man für PFS (erst) die neueren openssl-Versionen benutzen kann/sollte. Rein technisch gesehen ist das aber so nicht wirklich richtig.

  19. Karl-Heinz sagt:

    Super Anleitung. Aber irgendwie bekomme ich meinen postfix nicht dazu einen ECDHE Cipher zu verwenden. Egal wie oft ich die Anleitung durchgehe es wird immer „DHE-RSA-CAMELLIA256-SHA“ ausgewählt (openssl s_client -starttls smtp -crlf -connect myhost:25). OpenSSL ist 1.0.1e, postfix 2.9.6 (Debian Wheezy). Irgendwelche Ideen?

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>