Scrivo questa guida perché, trovatomi nella situazione di dover implementare questa funzione, non ho trovato nulla di veramente completo nello spiegare come. Come saprete se avete avuto a che fare con esso, postfix supporta delle estensioni, i cosiddetti “milters”. Ora ci tengo a precisare che le impostazioni che vi mostrerò sono dedicate alla mia configurazione che include opendkim e amavis-new. Il milter che consente di firmare tramite S/MIME si chiama signing-milter.
Nella fattispecie, bisogna farli agire in quest’ordine: amavis, signing-milter e infine opendkim. Lasciare opendkim per ultimo è importante perché bisogna assicurarsi che l’email non venga più toccata dopo la firma.
Iniziamo col procurarci un certificato dedicato alla firma delle email. StartSSL e Comodo li offrono gratuitamente. Consiglio Comodo perché i certificati possono essere revocati gratuitamente, mentre StartSSL si fa pagare 25$. signing-milter richiede che certificato e chiave privata siano in formato pem senza password. Per convertirli usiamo openssl:
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pem -nodes
Ora signing-milter, per associare i certificati alle email, utilizza un database statico in formato CDB. Immaginiamo di dover associare [email protected] al certificato /etc/signing-milter/email.pem. Per fare ciò, creiamo un file vuoto, ad esempio db.txt, e poniamo come prima riga:
+13,29:[email protected]>/etc/signing-milter/email.pem
Creiamo ora il database:
cdb -c signingtable.cdb db.txt
Ricordo che ogni processo che gestisce dati sensibili dovrebbe utilizzare un utente diverso. Creiamone uno per signing-milter e associamo ad esso i file:
adduser –system –no-create-home –group signingmilter
chown -R signingmilter:signingmilter /etc/signing-milter
chmod 500 /etc/signing-milter
chmod 400 /etc/signing-milter/*
Scaricate i sorgenti di signing-milter, compilateli e mettete il binario in /usr/sbin. Create uno script init.d per avviare il daemon all’avvio con questi parametri:
-g signingmilter -s inet:9991 -t 60 -u signingmilter -m /etc/signing-milter/signingtable.cdb
Questo creerà un milter sulla porta 9991. Se non usate amavis, aggiungete queste righe al main.cf:
smtpd_milters=inet:localhost:9991
non_smtpd_milters=inet:localhost:9991
Se usate amavis, invece, fate queste modifiche:
- togliete smtpd_milters e non_smtpd_milters dal main.cf
- togliete no_milters dalla config di amavis nel master.cf
- abilitate i milters nel master.cf aggiungendo sotto la riga da cui avete tolto no_milters:
-o smtpd_milters=inet:localhost:9991
-o non_smtpd_milters=inet:localhost:9991
Riavviate postfix e provate ad inviare una email. Tutto apposto?