Securing Security - SMTP DANE mit Postfix

DNS Workshop

Created: 2019-08-29 Thu 10:24

Postfix TLS Sicherheit

  • Postfix ist ein Open Source Mail-Transfer-Agent (MTA) mit einer besonders sicheren Architektur (multi-Daemon mit unterschiedlichen Privilegien-Ebenen).
  • Die DANE-Implementierung in Postfix ist die Referenzimplementierung für DANE-SMTP
  • DANE-SMTP im Postfix wurde von Viktor Dukhovni entwickelt und implementiert
  • Viktor hat DANE over SMTP als RFC entwickelt und zur Standardisierung geführt hat
  • Postfix ist die einzige Open Source Software, die DANE vollständig und fehlerfrei implementiert

SMTP-DANE - TLSA-Record im DNS

    _25._tcp.mail.sys4.de. IN TLSA 3 1 1 9273B4E9040C1B...
     |   |   |                |    | | | |
Port--   |   |                |    | | | |
Protocol-    |                |    | | | |
Host----------                |    | | | |
Resource type------------------    | | | |
Certificate Usage ------------------ | | |
Selector ----------------------------- | |
Matching Type -------------------------- |
Certificate Association Data -------------

Vertrauen ist gut - Prüfung ist besser

  • SMTP TLS ohne DANE
Jul 14 11:03:31 mail postfix/smtp[6477]: Trusted TLS connection established to mx-ha.example.de
  [213.165.67.104]:25: TLSv1.1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
  • SMTP TLS mit DANE
Jul 14 11:04:44 mail postfix/smtp[6409]: Verified TLS connection established to mail.sys4.de
  [194.126.158.139]:25: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)

Postfix - TLS Zertifikat erstellen

  • Im Schritt 1 wird der private (RSA-) Schlüssel des x509 Zertifikats erzeugt
     # mkdir /etc/postfix/tls
     # cd /etc/postfix/tls

     # openssl genrsa -out mail.zoneXX.dnslab.org.key 4096
     Generating RSA private key, 4096 bit long modulus
     .........................................................................................++
     ...............++
     e is 65537 (0x10001)

Postfix - TLS Zertifikat signieren (Self-Signed)

  • Bei DANE-SMTP können selbst-signierte Zertifikate zum Einsatz kommen. Diese Schritte signieren die öffentlichen Schlüssel mit dem eigenen privaten Schlüssel und erzeugen hierdurch eine Zertifikats-Datei
     # openssl req -new -key mail.zoneXX.dnslab.org.key \
               -out mail.zoneXX.dnslab.org.csr

     # openssl x509 -req -days 365 -in mail.zoneXX.dnslab.org.csr \
         -signkey mail.zoneXX.dnslab.org.key -out mail.zoneXX.dnslab.org.crt
     Signature ok
     subject=/C=de/ST=state/L=city/O=company/CN=mail.zoneXX.dnslab.org/emailAddress=nutzer@zoneXX.dnslab.org
     Getting Private key

     # chmod 400 mail.zoneXX.dnslab.org.*

Postfix - TLS Konfiguration

  • Postfix wird für die Benutzung von DNSSEC und DANE konfiguiert, das eigene Zertifikat wird im Postfix angemeldet
     # postconf -e "myhostname = mail.zoneXX.dnslab.org"
     # postconf -e "smtp_tls_loglevel = 1"
     # postconf -e "smtp_tls_security_level = dane"
     # postconf -e "smtp_dns_support_level = dnssec"
     # postconf -e "smtpd_tls_security_level = may"
     # postconf -e "smtpd_tls_key_file = /etc/postfix/tls/mail.zoneXX.dnslab.org.key"
     # postconf -e "smtpd_tls_cert_file = /etc/postfix/tls/mail.zoneXX.dnslab.org.crt"
     # postconf -e "smtpd_tls_loglevel = 1"
     # postconf -e "smtpd_tls_received_header = yes"
     # postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt"
     # postfix reload
     # systemctl status postfix

Postfix - TLS Verbindung testen

  • Mittels dem OpenSSL Kommando s_client kann eine TLS-verschlüsselte Verbindung zum Postfix Mailserver getestet werden
     # openssl s_client -connect mail.zoneXX.dnslab.org:25 -starttls smtp
     # tail /var/log/maillog

DANE für SMTP (TLSA-Record für x509 Zertifikate)

DANE - TLSA Record für den Mailserver erstellen

  • mit dem Programm ldns-dane erstellen wird einen DANE-TLSA Record und bauen diesen in die DNS-Zone ein
     # ldns-dane -c /etc/postfix/tls/mail.zoneXX.dnslab.org.crt  \
           create mail.zoneXX.dnslab.org 25 3 1 1 >> /var/named/zoneXX.dnslab.org
  • SOA-Seriennummer hochzählen (manuell per Editor) und Zone neu laden
     # rndc reload zoneXX.dnslab.org

DANE - TLSA Record abfragen

  • der neue TLSA-Record sollte nun im DNS abfragbar sein
     # dig _25._tcp.mail.zoneXX.dnslab.org tlsa +dnssec +m

     [..]
     ;; ANSWER SECTION:
     _25._tcp.mail.zoneXX.dnslab.ORG. 2490 IN TLSA 3 1 1 (
                                 5B9909E641FAB068A193A66B98E3FB0646CBE1AE88D9
                                 01D63F24B9E4778D31D1 )
     _25._tcp.mail.zoneXX.dnslab.ORG. 2490 IN RRSIG TLSA 8 6 3600 (
                                 20151104204359 20151005194359 57864 zoneXX.dnslab.org.
                                 1A0uzC9Iglsq9xZzMAPzq3N984fRBH2Yes+TQ3OgQXDO
                                 MstWO22SHvR95gnpv4hPY+b9J6RvMhI4pyzlHFXTIXy3
                                 FVGWR1Gha4sa64ZZHCFBnekFou9WtK9unYagY1q59c3F
                                 wg3Bb7mNy3zO1Mepysx+tW1ZyCvZoeqvAzN0P+agj0ED
                                 m8gt3cO/dRVgi7RgGlyDC8p2o4GvdyykU84Nd+J0zEP6
                                 /irpyHRPfjBQNpaHLW2D7ILLCvSyGpXHPTLg )

DANE - Test E-Mail senden

  • per OpenSSL s_client
# openssl s_client -connect mail.zoneXX.dnslab.org:25 -starttls smtp
[..]
ehlo zoneXX.dnslab.org
250-mail.zoneXX.dnslab.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: nutzer@zoneXX.dnslab.org
250 2.1.0 Ok
rcpt to: nutzer@zoneYY.dnslab.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Hallo Nutzer,

dies ist eine DANE Test-E-Mail.
.
250 2.0.0 Ok: queued as 7E346659A7
quit
221 2.0.0 Bye
closed

DANE - Test E-Mail senden

  • Im Log des ausgehenden Postfix MTA wird die Verbindung mit der Gegenstelle nun mit "Verified TLS connection …" angezeigt:
     # tail /var/log/maillog
     Oct  5 23:48:38 postfix/cleanup[2426]: 0FBE9659A7: message-id=<20151005214823.0FBE9659A7@mail.zone02.dnslab.org>
     Oct  5 23:48:38 postfix/qmgr[2394]: 0FBE9659A7: from=<nutzer@zone02.dnslab.org>, size=499, nrcpt=1 (queue active)
     Oct  5 23:48:38 postfix/smtp[2435]: Verified TLS connection established to mail.zone01.dnslab.org[192.168.53.101]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
     Oct  5 23:48:38 postfix/smtp[2435]: 0FBE9659A7: to=<nutzer@zone01.dnslab.org>, relay=mail.zone01.dnslab.org[192.168.53.101]:25, delay=20, delays=19/0.02/0.07/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 2EA75659A7)
     Oct  5 23:48:38 postfix/qmgr[2394]: 0FBE9659A7: removed

Fragen?