SPF e DKIM politiche per una posta sicura

Introduzione

Un buon uso della posta elettronica richiede la configurazione di una serie di strumenti al momento in cui il dominio viene attestato presso un sistema. Le statistiche degli utlimi anni ci dicono che la maggior parte della posta elettronica che circola è spam e come tale è necessario un sistema posto davanti al nostro mail server per proteggerci e marcare la posta indesiderata. Posto che questo non deve mai farci rinunciare alla presenza di un buon software antivirus sul nostro PC o dispositivo da cui accediamo al servizio, nè alle buone regole di consultazione che ci dicono di non leggere, ma soprattutto di NON ESEGUIRE ALLEGATI DA MESSAGGI DI CUI NON SIA CONOSCIUTA CON CERTEZZA LA PROVENIENZA.
Anche il rischio che qualcuno possa inoltrare posta usando come mittente il nostro dominio, operazione ovviamente fraudolenta, è pratica da contrastare. Per questo esistono da tempo strumenti atti a contrastare questa pratica e a verificare l’identità del servizio o sistema che spedisce e riceve posta elettronica per nostro conto. Vediamo cosa si può fare in concreto.
Una buona configurazione di base di un sistema, sia che usi strumenti di controllo delle mail professionali e licenziati, piuttosto che opensource, prevede alcune configurazioni di base, a partire dalla reputazione dell’IP del nostro servizio di posta, la sua assenza da Blacklists e avere impostato correttamente un nome a dominio e il suo reversal.
Ma gli strumenti di cui tutti oggi parlano hanno un nome ben preciso SPF ovvero il Sender Policy Framework e DKIM, DomainKeys Identified Mail.

SPF e il suo utilizzo
Il protocollo SPF, lavora a livello di SMTP e richiede la modifca della configurazione del DNS che gestisce il nostro dominio, consente di certificare e verificare che l’IP del server di posta che invia le nostre mail, sia effettivamente autorizzato a farlo. Questo meccanismo è usato per prevenire un uso fraudolento di un nome di dominio e evitare che un terzo soggetta possa inviare mail a nome nostro. E’ uno strumento molto efficace contro il PHISHING, da cui sono bersagliate molte compagnie e banche. Avere questo controllo e rifiutare mail che non implementano questo protocollo, consente di ridurre moltissimo che questi tentativi di frode. Fortunatamente questa pratica si sta rapidamente diffondendo.
Vediamo una piccola overview peraltro molto documentata su web. Per configurare il record SPF, serve creare un RECORD TXT per il nostro DNS con una specifica sintassi. E’ più facile spiegarlo con un esempio, vediamo come implementare l’HardFail:

v=spf1 ip4:x.yz.k include:miodominio.it -all

Con ip4 si intendono gli indirizzi IPv4 degli host che sono autorizzati ad inviare la posta in uscita per quello specifico dominio, nel nostro caso siglato x.y.z.k. Il comando include indica i nomi a dominio per cui valgono le regole che stiamo configurando. Particolare attenzione va posta al -all, la sua sintassi è delicata e bisogna sapere qual è il suo funzionamento, vediamo allora il significato dei qualificatori che si possono utilizzare:

* -all (HardFail) si indica che tutti gli altri server NON sono autorizzati all’invio (porre attenzione a qusto comando)
* ~all (SoftFail) indica che sono esclusi dall’autorizzazione tutti gli altri indirizzi IP non indicati nella sintassi, ma che il messaggio può essere accettato purché venga marchiato e il filtro antispam effettui ulteriori controlli sull’IP di provenienza
* ?all (Netutral) il valore viene impostato ma non si sa nulla sulla validità dei sender e la posta viene comunque fatta passare.

Vediamo un altro esempio per chiarire alcune configurazioni leggermente diverse che si possono trovare:

v=spf1 mx a:mx.miodominio.it include:miodominio.it –all

In questo caso viene aggiunta la dicitura mx, che indica che i server che ricevono la posta in ingresso (MX) del dominio sono autorizzati anche a spedire i messaggi, a:mx.miodominio.it indica che anche la macchina attestata su miodominio.it è autorizzata all’invio.
C’è da dire che la configurazione più gettonata e non spesso quella giusta prevede che al posto del comando –all, si utilizzi il ~all, che indica che sono esclusi dall’autorizzazione tutti gli altri indirizzi IP non indicato nella sintassi, ma che il messaggio può comunque essere accettato purché venga marchiato e il filtro antispam effettui ulteriori controlli sull’IP di provenienza. E’ una configurazione “prudente” e può essere utile quando non si è certi che l’utiilizzatore del nome a dominio possa usare altri servizi per spedire la propria posta lecitamente.

DKIM e la sua implementazione
DKIM, a differenza di SPF, si occupa della certificazione del contenuto di una mail, verificando la firma del messaggio, confrontando la sua chiave pubblica, ottenuta sempre da una entry nella nostra zona DNS. In pratica permette l’analisi del contenuto del messaggio, cosa che si può capire con un banale esempio: come se nella posta tradizionale l’ufficio postale del mittente sigillasse il contenuto e applicasse una firma a sigillo del messaggio. Se il corriere o chiunque altro decide di modificare il contenuto del pacco rovinerà il sigillo e quindi la firma e questo diventerà evidente. Per verificare l’autenticità dobbiamo aprire il pacco e controllare il contenuto, in pratica si verifica una firma applicata alla partenza.
Per configurare DKIM vediamo come farlo su un server GNU/Linux che utilizza il servizio opendkim e come mail server postfix, ma è possibile farlo in modi diversi. In pratica bisogna istruire il nostro sistema a marcare con DKIM le mail in uscita per il nostro dominio e a controllare e assegnare un punteggio, a sua volta, a quelle ricevute, abilitando l’apposito plugin.

Installazione del tool
# apt-get install opendkim opendkim-tools

Configurazione opendkim
# vi /etc/opendkim.conf
Domain miodominio.it
KeyFile /etc/postfix/dkim.key
Selector mail
SOCKET inet:[email protected]

Configurazione opendkim default
# vi /etc/default/opendkim
SOCKET=”inet:[email protected]
DAEMON_OPTS=”-b s”

Configurazione Postfix
# vi /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Generazione della chiave
# mkdir /etc/posfitx/dkim
# opendkim-genkey -t -s mail -d miodominio.it -D /etc/posfitx/dkim

A questo punto abbiamo generato due file:
mail.private: contiene la la nostra chive privata, si può specificare con dimensioni diverse
mail.txt: mail._domainkey IN TXT ( “v=DKIM1; k=rsa; t=y; ” “p=MIGf7SG6tDE2O…..” ) ; —– DKIM key mail for agenziacifi.i
Il valore specificato da mail.txt, dove mail è il nome del nostro selector, ma può essere ovviamente diverso a seconda della scelta, deve essere insrito come record TXT nella sintassi del nostro DNS, in questo modo:

mail._domainkey TXT v=DKIM1; k=rsa; t=y; ” “p=MIGf7SG6tDE2O…..

Ma vediamo nel dettaglio la sintassi per DKIM:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=miodominio.it s=gamma;
h=domainkey-signature:mime-version:received:received:date:message-id:subject:from:to:content-type;
bh=3dtcsaBBe3YbhnaGEPA92vWCVzfXE0dA8hGfdQbZDYU=; b=OTAPmIyqYGpUujENorUHA92vWCVzfXE0dA8hROVDgPMzk3rdVEvT8ZilljCpFRYTZVR72O62lSUFxYMHJX4n23hab1JebPe7uCmyY+zTMj8R7KWzLqqATktFy+ZS7OPQKsIh59ncnK4a2cZZPgEPe8Zn8DUfuJrUHA92vWCVzf=

dove:

a = algoritmo di firma
d = dominio corrispondente alla firma
h = lista degli header inclusi nella firma
b = la firma stessa

Attenzione solo ad implementare nel modo corretto il sistema e fare verifiche nell’header della mail sul reale e corretto passaggio di mail firmate DKIM, se invece non vengono riconosciute come tali è potenzialmente un danno perchè le mail possono venire respinte. Se presente la firma deve essere correttamente implementata e configurata, per fare verifiche più appronfondite ci sono servizi come www.mail-tester.com e dkimvalidator.com.

Conclusioni

Dal punto di vista della loro implementazione questi due servizi sono simili, in entrambi i casi il nostro sistema istituisce una sorta di posto di blocco, in cui SPF e DKIM effettuano una serie di controlli e stabiliscono se il messaggio è autenticato o meno e a quindi diritto di passare.
Per il mittente, le cose sono invece un po’ diverse, SPF prevede che venga inserita nel DNS un record TXT che implementa un meccanismo per stabilire se un particolare server di posta mittente sia autorizzatoo meno a spedire mailper quel dominio; DKIM, prevede invece sia modifiche sulla zona DNS per inserire un record che contenga la chiave pubblica del firmatario, sia modificare ogni mail che parte/transita dai propri sistemi firmandola e questo viene fatta aggiungendo alla catena mail un apposito servizio (opendkim).
Resta il fatto che per poter usare la posta elettronica, spesso con i grandi provider e servizi di posta, questi due sistema diventano indispensabili, pena il rifiuto o il tag come spam delle nostre mail. Chiedete al vostro provider o gestore del dominio di posta l’implementazione del servizo SPF e DKIM.