Dovecot und Postfix mit PFS (Perfect Forward Secrecy)


Die Definition von PFS im Allgemeinen ist, dass die Kompromittierung eines verschlüsselten Nachrichtenaustausches es einem Angreifer nicht erlaubt, beliebige weitere verschlüsselte Nachrichten zu kompromittieren

Einrichten in Dovecot
Dovecot (zumindest ab 2.1.x) verwendet bereits PFS, die entsprechenden Einträge stehen nur nicht in den Logfiles.
Daher muss lediglich login_log_format_elements um %k erweitert werden. Der Eintrag wird entweder in /etc/dovecot/dovecot.conf oder /etc/dovecot/conf.d/10-logging.conf definiert:

login_log_format_elements = "user= method=%m rip=%r lip=%l mpid=%e %c %k"


Ältere Mailclients verwenden allerdings nicht immer DHE. Die Kompatibilität kann mit einer angepassten ssl_cipher_list erreicht werden. Ich verwende im Moment

ssl_cipher_list = DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ALL:!LOW:!SSLv2:!EXP:!aNULL

Einrichten in Postfix
Postfix benötigt zwei DHE-Schlüssel, die in die main.cf eingetragen werden müssen.

Erstellen der Schlüssel:

openssl gendh -out /etc/postfix/dh_512.pem -2 512
openssl gendh -out /etc/postfix/dh_1024.pem -2 1024

Anpassen von Postfix:

postconf -e "smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem"
postconf -e "smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem"
postconf -e "smtpd_tls_eecdh_grade = strong"
postconf -e "tls_preempt_cipherlist = yes"
postconf -e "smtpd_tls_loglevel = 1"
postconf -e "smtp_tls_loglevel = 1"

Durch tls_loglevels werden die wendeten Ciphers ins Logfile geschrieben.

Anschließend muss Postfix die geänderte Konfiguration einlesen.

postfix reload

Die Logs von Dovecot und Postfix können dann mittels grep nach DHE oder ECDHE durchsucht werden.

zegrep ".*with cipher" /var/log/dovecot.log | awk '{printf("%s %s %s %s\n", $14, $15, $16, $17)}' | sort | uniq -c | sort -n

zegrep "TLS connection established from.*with cipher" /var/log/mail.log | awk '{printf("%s %s %s %s\n", $12, $13, $14, $15)}' | sort | uniq -c | sort -n

Mit openssl kann PSF auch getestet werden:

openssl s_client -starttls smtp -connect example.com:25

openssl s_client -starttls smtp -connect example.com:143

Wichtig sind in der Ausgabe der SSL-Session Protocol und Cipher:

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384

Schreibe einen Kommentar

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