SSLv3 in Sendmail abschalten

Auch wenn der POODLE es nicht direkt auf SMTP-Verbindungen abgesehen hat, erinnert er doch nochmal daran, SSLv3 (und *hüstel* SSLv2) auch in MTAs abzuschalten.

Sendmail muss dafür mit _FFR_TLS_1 kompiliert sein, wodurch u. a. die Optionen 'CipherList' sowie  'ServerSSLOptions' und 'ClientSSLOptions' aktiviert werden. Das ist, obwohl FFR ("For Future Release"), auch bei Standardpaketen fast immer der Fall, prüfen:

[root@popc ~]# sendmail -d0.13 < /dev/null
[...]
FFR Defines: _FFR_TLS_1
[...]

Mit Hilfe von 'ServerSSLOptions' und 'ClientSSLOptionen' können unsichere Protokolle abgeschaltet werden ('+SSL_OP_NO_SSLv2', '+SSL_OP_NO_SSLv3'). Wer etwas mehr Kontrolle über die verwendeten Cipher erlangen möchte, kann zusätzlich '+SSL_OP_CIPHER_SERVER_PREFERENCE' setzen. Damit kann man zwar bestimmte Cipher nicht erzwingen, gibt aber für "normale" Verbindungen die bevorzugten Cipher auf der eigenen Server-Seite vor. Die überhaupt verfügbaren Cipher werden über die 'CipherList' gemäß OpenSSL cipherlist eingestellt.

Die Optionen stehen in der sendmail.mc unter 'LOCAL_CONFIG':

LOCAL_CONFIG
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3
O CipherList=HIGH:MEDIUM:!aNULL:!eNULL@STRENGTH

Update: Konfiguration in sendmail.mc ab Sendmail 8.15.1:

define(`confSERVER_SSL_OPTIONS', `+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE')dnl
define(`confCLIENT_SSL_OPTIONS', `+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3')dnl
define(`confCIPHER_LIST', `HIGH:MEDIUM:!aNULL:!eNULL@STRENGTH')dnl

Welche OpenSSL-Optionen eine Sendmail-Version unterstützt, ist im entsprechenden Source Code "dokumentiert".

Testen können wir die Konfiguration mittels OpenSSL, indem wir SSLv3 erzwingen:

[root@popc ~]# openssl s_client -connect popc:25 -starttls smtp -ssl3
CONNECTED(00000003)
139739854346056:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1257:SSL alert number 40
139739854346056:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596

Logeintrag:

Oct 19 00:33:12 popc sendmail[2949]: STARTTLS=server, error: accept failed=-1, SSL_error=1, errno=0, retry=-1, relay=popc [10.10.10.133]
Oct 19 00:33:12 popc sendmail[2949]: STARTTLS=server: 2949:error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number:s3_srvr.c:965

Natürlich gibt es auch heute noch Gegenstellen, die allerhöchstens SSLv3 sprechen. Da Sendmail nicht automatisch auf Klartext zurückfällt, wenn eine verschlüsselte Verbindung nicht funktioniert hat, werden von solchen Fällen betroffene Mails nicht zugestellt. Bekommt man dies mit, kann man für Server die Verwendung von TLS in der Access-DB abschalten:

Try_TLS:mail.domain.com                      NO  

Für Clients geschieht dies, indem ihnen STARTTLS nicht angeboten wird, ebenfalls in der Access-DB: 

Srv_Features:mailout.domain.com              S

Referenzen:

1. https://www.imperialviolet.org/2014/10/14/poodle.html

2. https://www.openssl.org/docs/apps/ciphers.html

3. https://www.openssl.org/docs/ssl/SSL_CTX_set_options.html