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