tls-verschlüsselung bei qmail/spamcontrol
Transcrição
tls-verschlüsselung bei qmail/spamcontrol
TLS-VERSCHLÜSSELUNG BEI QMAIL/SPAMCONTROL ! ! MAILSERVER KONFERENZ, BERLIN 2014 ! ERWIN HOFFMANN - FEHCOM [email protected] © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Architektur Zu meiner Person • Qmail Anwender und Supporter seit 1998 • Support und Konfiguration umfangreicher Qmail-Sites • FreeBSD Junki mit Qmail-Ports • Professor für IT Security und IT Governance an der • Provadis Hochschule in Frankfurt/Main und vorher an der • Fachhochschule • Autor Frankfurt/Main einiger Bücher zu Rechnernetzen • Technik © Dr. Erwin Hoffmann - FEHCom der IP-Netze TLS + Qmail/Spamcontrol | Architektur Überblick • Qmail, seine Architektur • Überlegungen Qmail und Weiterentwicklung zu Transport Layer Security bei • Server-Daemons (qmail-smtpd/qmail-pop3d) mit TLS-Verschlüsselung • qmail-remote • Fazit mit TLS-Verschlüsselung und Ausblick für Qmail © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Architektur Entwicklung • Daniel Bernstein entwickelte Qmail zwischen 1995 und 1998 (Version 1.03) als reine (E)STMP Implementierung (also ungefähr zeitgleich mit Wietse Venema's Postfix) • Letzter ESMTP RFC, mit dem djb sich herumschlug, war RFC 2821(‚Klensin-Draft‘) • Etwa im Jahr 2004 waren die Bestandteile Daemontools, djbdns und ucspi-tcp vollständig entwickelt © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Architektur Architektur Internet tcpserver cdb FQDN:deny IP:deny :allow,ENV=ok Listen: IP-Adresse, Port daemontools: supervise + multilog rblsmtpd Bounces, NDR qmail-smtpd qmail-send Intern qmail-inject ‚sendmail‘ qmail-qmqpd qmailqueue Queue qmail-qmtpd userspace qmail-remote djbdns: dnscache + Resolver libs © Dr. Erwin Hoffmann - FEHCom qmail-local .alias forwarding Internet SMTP-Client Internet EZMLM tcpserver qmail-pop3d LDA Mail dir Mail dir Mail dir TLS + Qmail/Spamcontrol | Architektur Vorteile • Vorteile von Qmail: • Strenge Trennung der Aufgaben (einzelne Daemons); minimale Rechte • Modulares Konzept, kompakter Source-Code für einzelne Routinen (wenige hunderte Zeilen) • QMTP und Maildir-Unterstützung (von Postfix adaptiert) • String-Library © Dr. Erwin Hoffmann - FEHCom stralloc von Bernstein TLS + Qmail/Spamcontrol | Architektur Nachteile • Nachteile • Keine von Qmail (in Bezug auf SMTP): SMTP-Authentication • Keine TLS-Verschlüsslung • Eine Mail ist eine Transaktion (Pipelining nur bei qmail-smtpd) • Keine Plugin zum Scannen der Mail während der SMTP-Transaktion • Keine © Dr. Erwin Hoffmann - FEHCom Recipient-Überprüfung beim SMTP-Daemon TLS + Qmail/Spamcontrol | Architektur Aktueller Stand • Letzte ‚offizielle‘ Version ist qmail-1.03 + einige (4 Bugfixes) + Qmail-Queue API ☞ netqmail 1.06 (tarball + wenige Patches) • AMD64 Support problematisch; clang ?? • Kein utmpx.h Support • Kein IPv6 ;-) © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Architektur Patches • Weiterentwicklung durch Patches: • Qmail ist seit 2008 in der Public Domain; vorher waren Änderungen nur über Patches machbar Felix von Eric Vermeulen’s Leitner’s IPv6 TLS Patch Patch Andre Oppermann’s LDAP Patch ! netqmail 1.06 netqmail-1.05- + TLS + 20110119 fefe3.diff.bz2 Status ? Indimail ist ein Fork von Qmail! © Dr. Erwin Hoffmann - FEHCom Spamcontrol Patch Bill Shupp’s „Qmail Toaster“ Patchsammlung 1.0 RECIPIENTS Extension Status 2.0 AUTH qmail-smtpd 2.3 QHPSI + WARLORD 2.4 TLS + STARTTLS (qmail-smtpd) 2.5 RECIPIENTS PAM qmail-remote AUTH 2.6 TLS qmail-remote 2.7 AMD64 compatibility ? TLS + Qmail/Spamcontrol | TLS TLS im Schichtenmodell Protokolle der Anwendungsschicht Verbindungsorientiert HTTPS, SMTPS, IMAP4S, ... 6: Anwendungsschicht 5: Supportschicht 4: Transportschicht 3: Netzwerkschicht 2: Data-Link-Schicht 1: Physikalische Schicht © Dr. Erwin Hoffmann - FEHCom HTTP, FTP, SMTP, IMAP4, ... Echtzeit H.323SIG SIP SRTCP RTSCP SRTP RTP DTLS RTCP TCP/FO TCP IPSec RARP DNS, DHCP, SNMP, RIP, NTP, ... BGP TLS SCTP Verbindungslos ARP RSVP OSPF ... UDP IP NIC ICMP IGMP Übermittlungsnetze TLS + Qmail/Spamcontrol | TLS TLS hat selbst mehrere Schichten … HTTP, SMTP, LDAP, ... HandT shake L (Type 22) S HeartChange beat CipherSpec (Type 24) (Type 20) Alert Applikationsprotokoll (Type 21) (Type 23) Record Layer Protocol Transmission Control Protocol (TCP) Internet Protocol (IP) • Die Record Layer dient als Transportschicht • Handshake für den Sitzungsaufbau Nachrichten mittels Change Cipher Spec, Alerts und - neu - per Heartbeat (RFC 6520) • Out-of-Band • Verschlüsselte Anwendungsdaten werden als Nachrichtentyp ‚23‘ übertragen © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS Cipher Suite KeyExchange+Authentisierung Verschlüsselung+Betriebs-Mode TLS_ _ RSA DH/DHE ECDH Anonymous RSA RSA (Export) DSA DSS ECDSA MAC _ Null ECB(default) *RC4(_40/_56/_128) CBC DES(_40/_56) GCM 3DES_EDE(3) AES(_128/_256/_512) RC2(_128/_256) *) Stream Cipher; SEED alle anderen: CAMILLA Block Cipheren Null MD5 SHA(1) SHA256 SHA384 Cipher Suite beschreibt den SecurityKontext für TLS • Die Cipher Suite wird beim Handshake ausgehandelt; kann aber per Change Cipher Spec nachträglich geändert werden • Die © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS X.509 Zertifikate Version of Certificate Certificate Serial Number Signature Algorithm for Cert Auth. Issuer (CA) DN Subject of Cert (DN) Subject Algorithm Identifier Public Key Information Public Key Value Issuer Unique Identifier Subject Unique Identifier DN of Issuer = DN der ausgebenden Zertifizierungs-Behörde (CA) X.509.v1 DN of Subject = DN des Besitzers des Zertifikates X.509.v2 => PKIX Konventionen Server: CN=host.example.com Client: [email protected] X.509.v3 Critical flags: CA = true Extension Field (Variable) Certification Authority's Digital Signature Usage: KeX, Authentication, Signing Subject Alternative Name (FQDN, IP) • X.509 Zertifikate werden beim ephemeralen DiffieHellman zur Signierung der DH-Parameter benötigt • Sie dienen daher nur zur Authentisierung des Servers Anonymous DH verzichtet der Client überhaupt auf die Validierung des Server-Certs • Beim © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS Transparenz von TLS + OpenSSL • TLS war als ‚transparente‘ Sicherheitsschicht für die Applikation geplant; d.h. die Applikation merkt weder etwas von der stattfindenden Verschlüsselung; noch kann sie darauf Einfluss nehmen • Spätestens mit STARTTLS/STLS ist dieses (falsche) Paradigma nicht mehr gültig • Was ist mit TLS ALARM-Nachrichten ? © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS OpenSSL Schnittstellen • Input: • Die Cipher Suite, die vorgegeben werden kann (C+S) • Der Trust- und Key-Store (bzw. dessen Inhalt) • Die Diffie-Hellman Parameter (DHPARAM) • Validierung des Zertifikates (ansonsten Anonym) • Verifikation des Hostname gegenüber Zertifikat • Output: (genutzte Cipher Suite und Partner-DN; aber keine EKUs) • mod_ssl © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS ucspi-ssl ‚Superscript‘ gibt es als Ersatz von ucspi-tcp ucspi-ssl: • Von • ucspi-tcp + OpenSSL Libraries • Keine Unterstützung für STARTTLS/STLS • Keine CRL-Unterstützung • Kein OCSP • STARTTLS-Erweiterung © Dr. Erwin Hoffmann - FEHCom von Scott Gifford ! TLS + Qmail/Spamcontrol | Server sslserver als Ersatz für tcpserver • Qmail Empfangsprozesse: • qmail-smtpd • qmail-pop3d/qmail-popup • qmail-qmtpd • qmail-qmqpd Alle diese Daemons nutzten tcpserver (ucspi-tcp) Und für den gibt es Ersatz: sslserver (ucspi-ssl) © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Architektur sslserver im Einsatz Internet sslserver cdb FQDN:deny IP:deny :allow,ENV=ok Listen: IP-Adresse, Port daemontools: supervise + multilog rblsmtpd Bounces, NDR qmail-smtpd qmail-send Intern Queue qmail-qmtpd qmail-remote djbdns: dnscache + Resolver libs © Dr. Erwin Hoffmann - FEHCom qmail-inject ‚sendmail‘ qmail-qmqpd Internet Internet qmailqueue qmail-pop3d qmail-local EZMLM sslserver Mail dir Mail dir Mail dir TLS + Qmail/Spamcontrol | Server sslserver Anwendungsfälle SMTPClient (MUA) TCP SYN Internet TLS Handshake SMTPSMTPSClient Server (MUA) TCPListen TCP SYN Port 465 Internet 220 hostname EMSTP EHLO client 220 hostname EMSTP EHLO client 250-hostname 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN TLS Tunnel STARTTLS 220 Ready to start TLS TLS Handshake TLS Tunnel b) Internet TCP-Verbindungsaufbau TCP-Segment 1 ClientHello ServerHello Server Certificate(s) Exchange Certificate Request (+ Client CAs) ServerKeyExchange ServerHelloDone 7 8 TCP-Segment 9 10 11 c) © Dr. Erwin Hoffmann - FEHCom TCPListen Port 25 250-hostname 250-PIPELINING 250-8BITMIME 250-SIZE 0 250-AUTH LOGIN 250 STARTTLS a) (TLS-)Client SMTPServer (TLS-)Server 2 3 4 5 6 Drei Anwendungsfälle: TCP-Segment Client Certificate Exchange ClientKeyExchange Client Certificate Verify ChangeCipherSpec Finished ChangeCipherSpec 12 Finished 13 TLS-Verbindung TCP-Segment ! a) SMTPS b) (E)STMP + STARTTLS c) Client-Zertifikate TLS + Qmail/Spamcontrol | Server Fall a) sslserver für SMTPS mod_ssl © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | TLS sslserver mit Stores sslserver/sslclient lassen sich verschlüsselte Client/Server-Anwendungen realisieren, ohne dass die Anwendung ein Socket-IF besitzen muss • Mittels • TCP-Verbindungen können bei sslserver per IP-Adresse oder per FQDN kontrolliert werden • Applikation läuft in einer chroot-Umgebung • Auch das Einlesen der Zertifikate + Keys geschieht in eigener Umgebung DNS Stubresolver IDENT/TAP FD 0 FD 1 sslserver IPv4 IPv6 OpenSSL Libs © Dr. Erwin Hoffmann - FEHCom Listen: IP-Adresse, SMTPS (465) qmail-smtpd cdb Key Trust Stores TLS + Qmail/Spamcontrol | Server sslserver Syntax ! • sslserver -4 | -6 -I ifname -Rhp -x cdb \ -sevn -m \ -c connections \ -u user -g group \ Default ist immer IPv6 ! -l localhost \ IP-Adresse Port \ progX args progX server args DHFILE= CIPHERS= export KeyStore TrustStore VERIFYDEPTH= CRL CCAFILE =! KEYFILE= CERTFILE=! CERTCHAINFILE= ! CADIR= © Dr. Erwin Hoffmann - FEHCom Keystore und Truststore können pro IP-Verbindung gewählt werden! TLS + Qmail/Spamcontrol | Server Fall b) sslserver mit STARTTLS Unterstützung mod_ssl © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Server ucspi-ssl 0.94 • ucspi-ssl 0.94 ist Weiterentwicklung von Superscript’s ucspi-ssl 0.72 Unterstützung + CIDR Filterung von IP-Adressen • IPv6 • STARTTLS • Zulässig © Dr. Erwin Hoffmann - FEHCom nun auch ‚User’ Client-Zertifikate für SMTP TLS + Qmail/Spamcontrol | Server Fall c) X.509 Client Certificate based Authentication signiert CA Host/ User Signing Issuer DN: rootCA Subject DN: rootCA keyCertSign (critical) CA:True Signing encipherment Privater Schlüssel only ist 'online' b) a) • X509 none digital keyEncipherment dataEncipherment Repudiation Signature Issuer DN: rootCA Subject DN: intermediateCA Privater Schlüssel cCRLSign OCSPSign ist 'offline' Signature De(En)Cipherment decipherment only codeSigning emailProt serverAuth clientAuth Certs (+Keys) werden an Clients ausgeliefert • Server muss Stammzertifikat besitzen und dieses anbieten: • ClientCA MUA CA Host/ User © Dr. Erwin Hoffmann - FEHCom (CCA) + Key qmail-smtpd Zertifikat bitte! CCA=myCA Hello sslserver OpenSSL Libs CA cdb Key Trust CCA TLS + Qmail/Spamcontrol | Server Fall c) X.509 Client Certificate based Authentication Voraussetzungen • Eigene CA (self-signed Zertifikate sind ok) • Personengebundene X.509 Zertifikate werden erzeugt • Im DN des Client-Certs ist die Email-Adresse (des Benutzers) anzugeben • Das Client-Cert wird mit der (eigenen) CA signiert • Client-Cert + Keyfile (mit Passphrase geschützt) werden an die Benutzer/MUAs ausgerollt © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Server Fall c) X.509 Client Certificate based Authentication - Server • Eigenes CA Cert + Cert wird eingebunden. • sslserver wird angewiesen, Client-Cert anzufordern • Eigenes CA Cert (es können auch mehrere sein) werden an Client im erweiterten Handshake mitgegeben • Client wählt passendes CA Cert aus und teilt sein Cert mit • Server überprüft Client Cert gegen CA Cert und ob Client Key File vorliegt • Optionale • Keine © Dr. Erwin Hoffmann - FEHCom Überprüfung der Email-Adresse anschliessende SMTP Authentication ! TLS + Qmail/Spamcontrol | Client qmail-remote als TLS-Client • Anforderungen für qmail-remote: • ‚Passiver‘ TLS-Client: SMTPS Verbindungen auf Port 465 werden unterstützt (z.B. via sslclient, ssltunnel) • STARTTLS-fähiger Client: STARTTLS vom Server wird erkannt und in den TLS-Mode gewechselt • Überprüfender Client: X.509 Server-Zertifikate werden • validiert (Syntax, Signierung der DH-Parameter) • verifiziert (gegenüber einem bekannten CA Cert) • Common Name bzw. SAN gegenüber Hostname © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Client qmail-remote Architektur für qmail-remote wurde von mir von Grunde auf neu entwickelt und für Spamcontrol 2.6 implementiert • Die TLS-Implementierung ist allerdings ucspi-ssl, da dessen high-level APIs auch hier genutzt werden • Voraussetzung Kompilieren werden die ucspi-ssl Libraries eingebunden (und die von OpenSSL als Shared Libs) • Beim © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Fazit TLS-Konfiguration qmail-remote • Konfigurationsdatei: control/tlsdestinations UCSPITLS=„“ UCSPITLS=„!“ UCSPITLS=„-„ STARTTLS (?) für alle: *: .example.com: TLS mit CA Cert + Cipher: securityfirst.com:/etc/ssl/cafile||!SSLv2:HIGH TLS mit CA Dir: .remote.com:/etc/ssl/certdir/|3:465 TLS für Absender: mx.partner.com:/etc/ssl/partnerca||:26|mydomain.net TLS mit Host-Überprüfung: =mx.myfriend.com:/etc/ssl/cacert|4 -.adhonlydomain.com:|aNULL:!kRSA Anonymous DH: =*: hiddenpartner.org:||:35 TLS auf Port 35: TLS nicht für diesen: !nosslhost.example.com: qmail-remote erlaubt die Verwendung dedizierter Cipher pro Kommunikationspartner. Bedingt durch die Canonicalization ist der Trigger die ‚Mail From:‘ Adresse. © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Client TLS-Authentication mit qmail-remote • Bei geschäftskritischer Kommunikation sollte dem Partner ein X.509 Zertifikat angeboten werden • Konfigurationsdatei: control/domaincerts Server-Zertifikat: Domain-Zertifikat: *:mycert|mykey|mypassword example.com:thiscert|thiskey|thispassword qmail-remote erlaubt pro sendender Domain in ‚Mail From:‘ die Angabe eines dedizierten X.509 Zertifikates. ! Für Mailserver, die viele Domains hosten, kann statt eines Server- Zertifikates ein Domain-Zertifikat genutzt werden. © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Fazit Zusammenfassung bietet mit zusammen ucspi-ssl die weitgehende Nutzung von TLS für die SMTPKommunikation: • qmail/Spamcontrol • qmail-smtpd unterstützt unterschiedliche Key/ Trust-Stores pro Verbindung • Dies gilt auch für qmail-pop3d • qmail-remote • Besonderheit © Dr. Erwin Hoffmann - FEHCom bietet umfangreiches TLS tweaking ist die Domain-Konfiguration TLS + Qmail/Spamcontrol | Fazit Ausblick • qmail/Spamcontrol realisiert alle meine Anforderungen an die TLS-Kommunikation • Es fehlt noch die Einbeziehung der OpenSSL ALARM Mitteilung (bzw. dessen Ausgabe im Log) • Die Komplexität von qmail/Spamcontrol erlaubt keine Weiterentwicklung als Patch (➪ s/qmail) • IPv6 Integration ist notwendig • djbdnscurve6 © Dr. Erwin Hoffmann - FEHCom ist auf der Warteliste TLS + Qmail/Spamcontrol | Fazit Quellen • • • • • • • • • • • • • http://cr.yp.to/ucspi-tcp.html http://cr.yp.to/qmail.html http://www.qmail.org http://www.fehcom.de/qmail/qmailbook.html http://www.fehcom.de/qmail/smtptls.html http://www.fehcom.de/ipnet/ucspi-ssl.html http://www.fehcom.de/ipnet/ucspi-tcp6.html http://www.superscript.com/ucspi-ssl/index.html http://www.suspectclass.com/sgifford/ucspi-tls http://inoa.net/qmail-tls/ http://www.qmail-ldap.org/ http://www.fefe.de/qmail/ http://www.qmailtoaster.com/ © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Fazit Fragen ? Antworten ! anatol BADACH erwin HOFFMANN Technik der IP-NETZE 3. Auflage INTERNET-KOMMUNIKATION IN THEORIE UND EINSATZ EXTRA: Mit kostenlosem E-Book Im Internet: XXX © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Heartbeat Asymmetrische Verschlüsselung Privater Schlüssel Bereitstellung der Schlüssel Schlüsseltausch Methode SchlüsselBerechnung SchlüsselBeglaubigung Asymmetrische Verschlüsselung Ephemeral El Gamal Diskreter Logarithmus Elliptische Kurven Ephemeral DSS © Dr. Erwin Hoffmann - FEHCom Statisch Diffie-Hellmann Anonym Öffentlicher Schlüssel RSA RSA Faktorisierung in Primzahlen Fix TLS + Qmail/Spamcontrol | Heartbeat TLS Nachrichten a) RLHeader b) Daten eines Applikationsprotokolls verschlüsselt (optional) Nachricht(en) Protocol (1 Byte) Version (2 Byte) Length (2 Byte) MAC MP PL Hash-Wert Padding (optional ) Segment Segment Segment Kompression MACBerechnung MAC Verschlüsselung 20: ChangeCipherSpec Protocol Record Layer 21: Alert Protocol Header Protocol = 22: Handshake Protocol 23: Application Protocol (HTTP, ...) Record Layer Frame 24: Heartbeat Protocol (DTLS aber auch TLS) © Dr. Erwin Hoffmann - FEHCom TLS + Qmail/Spamcontrol | Fazit Heartbeart Funktion DTLSClient timer Zeit abgelaufen Internet ClientHello (epoch=0,seq=0) DTLSClient DTLSServer UDP Listen Flight 1 Flight 2 Flight 3 HelloVerifyRequest (epoch=0,seq=0,Cookie) Flight 3 ClientHello (epoch=0,seq=0) HelloVerifyRequest (epoch=0,seq=1,Cookie) a) ClientHello (epoch=0,seq=1,Cookie) Flight 4 Flight 5 b) © Dr. Erwin Hoffmann - FEHCom Internet ClientHello HelloVerifyRequest ClientHello DTLSServer UDP Listen ChangeCipherSpec Finished TLS Tunnel DTLSServer UDP Listen Internet ClientHello (....) ServerHello (Heartbeat_allowed_to send) ServerHello Certificate ServerKeyExchange CertificateRequest ServerHelloDone Certificate * ClientKeyExchange CertificateVerify * ChangeCipherSpec Finished DTLSClient Retransmissiontime = 0 Epoche 1 Heartbeat_Request (Type=1, Data=X, Padding) Heartbeat_Response (Type=2, Data=X, Padding) c) Record-Layer Frame (Type = 24) T = 1,2 PLen Epoche 2 Payload d) Padding TLS + Qmail/Spamcontrol | Heartbeat Heartbeart Funktion • sslserver hängt von OpenSSL ab. • Daher ist sslserver auch vom Heartbleed Bug in OpenSSL 1.0.1 betroffen … aber • er kann nicht ausgenutzt werden, da pro Client-IP eine sslserver-Instanz geöffnet wird (neuer Speicherbereich) und dieser auch nur für diesem Client. • Nach dem Lesen der CA Certs und des Keyfiles erfolgt die eigentliche Verbindungs-ver/entschlüsselung in einer chroot-Umgebung statt. • Diese werden für die aktuelle Verschlüsselung auch gar nicht benötigt; ausser zum Schlüsseltausch bei RSA (keine Perfect Forward Secrecy PFS). • Allerdings stehen die Certs im Kontext der SSL-Verbindung. © Dr. Erwin Hoffmann - FEHCom