DomainKeys Identified Mail (DKIM) è una tecnologia che permette al server che spedisce un'email di firmarla digitalmente, garantendone l'autenticità sia del contenuto, sia del mittente. Questa è la guida rapida all'installazione e alla configurazione di DKIM su CentOS 7, semplificata e rivolta espressamente agli amministratori di sistema che vogliano implementare la caratteristica sui propri mailserver e webserver.
DKIM: firmare le mail per garantire il dominio del mittente
Tutti sappiamo bene quanto sia facile falsificare il mittente di una email: basta inserire nel client di posta il nome e l'indirizzo e-mail della persona della quale vogliamo rubare l'identità ed il gioco è fatto: potremo spedire lettere digitali a suo nome immediatamente, senza particolari limitazioni.
Sulla scia di questa debolezza intrinseca nasce il tristemente famoso phishing: e-mail truffaldine, all'apparenza provenienti da soggetti autorevoli, confezionate per rubare password ("bancarie", preferibilmente) e... denaro.
DKIM nasce per combattere questo tipo di falsificazioni: verificando la validità della firma elettronica applicata al messaggio, il ricevente può essere certo che il dominio di provenienza (la parte dopo la "@" nell'indirizzo e-mail) del mittente sia veramente quello indicato e non si tratti di un truffatore che sta applicando la tecnica di falsificazione basilare ricordata poco fa.
Gli esempi: PayPal e TurboLab.it
PayPal, celebre servizio per inviare denaro via Internet, utilizza DKIM per autenticare le comunicazioni via posta elettronica inviate ai titolari dei conti: tutte le e-mail genuine che abbiano come mittente @paypal.com (oppure @paypal.it e varie localizzazioni nazionali) sono dotate dell'apposita firma DKIM.
Questa accortezza consente di distinguere facilmente le e-mail legittime (firmate digitalmente e con una firma valida) da quelle di phishing che tentino di sottrarci indebitamente le credenziali di accesso (quasi sempre senza firma o, comunque, con firma DKIM invalida).
Anche qui su TurboLab.it DKIM è attivo e funzionante da qualche tempo: tutte le newsletter, le notifiche del forum e le altre missive che abbiano come mittente @turbolab.it contengono una "firma nascosta" che garantisce al ricevente di essere davanti ad una comunicazione autentica.
Gmail, ad esempio, mostra questa informazione come campo Firmata da
(raggiungibile cliccando sulla freccetta verso il basso subito sotto il nome del mittente):
Thunderbird può mostrare gradevoli indicazioni colorate installando l'estensione DKIM Verifier
La funzione secondaria: schivare i filtri anti-spam
Ma c'è anche un altro incentivo che dovrebbe spingere gli amministratori di sistema ad implementare DKIM: le mail firmate tendono ad essere classificate meno come "spam" dai meccanismi di filtraggio automatico (qui la raccomandazione di Google), persino da quelli particolarmente aggressivi adottati da Hotmail/Outlook.
Quindi: se il mailserver viene usato anche per invii massivi di newsletter o simili, DKIM risulta particolarmente importante per evitare di non riuscire a raggiungere i propri destinatari.
Prima di cominciare..
Per installare e configurare DKIM sono necessari i privilegi di root: per non incappare in inutili problemi, raccomando di accedere direttamente con questo account (i più intraprendenti possono usare un account "regolare" e far precedere i comandi da sudo
, ma non ho testato questo scenario).
Aprite quindi un'istanza di terminale (seguite il menu Applications -> Accessories -> Terminal
se vi trovate in ambiente grafico) e assicuratevi che l'interfaccia di rete sia abilitata e la macchina possa accedere ad Internet. Per impostazione predefinita, infatti, così non è.
La guida sottintende l'uso di Postfix, ovvero l'agente mail (MTA) attivo di default su CentOS 7. Per verificare la presenza del relativo demone, basta impartire systemctl status postfix
e sincerarsi che venga riportata l'indicazione Active
Assicuratevi inoltre che, in questo momento e senza DKIM, Postfix stia effettivamente consegnando le email inviate: per farlo, usate il comando "mail" per spedire un messaggio di test al volo. Così non fosse (verificate anche nella cartella "spam" del ricevente, poichè quello non dipende da Postfix), dovete prima risolvere il problema con Postfix stesso.
Infine: è necessario abilitare una sorgente software addizionale. Per la procedura completa, si veda "Guida: abilitare il repository "Extra Packages for Enterprise Linux" (EPEL) su CentOS".
Installare OpenDKIM
Per prelevare dal repository EPEL e installare automaticamente il pacchetto OpenDKIM, basta impartire yum install opendkim -y
Subito dopo, eseguite systemctl enable opendkim
di modo che il servizio venga avviato automaticamente ad ogni reboot della macchina.
Generare le chiavi
DKIM funziona grazie ad un coppia di chiavi crittografiche. La prima, da custodirsi privatamente sul server, consente di firmare le email. La seconda, da esporre pubblicamente come record DNS (come spiegato in seguito) permette ai destinatari di verificare la validità della firma apposta dal mittente.
Prima di poter generare queste chiavi, create la cartella che dovrà ospitarle. Per quanto riguarda TurboLab.it, ho lanciato il seguente comando (scegliete, ovviamente, un nome per l'ultima cartella appropriato al vostro dominio, come mionome.it oppure nomeazienda.com):
mkdir -p /etc/opendkim/keys/turbolab.it
Passiamo a generare la coppia di chiavi:
/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/turbolab.it/ -d turbolab.it -s default
L'opzione -D
consente di indicare in quale cartella salvare (ho scelto quella creata poco fa), mentre -d
indica il nome a dominio sul quale andranno impiegate dette chiavi. -s
permette di specificare un nome a piacere come selettore, ma scegliere qualsiasi cosa diversa da default
significa, generalmente, complicarsi la vita inutilmente.
L'utilità genera i file default.private
(chiave privata) e default.txt
(chiave pubblica): potete ispezionarne il contenuto con cat /etc/opendkim/keys/turbolab.it/default.private
e cat /etc/opendkim/keys/turbolab.it/default.txt
.
In questo momento, le chiavi appena create sono accessibili solo dall'utente root: per renderle leggibili anche dal demone che dovrà effettivamente utilizzarle, impartite
chown -R opendkim:opendkim /etc/opendkim/keys
opendkim.conf
Impartite vi /etc/opendkim.conf
per aprire il file di configurazione principale del servizio. Premete la lettera i
sulla tastiera per abilitare la modifica del documento, poi spostatevi (tramite le frecce di direzione della tastiera) in corrispondenza dei valori seguenti, modificandoli come indicato.
Mode v
(riga 20 circa): deve divenireMode sv
per attivare l'apposizione della firma#KeyTable /etc/opendkim/KeyTable
(riga 70 circa): eliminate il carattere di cancelletto iniziale. Deve rimanere soloKeyTable /etc/opendkim/KeyTable
#SigningTable refile:/etc/opendkim/SigningTable
(riga 75 circa): eliminate il cancelletto iniziale#ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
(riga 79 circa): eliminate il cancelletto iniziale#InternalHosts refile:/etc/opendkim/TrustedHosts
(riga 82 circa): eliminate il cancelletto iniziale
Per prevenire problemi di permessi, portatevi in fondo al file e aggiungete queste due nuove righe:
# Disabilita il fail se le chiavi sono accessibili ad altri
RequireSafeKeys false
Premete Esc
per uscire dalla modalità di modifica e salvate tutto con :x
.
KeyTable
Lanciate vi /etc/opendkim/KeyTable
per aprire il file che indica a OpenDKIM dove trovare la chiave privata con la quale firmare le email in uscita. Premete i
per modificare, poi spostatevi in fondo al file con le frecce direzionali e inserite una nuova riga. Per quanto riguarda TurboLab.it, ho messo quanto segue:
default._domainkey.turbolab.it turbolab.it:default:/etc/opendkim/keys/turbolab.it/default.private
Ovviamente, sostituite a turbolab.it
il vostro specifico nome a dominio e notate che il percorso finale è quello che porta al file default.private
generato all'inizio da opendkim-genkey.
Premete Esc
per uscire dalla modalità di modifica e salvate tutto con :x
.
SigningTable
Lanciate vi /etc/opendkim/SigningTable
: questo è il file che risponde alle domande: le mail provenienti da quale mittente devono essere firmate? con quale firma? Premete i
per modificare, quindi spostatevi immediatamente alla fine e inserite una riga simile a questa:
*@turbolab.it default._domainkey.turbolab.it
Di nuovo, sostituite a turbolab.it
il vostro specifico nome a dominio e notate che, con la dicitura *@turbolab.it
, tutte le missive provenienti da indirizzi @turbolab.it verrano firmate. In caso vogliate firmare solo alcuni mittenti (magari amministrazione@ e/o contratti@) inserite solamente due specifiche righe distinte:
amministrazione@turbolab.it default._domainkey.turbolab.it
contratti@turbolab.it default._domainkey.turbolab.it
Con questa seconda modalità "senza asterisco", la email di qualsiasi altro mittente (segreteria@, informazioni@ eccetera) verranno inviate senza firma DKIM.
Per il resto, non c'è altro da modificare.
Premete Esc
per uscire dalla modalità di modifica e salvate tutto con :x
.
Integrazione con Postfix
Ora che la configurazione di OpenDKIM è completa, dobbiamo impostare l'agente mail Postfix affinchè vi si interfacci e ne usi le funzionalità. Eseguite vi /etc/postfix/main.cf
, entrate in modifica con la lettera i
, spostatevi alla fine del file e copia-incollate acriticamente quanto segue:
# Questa sezione abilita l'integrazione con OpenDKIM
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
Avvio e test del servizio
Avviate OpenDKIM con systemctl start opendkim
e ricaricate la configurazione di Postfix con postfix reload
.
Per verificare che il meccanismo sia funzionante, tenete d'occhio il log della posta in uscita con tail -f /var/log/maillog
. Frattanto, aprite un'altra finestra di terminale (usate Ctrl+Alt+F2
se siete in ambiente testuale, quindi "saltate" alla shell precedente con Ctrl+Alt+F1
) e usate quest'ultima per spedirvi una email tramite il server come fareste di consueto (per farlo "al volo" con il comando mail, vedi "Spedire email da linea di comando su CentOS con "mail": esempi pratici"). Indipendentemente dalla strada scelta, abbiate l'accortezza di utilizzare, come email del mittente, un indirizzo/dominio per il quale avete configurato DKIM, oppure la firma non verrà applicata.
Se avete fatto le cose per bene, maillog riporterà, fra le molte informazioni, anche l'indicazione DKIM-Signature field added
:
In questo caso... complimenti! la configurazione del server è completata. Non preoccupatevi se i riceventi non riconoscono la firma DKIM (e, magari, la spostano nello spam!): è assolutamente normale, e dipende solamente dal fatto che non avete ancora inserito la chiave pubblica nel record DNS, operazione che svolgeremo al passo successivo
Inserire la chiave pubblica come record DNS
L'ultimo tassello per rendere operativo DKIM è la pubblicazione della seconda chiave, quella necessaria per la verifica della firma, sottoforma di record DNS.
Come prima cosa, recuperate suddetta chiave pubblica dal file generato all'inizio dall'utility opendkim-genkey, adattando opportunamente il percorso del seguente comando:
cat /etc/opendkim/keys/turbolab.it/default.txt
(fate attenzione ad usare il file giusto, default.txt
! Nella stessa cartella è presente infatti anche default.private
che, come dettagliato in precedenza, deve rimanere privato)
Ora che avete la chiave pubblica, si pone il problema di come inserirla nel DNS.
Se utilizzare un server DNS autoritativo sotto il vostro completo controllo, l'operazione è semplicissima e si riduce ad inserire suddetto record nell'opportuna zona di BIND o simili.
Se, al contrario, usate un servizio di terze parti.... l'operazione varia da provider a provider: il supporto Aruba ci ha confermato tramite ticket che "i record DKIM non sono supportati dal nostro dns e non possono essere gestiti o inseriti neppure a livello di eccezione". L'operatrice di prevendita di Register.it ha risposto (in modo non troppo rassicurante) al telefono che "è possibile farlo aprendo un ticket".
Fra i vari soggetti interpellati, l'unico che mette in campo nativamente tutto il necessario per gestire DKIM sul DNS è Ovh.it: basta accedere al Manager, seguire Zona DNS
e aggiungere un record Tipo DKIM
A questo punto, inserite nel campo Per il sottodominio
la stringa default._domainkey.
seguita dal vostro nome a dominio (noi abbiamo usato, quindi, default._domainkey.turbolab.it
).
Nell'area sottostante, bisogna invece inserire solo k=rsa; p=XXXXX
, sostituendo alle X
il valore presente nel file default.txt
che avete appena recuperato.
Ad esempio: come si vede nello screenshot poco più sopra, il comando cat /etc/opendkim/keys/turbolab.it/default.txt
ha mostrato il seguente contenuto:
default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0_eccetera_eccetera" ) ; ----- DKIM key default for turbolab.it
Ecco quindi che nel pannello di controllo di Ovh ho incollato
k=rsa; p=MIGfMA0_eccetera_eccetera
Non devono essere presenti apici o doppi-apici.
Completate l'inserimento, attendete 48 ore per dar tempo a tutti i server di recepire l'informazione e l'infrastruttura dovrebbe essere completa al 100%
Come ulteriore test, spedite una mail di prova a check-auth@verifier.port25.com
: vi risponderà (all'indirizzo del "mittente" della mail di test) un automatismo, fornendovi molte indicazioni utili, compresa la validità della firma DKIM.
Riconoscimenti e maggiori informazioni
Questa guida è basata in larga parte sull'ottimo lavoro di Steve Jenkins, l'esperto che, inoltre, cura la pacchettizzazione di OpenDKIM per il repository EPEL. A lui va il nostro ringraziamento per il lavoro svolto, grazie al quale noi tutti possiamo recuperare il software via Yum invece di impazzire con compilazioni e installazioni manuali.
L'altro fondamentale riconoscimento va alla community di OpenDKIM.org che programma e mantiene questo portentoso strumento gratuito. Sul loro sito, fra l'altro, è disponibile anche la documentazione completa con la spiegazione estesa di tutti i singoli parametri di configurazione.
Appendice: se lo stesso server serve più domini...
In caso il vostro server spedisca mail per conto di molteplici domini diversi, potete gestire la situazione senza problemi.
Innanzitutto, sappiate che, fino a quando non completerete ulteriori configurazioni, solo le email che abbiano come mittente lo specifico dominio fin qui configurato verranno effettivamente firmate. Tutte le altre spedite dal server, ma con mittente diverso, non verranno mai firmate automaticamente con la stessa chiave.
D'altro canto, nel caso in cui vogliate effettivamente validare con DKIM anche le email spedite da altri domini presenti sullo stesso server, basta ripetere gli stessi passaggi, accodando nuove righe ai file di configurazione. Brevemente: per configurare un ipotetico esempio.com sullo stesso server sul quale abbiamo appena concluso il setup di turbolab.it faremo:
mkdir -p /etc/opendkim/keys/esempio.com
/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/esempio.com/ -d esempio.com -s default
chown -R opendkim:opendkim /etc/opendkim/keys
Il file /etc/opendkim/KeyTable
avrà due righe, una per turbolab.it e una per esempio.com:
default._domainkey.turbolab.it turbolab.it:default:/etc/opendkim/keys/turbolab.it/default.private
default._domainkey.esempio.com esempio.com:default:/etc/opendkim/keys/esempio.com/default.private
Anche il file /etc/opendkim/SigningTable
avrà due righe:
*@turbolab.it default._domainkey.turbolab.it
*@esempio.com default._domainkey.esempio.com
Per completare:
- Riavviate OpenDKIM con
systemctl restart opendkim
- Ricaricate la configurazione di Postfix con
postfix reload
- Inserite la chiave pubblica nel DNS di esempio.com
Ricordate: in caso di problemi, il miglior modo per diagnosticare è quello di terner d'occhio il log (tail -f /var/log/maillog
) mentre inviate mail dal dominio che state configurando.