Forward secrecy in Postfix

È possibile implementare la forward secrecy anche nelle sessioni TLS di Postfix.

Questa guida parte dal presupposto che Postfix abbia TLS configurato e funzionante, non importa se con un certificato auto-emesso o rilasciato da un’autorità PKI, e si applica alla versione 2.10, le versioni precedenti potrebbero aver bisogno di qualche aggiustamento dei parametri, come indicato nel readme apposito.

Lo scopo è di avere delle chiavi di sessione effimere con una vita relativamente breve al fine di rendere più ardua la cosiddetta retrospective decryption attraverso una rigenerazione periodica dei parametri p e g dell’algoritmo Diffie-Hellman per lo scambio di chiavi.

Se si compila Postfix sul proprio server è consigliabile avere OpenSSL 1.0.0 o successiva; dal momento che alcune versioni non aggiornate di RedHat/CentOS possono avere il protocollo ECDHE disabilitato per dubbi (ora risolti) sul copyright dell’algoritmo, è bene comunque verificare con il comando

openssl ciphers -V 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA256 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EDH+aRSA EECDH RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'

Per default, dalla versione 2.8 Postfix supporta nativamente le curve ellittiche, ma è bene verificare che il parametro smtpd_tls_eecdh_grade sia impostato a strong (il default) oppure non sia indicato.

Nel file main.cf aggiungere (o modificare) questi parametri:

smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem
smtpd_tls_dh512_param_file = /etc/postfix/dh512.pem

Se qualche client dovesse dare errore potrebbe essere perché non supporta i parametri EDH a 2048 byte; per aggirare il problema modificare il submission in master.cf aggiungendo questi parametri

        -o smtpd_tls_dh1024_param_file=/etc/postfix/dh1024.pem
        -o smtpd_tls_security_level=encrypt
        -o smtpd_sasl_auth_enable=yes

e utilizzare sul client la porta submission per inviare la mail.

Per rigenerare periodicamente i parametri EDH creare uno script simile a questo

#!/bin/bash
cd /etc/postfix
openssl dhparam -out dh512.tmp 512 && mv dh512.tmp dh512.pem
openssl dhparam -out dh1024.tmp 1024 && mv dh1024.tmp dh1024.pem
openssl dhparam -out dh2048.tmp 2048 && mv dh2048.tmp dh2048.pem
chmod 644 dh512.pem dh1024.pem dh2048.pem

ed eseguirlo con i privilegi di root. Una frequenza di una volta la giorno è ragionevolmente sicura, i più paranoici possono rigenerare i parametri più spesso. In una macchina virtuale di medie performance la rigenerazione richiede al massimo due o tre minuti; è ovviamente consigliabile disporre di una buona fonte di entropia.

Non è necessario ricaricare Postfix dopo aver rigenerato i parametri EDH.

Se si desidera indicare negli header dei messaggi le caratteristiche della sessione TLS aggiungere la riga

smtpd_tls_received_header = yes

al file main.cf

La lettura di questo articolo aiuta chi volesse approfondire ulteriormente il tema.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Un pensiero riguardo “Forward secrecy in Postfix”

Spazio per un commento