Transportwegverschlüsselung: TLS-Übermittlungssicherheit

Passend zu meinen letzten Beiträgen geht es auch jetzt wieder um Erweiterte Postfix Konfiguration. Ein nettes Feature ist es, wenn der Postfach Besitzer einstellen kann, dass Nachrichten garantiert via TLS versendet werden, also eine garantierte Transportwegverschlüsselung.

Gut zu wissen: Bei Google sind mittlerweile 85% aller ausgehenden Emails Verschlüsselt. Daher würden Fehlermeldungen bei fehlgeschlagener Transportwegverschlüsselung sehr selten bis gar nicht auftreten.

Google Tranzparenzbericht
Verschlüsselte ausgehende E-Mails: 85 %
Google Tranzparenzbericht

Diese Konfiguration ist jetzt LDAP-spezifisch, kann aber leicht für mysql-Backends umgeschrieben werden. Da es keine „pro User“-Version für Postfix SMTP-Client-Parameter gibt, hab ich einen „Workaround“ von transport-maps verwendet. Eine große Hilfe war die Mailingliste von Postfix.

/etc/postfix/main.cf
sender_dependent_default_transport_maps = ldap:/etc/postfix/ldap/transport_maps.cf

Ich habe einen forceenc Service mit Optionen zur Erzwingung von TLS erstellt. Außerdem habe ich einen smtp_delivery_status_filter hinzugefügt, um Soft-Fails für TLS-Handshake-Fehler mit Hard-Fails zu überschreiben. Auf diese Weise erhält der Sender sofort eine „undelivered mail returned to sender“ Nachricht.

/etc/postfix/master.cf
forceenc  unix  -       -       y       -       -       smtp
    -o smtp_tls_loglevel=1
    -o smtp_tls_security_level=encrypt
    -o syslog_name=forceenc
    -o smtp_delivery_status_filter=pcre:/etc/postfix/smtp_dsn_filter
/etc/postfix/smtp_dsn_filter
/^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/
        5$1
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/
        5$1
/^4.7.5(.*)/
        5.7.5$1

Für das Attribut kann ein beliebiges String Attribut genutzt/erstellt werden. In diesem Fall heißt das Attribut transportMap und erhält den Wert „forceenc:“. Wichtig mit dem Doppelpunkt!

/etc/postfix/ldap/transport_maps.cf
server_host      = ldaps://ldap.example.com
bind             = yes
start_tls        = no
version          = 3
bind_dn          = cn=root,dc=ldap,dc=example,dc=com
bind_pw          = THE_LDAP_ROOT_PASS
search_base      = ou=people,dc=ldap,dc=example,dc=com
scope            = sub
# simple user select filter
query_filter     = (&(mail=%s)(mailEnabled=TRUE)(objectClass=person))
# an custom schema which returns "forceenc:"
result_attribute = transportMap
debuglevel       = 0

Schreiben Sie einen Kommentar

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