Postfix - TLS library problem bei Mailempfang von Web.de und GMX

  • Guten Abend,


    ich bemerke seit einiger Zeit, dass der Mailempfang von Web.de und GMX zu Fehlermeldungen im Log führt. Die Mails werden dann aber in einem neuen Versuch angenommen:

    Ich verstehe die Log-Einträge wie folgt:
    - Web.de versucht eine TLS-Verbindung aufzubauen, was fehlschlägt
    - Web.de stellt die Mail daraufhin über eine unverschlüsselte Verbindung zu


    Die TLS-bezogenen Optionen von Postfix sind wie folgt gesetzt:


    Die Mails werden zwar zugestellt, es stört mich aber, dass (mal wieder...) nur Verbindungen mit Web.de und GMX nicht rund laufen. Ich stehe absolut auf dem Schlauch, wo ich bei der Fehlerbehebung (oder -suche) anfangen könnte - any idea?


    MfG Aleph

  • killerbees19, danke für die schnelle Antwort.


    Ich setze Postfix 3.1.2-r2 ein (shame on me dafür, dass ich diese Angabe im Startposting vergessen habe...).


    postconf -d | grep cipher

    postconf -n | grep cipher

    Zitat

    tls_preempt_cipherlist = yes

    Mit Hinblick auf Postfix Configuration Parameters verstehe ich das so, dass dieser Parameter darüber entscheidet, ob Server ("yes") oder Client ("no") darüber entscheiden, welche Chiffre zuerst genommen wird. Aktuell will mein Server TLS eine Cipher haben, welche Web.de und GMX nicht unterstützen, also wird im zweiten Anlauf dann eine unverschlüsselte Verbindung hergestellt. Oder missverstehe ich da was?


    MfG Aleph

  • Off Topic: Ich bin mit folgender Konfiguration gut gefahren:


    Die Cipher List müsste überarbeitet werden 8)

  • Bist Du sicher, dass Du folgende Einstellungen möchtest?

    Code
    1. smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
    2. smtpd_tls_ask_ccert = yes
    3. smtpd_tls_session_cache_database = btree:$data_directory/smtpd_tls_session_cache

    Weißt Du, was Du damit bewirkst? Diese Werte sind recht eigenwillig.


    Außerdem solltest Du Deine Konfiguration einmal dringend aufräumen.

  • Zitat

    Bist Du sicher, dass Du folgende Einstellungen möchtest?

    Wenn du so direkt fragst - nein ;-)
    Die Installation lief vorher rund 5 Jahre auf einem Debian-System und ich habe sie beim Umzug zu netcup so übernommen.

    Weißt Du, was Du damit bewirkst? Diese Werte sind recht eigenwillig.

    Du meinst wahrscheinlich smtpd_tls_ask_ccert? Den Parameter habe ich testweise zurück auf den Defaultwert "no" gesetzt.
    Bei den Session Caches kann ich ad hoc nichts eigenwilliges feststellen...

    Zitat

    Außerdem solltest Du Deine Konfiguration einmal dringend aufräumen.

    Worauf genau beziehst du dich?


    @ de_bonner: danke für den Input. Ich werde deine Config später mal mit meiner vergleichen (mir fiel gerade auf, dass du "smtpd_tls_auth_only = yes" zweimal drin hast).


    MfG Aleph

  • Bei den Session Caches kann ich ad hoc nichts eigenwilliges feststellen.

    Einerseits sorgst Du für ephemeral key exchange und dann speicherst Du die Werte ab. Wozu, Postfix unterstützt seit Version 2.11 RFC 5077?


    Außerdem solltest Du Deine Konfiguration einmal dringend aufräumen.

    Du setzt nicht genutzte Parameter. Du überschreibst Parameter. Das macht das Lesen schwer. Beispiel

    Code
    1. smtp_bind_address = 37.120.182.194
    2. smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
    3. smtp_tls_CApath = /etc/ssl/certs
    4. smtp_tls_loglevel = 1
    5. smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
    6. smtp_tls_protocols = !SSLv2, !SSLv3
    7. smtp_tls_security_level = may
    8. smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
    9. smtp_use_tls = yes

    könnte ohne inhaltliche Änderung so aussehen

    Code
    1. smtp_bind_address = 37.120.182.194
    2. smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
    3. smtp_tls_loglevel = 1
    4. smtp_tls_protocols = !SSLv2, !SSLv3
    5. smtp_tls_security_level = may
    6. smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache

    Ich würde vermutlich auch noch

    Code
    1. smtp_bind_address = 37.120.182.194
    2. smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache

    entfallen lassen. Es gibt nahezu keine Konfiguration, wo diese Werte einen Sinn haben.


    Bei smtpd ist mir das zu viel.

  • .A., vielen Dank für die Anmerkungen und Verbesserungsvorschläge. Ich verstehe sie allerdings so, dass es gerade eher um ein sauberes Configfile geht, unabhängig von meinem Problem - ist das korrekt?
    Nichtsdestotrotz führe ich mir deine Vorschläge bei Gelgenheit gerne zu Gemüte :-)


    Zu "smtp_bind_address" - der Server sendet auf einer zweiten IP-Adresse, da ich mit der von netcup bereitgestellten Adresse Probleme beim Versand an Yahoo hatte.


    Bei dem Server handelt es sich übrigens um eine rein privat genutzt Kiste mit einer Handvoll Mailaccounts.


    MfG Aleph

  • Ich habe mal die Loggingverbosity etwas heraufgesetzt, wobei nicht wirklich neue Infos bei herumkamen:


    Code
    1. postfix/smtpd[17496]: SSL_accept:SSLv3 flush data
    2. postfix/smtpd[17496]: Anonymous TLS connection established from unknown[212.227.15.14]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
    3. postfix/smtpd[17496]: SSL3 alert read:fatal:insufficient security
    4. postfix/smtpd[17496]: warning: TLS library problem: error:1409442F:SSL routines:ssl3_read_bytes:tlsv1 alert insufficient security:s3_pkt.c:1493:SSL alert number 71:
    5. postfix/smtpd[17496]: lost connection after STARTTLS from unknown[212.227.15.14]
    6. postfix/smtpd[17496]: disconnect from unknown[212.227.15.14] ehlo=1 starttls=1 commands=2


    Laut dem RFC zu TLSv1.2 (https://www.ietf.org/rfc/rfc5246.txt) bedeutet der Fehler folgendes:

    Code
    1. insufficient_security
    2. Returned instead of handshake_failure when a negotiation has
    3. failed specifically because the server requires ciphers more
    4. secure than those supported by the client. This message is always
    5. fatal.


    Daraus schließe ich nun, dass GMX / Web.de unsichere Ciphers verwenden wollen, als mein Server zum Aufbau einer verschlüsselten Verbindung akzeptiert. Also bricht der Verbindungsaufbau ab und GMX / WEb.de versuchen es daraufhin noch einmal:


    Code
    1. postfix/smtpd[17496]: connect from unknown[212.227.15.14]
    2. postfix/smtpd[17496]: DC7CA1000D5: client=unknown[212.227.15.14]
    3. postfix/cleanup[17489]: DC7CA1000D5: message-id=<21373d0a-e8ae-1b45-3f8b-18e171719008@MEINSERVER>


    Die Mail wird also letztendlich angenommen, wie ich auch schon im Eingangsposting schrieb.


    1) Ist die Verbindung, über welche die Mail letztendlich zugestellt werden kann, demzufolge unverschlüsselt?
    2) Falls ja, habe ich überhaupt irgendwelche Möglichkeiten, GMX / Web.de zum Aufbau einer sichereren Verbindung zu zwingen, ohne dass Mails dann nicht zugestellt werden können? Von "encrypt" wird ja abgeraten (Postfix Configuration Parameters)...


    Code
    1. smtpd_tls_auth_only = yes
    2. smtpd_tls_cert_file = /etc/letsencrypt/live/fullchain.pem
    3. smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
    4. smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
    5. smtpd_tls_key_file = /etc/letsencrypt/live/privkey.pem
    6. smtpd_tls_security_level = may
    7. tls_preempt_cipherlist = yes (ob "yes" oder der Defaultwert "no" macht keinen Unterschied)


    MfG Aleph

  • Falls ja, habe ich überhaupt irgendwelche Möglichkeiten, GMX / Web.de zum Aufbau einer sichereren Verbindung zu zwingen, ohne dass Mails dann nicht zugestellt werden können?

    Es ist möglich.

    Code
    1. Mar 17 20:24:41 example postfix/smtpd[17416]: connect from mout.web.de[212.227.17.11]
    2. Mar 17 20:24:41 example postfix/smtpd[17416]: Anonymous TLS connection established from mout.web.de[212.227.17.11]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    3. Mar 17 20:24:41 example postfix/smtpd[17416]: 6055451E: client=mout.web.de[212.227.17.11]
    4. Mar 17 20:24:41 example postfix/cleanup[17424]: 6055451E: message-id=<6658775.n1Rd3GPpOK@web.de>
    5. Mar 17 20:24:41 example postfix/qmgr[12226]: 6055451E: from=<example@web.de>, size=2004, nrcpt=1 (queue active)
    6. Mar 17 20:24:41 example postfix/smtpd[17416]: disconnect from mout.web.de[212.227.17.11]

    Hast Du Deine Konfiguration schon aufgeräumt?

  • Zitat

    Es ist möglich.

    Magst du verraten, wie?

    Hast Du Deine Konfiguration schon aufgeräumt?

    Ja, ich habe die main.cf um die Einträge erleichtert, welche entweder auf dem Defaultwert standen oder in der aktuellen Version nicht mehr benötigt / unterstützt wurden (ich will nicht wissen, welche Version 2012 unter Debian angeboten wurde - daher rührte, dass ich immer noch Optionen drin hatte, die längst überholt waren):


    postconf -n | grep tls | grep smtpd:

    Code
    1. smtpd_tls_auth_only = yes
    2. smtpd_tls_cert_file = /etc/letsencrypt/live/fullchain.pem
    3. smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
    4. smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
    5. smtpd_tls_key_file = /etc/letsencrypt/live/privkey.pem
    6. smtpd_tls_security_level = may


    MfG Aleph

  • Ist Dein Zertifikat OK? Hast Du einen TLSA-RR gesetzt?


    Nach dem Gesamtinhalt des Threads müssten die Ciphers eigentlich in Ordnung sein. Kannst Du trotzdem mal einen dump vom TLS handshake machen? Also etwas wie

    Code
    1. tcpdump -w output tcp port 25

    Vom STARTTLS bis zum Abbruch der Verbindung sollte reichen.

  • Guten Morgen,

    Ist Dein Zertifikat OK? Hast Du einen TLSA-RR gesetzt?

    Ja, das Zertifikat sollte in Ordnung sein. Die Warnings tauchen ja auch nur bei Verbindungsaufbauten von Web.de und GMX auf, bei allen anderen Mailservern läuft alles anstandslos durch.
    Einen TLSA-Record habe ich nicht gesetzt.

    Nach dem Gesamtinhalt des Threads müssten die Ciphers eigentlich in Ordnung sein. Kannst Du trotzdem mal einen dump vom TLS handshake machen? Also so etwas wie

    Code
    1. tcpdump -w output tcp port 25

    Ich wusste jetzt nicht, wie ich aus dem Output den Traffic zwischen STARTTLS und Verbindungsabbrucht herauslesen kann und habe daher alles auf Port 25 bis zum Eintreffen der Mail gesnifft.


    tcpdump port 25:


    MfG Aleph

  • Ich habe Deine Konfiguration genommen. Ein paar Stellen sind anders, da Postfix 2.11 abweichende defaults hat.

    Code
    1. # postconf -n | grep smtpd_tls
    2. smtpd_tls_cert_file = /var/lib/letsencrypt.sh/certs/example.com/fullchain.pem
    3. smtpd_tls_ciphers = medium
    4. smtpd_tls_dh1024_param_file = ${config_directory}/dh3072.pem
    5. smtpd_tls_key_file = /var/lib/letsencrypt.sh/certs/example.com/privkey.pem
    6. smtpd_tls_loglevel = 1
    7. smtpd_tls_protocols = !SSLv2, !SSLv3
    8. smtpd_tls_security_level = may

    Web.de liefert Mails an diese Konfiguration verschlüsselt.

    Code
    1. Mar 20 20:10:58 example postfix/smtpd[14526]: connect from mout.web.de[212.227.15.14]
    2. Mar 20 20:10:58 example postfix/smtpd[14526]: Anonymous TLS connection established from mout.web.de[212.227.15.14]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
    3. Mar 20 20:10:58 example postfix/smtpd[14526]: 9F8B851E: client=mout.web.de[212.227.15.14]
    4. Mar 20 20:10:58 example postfix/cleanup[14531]: 9F8B851E: message-id=<7343484.oR80Ns88ZF@web.de>
    5. Mar 20 20:10:58 example postfix/qmgr[14516]: 9F8B851E: from=<user@web.de>, size=2004, nrcpt=1 (queue active)
    6. Mar 20 20:10:58 example postfix/smtpd[14526]: disconnect from mout.web.de[212.227.15.14]
    7. Mar 20 20:10:58 example postfix/qmgr[14516]: 9F8B851E: removed

    Ich habe mir Deine Zertifikate angesehen. Die Kette ist in Ordnung. Allerdings könntest Du zustäzlich den/die Hostname(s) in die SAN extension des Zertifikats übernehmen.

    Dabei ist jedoch aufgefallen, dass Deine Diffie-Hellmann-Parameter recht kurz sind.

    Das hat aber nichts mit dem Problem zu tun. Es sieht alles gut aus.

    Mit einem tcpdump könnte man auch den Inhalt loggen (-X oder -XX). Dieser ist aus der bisherigen Textausgabe nicht zu ersehen, enthält möglicherweise (unwahrscheinlich) weitere Hinweise. Wenn Du den dump stattdessen direkt in eine Datei schreibst (-w), bekommt man mit Wireshark eine gut lesbare Übersetzung, bei -X übersetzt Du alles von Hand. Außerdem solltest Du den smtpd_tls_loglevel bis auf 4 hochschrauben.


    Welche TLS-Library nutzt Dein Postfix?

  • .A., weiterhin vielen Dank für deine Bemühungen und den Input. Die Zertifikate würde ich an der Stelle erstmal so lassen (einfach um nicht ggf. eine weitere Baustelle aufzumachen) und später anpassen.


    Ich nutze gnutls-3.3.26.


    Mit dem Loglevel auf 4 und "tcpdump -X tcp port 25" habe ich mir dann eine Mail von Web.de aus geschickt. Den Output verlinke ich der Übersicht halber:
    mail.log: https://ormanns.net/pub/netcup_maillog
    tcpdump: https://ormanns.net/pub/netcup_tcpdump


    Aus der Ausgabe werde ich aber nicht wirklich schlau...


    MfG Aleph