• cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO A WEBAREA? CLICCA QUI E REGISTRATI !

Creare un record DKIM per verificare l’autenticità del contenuto della mail ed inviare una email senza rischio spam

di :: 17 maggio 2018

Creare un record DKIM per verificare l’autenticità del contenuto della mail

DKIM (Domain Keys Identified Mail)

Dopo aver visto come configurare un record SPF per autenticare il mittente, occupiamoci adesso di DKIM, cioè di un metodo utilizzato per verificare l’integrità e l’autenticità del contenuto della mail.

DKIM, in poche parole, certifica il contenuto della mail. Yahoo, Gmail e altri servizi di posta utilizzano email firmate con DKIM.

DKIM è una firma criptata che viene aggiunta all’intestazione ("header") del messaggio da parte del mail server che invia la email (ad esempio Postfix), ed utilizza a questo scopo:

  • una chiave privata, associata al dominio, salvata sul mail server che invia la email
  • una chiave pubblica salvata in un record TXT del DNS del dominio

In estrema sintesi vediamo come funziona DKIM:

  1. Il messaggio in uscita viene controllato dal mail server dedicato all'invio, ad esempio POSTFIX, e se il dominio mittente, presente nell’header "From", è presente nella configurazione di DKIM, verrà aggiunto al messaggio un nuovo Header chiamato "DKIM-SIgnature" utilizzando la chiave privata: è la firma apposta alla mail.
    Questo è un esempio codice aggiunto da DKIM nell'header della nostra email.
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=miosito.it; s=default;
     t=1525422742; bh=xXtulKcDtfvlKnswskIHrI4/8SNaNFckGCK1fCGLL3E=;
     h=Date:From:To:Subject;
     b=QHhpSTr76HK6BRf1I65ghSIyOJc9vuzQfAY6Ka9ULK2kiEOVAfz3TBL5X8HkeJK3z
     HrgSzSbROEPHEPGuGnzU+LkmDegBGz86yGJzVumGuUkDwL5f/Pq9yszuo0DNn33eWr
     fcW9Dg3lkR8zI8L9115/vyL0k8iq/uym+5W5doUYnv2VjnViBNMFok8/m5i94iez6K
     FSnaUpZFARTDgJiRhKlZObCW1RczqUDQyxshfYPS4R1rDiigbx43AYefC36mXuyDSx
     iy6DVfFIMviHAoZ2Q4nOzTFKhUdOHDt6zuk2Pz2hwSGRd38BGkHUWXYor05sImfuwt
     mZrDSXkKJGjmw==

    La firma vera e propria è la stringa contenuta nel parametro "b" (QHhpSTr76HK6BRf .....)

  2. Cosa contiene questa firma?
    Questa firma viene generata utilizzando alcune parti del messaggio. Gli elementi presi in considerazione dalla firma sono quelli indicati dal parametro "h". Nel nostro esempio, come potete vedere, sono la data di invio "date", il mittente "from", il destinatario "to", e l'oggetto "subject". La scelta degli elementi viene effettuata nella configurazione di DKIM (oppure si lasciano quelli previsti di default).
    Questi elementi vengono quindi criptati usando la chiave privata, e così viene così generata la firma, cioè la stringa contenuta nel parametro "b".

  3. Da questo momento in poi il contenuto del messaggio non potrà più essere modificato. In caso contrario l'header DKIM non corrisponderebbe più.
  4. Il server che riceve il messaggio effettua una query DNS, recupera la chiave pubblica, decripta la firma, e verifica che gli elementi decriptati ("date", "from", "to", "subject") corrispondano con quelli presenti nella email.
  5. In questo modo è possibile verificare l’autenticità della mail, il dominio di invio, e l'integrità del contenuto della mail.

DKIM è piuttosto complicato da configurare, ci sono molti passaggi da seguire, che adesso vediamo assieme, e richiede qualche competenza nella gestione del mail server Postfix, che utilizzeremo come server di invio mail.

Nella nostra configurazione utilizziamo Centos come server, e Postfix come server mail. Il dominio della mail che vogliamo firmate è ad esempio "miosito.it"

1: installa il pacchetto OPENDKIM

# yum install opendkim

2: Aggiungi l'utente postfix al gruppo opendkim

# gpasswd -a postfix opendkim

3: Modifica il file di configurazione "opendkim.conf"

# vi /etc/opendkim.conf

Le parti principali da editare sono queste (se commentate, decommentare queste istruzioni)

Canonicalization   relaxed/simple
Mode               sv
UserID	opendkim:opendkim
Socket	inet:8891@localhost
KeyFile	/etc/opendkim/keys/default.private
KeyTable	/etc/opendkim/KeyTable
SigningTable	refile:/etc/opendkim/SigningTable
ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
InternalHosts	refile:/etc/opendkim/TrustedHosts

4: Modifica il file "KeyTable"

In questo file viene indicato a OpenDKIM dove sono le chiavi, cioè il percorso ("path") alla chiave privata presente nel server

# vi /etc/opendkim/KeyTable

Al suo interno modifica "example.com" con il tuo dominio, ad esempio "miosito.it" (e togli il commento)

default._domainkey.miosito.it miosito.it:default:/etc/opendkim/keys/default.private

5: Modifica il file "SigningTable"

In questo file definiamo a quali mittenti verrà apposta la firma alla mail e quali selettore usare

# vi /etc/opendkim/SigningTable 

Nel nostro caso applichiamo la firma a tutti i mittenti del dominio "miosito.it", utilizzando la wildcart asterisco "*", ed utilizziamo il selettore "default"

*@miosito.it default._domainkey.miosito.it

Nota: è possibile usare la wildcard * solo se nel file di configurazione opendkim.conf l'opzione SigningTable utilizza il prefisso "refile:" prima del filename (come nella nostra configurazione).

6: Modifica il file "TrustedHosts"

In questo file deinifiamo gli IP e i domini da considerare attendibili e a cui apporre la firma alle mail

# vi /etc/opendkim/TrustedHosts

Utilizziamo la wildcard * per considerare attendibili anche tutti i sottodomini di miosito.it, oltre che il dominio miosito.it

127.0.0.1
::1
*.miosito.it

7: Genera la coppia di chiavi pubblica e privata

Per generare le chiavi è utilizzare lo strumento opendkim-genkey che consente un maggior controllo sulla sua creazione

# opendkim-genkey -b 2048 -d miosito.it -D /etc/opendkim/keys -s default -v

Con questo comando:

  • con l'opzione "-b" generiamo una chiave a 2048 bits
  • con "-d" specifichiamo il dominio a cui fanno riferimento le chiavi generate
  • con "-D" specifichiamola directory dove salvare le chiavi
  • con "-s" inchiamo il selettore, cioè una parola univoca che viene associata ad entrambe le chiavi, pubblica e privata, inclusa in tutte le firme e pubblicata nei record DNS. Per semplicità usiamo la parola "default", ma potete scegliere anche un'altra parola a vostro piacimento.

Nella directory "/etc/opendkim/keys/" verranno generati i seguenti file:

  • default.private: è la chiave privata per il dominio. Nel file "KeyTable" va indicato il percorso a questo file.
  • default.txt: è la chiave pubblica che tra poco pubblicheremo nel record DNS (TXT) nel dominio

Aassegna alla chiave primaria a "opendkim", sia come proprietario sia come gruppo,

# chown opendkim:opendkim /etc/opendkim/keys/default.private

Per tua conoscenza, esiste un altro strumento di creazione delle chiavi, opendkim-default-keygen, ma preferiamo usare il precedente

# opendkim-default-keygen

8: Modifica il file di Postfix "main.cf"

Adesso dobbiamo "agganciare" Postfix ad OpenDkim: per questo motivo modifichiamo il file di configurazione di postfix

# vi /etc/postfix/main.cf

Aggiungiamo al fondo queste righe

# Add the DKIM milter
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

9: Riavvia Postfix e avvia OpenDkim

# systemctl start opendkim; 
# systemctl enable opendkim;
# systemctl restart postfix;
# systemctl enable postfix;

10: Aggiungi la chiave pubblica al record DNS del dominio

Apri il file contenente la chiave pubblica

# cat /etc/opendkim/keys/default.txt

Al suo interno troverai una stringa simile a questa

default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOGs1+yeLL3/pKAJLApLriPyyhDIox+QmTCQWcbGpMeGvwoe3kz8Ake6HHscxW9RZi6LDr8lLL/F8f+yPwTUMAkGzWyiwcbUI1ZxSM9rwIKCBOfcSMyd1NjjwQCQRikHvj14aTA2qFHdQhYz+tJpXqMiq4AB5iIMw0jlYaPQRawIDAQAB" )  ; ----- DKIM key default for miosito.it

Opera in questo modo:

  1. Copia la stringa contenuta all'interno della parentesi, nel nostro esempio "v=DKIM1; k=rsa; ...."
  2. Accedi al pannello di gestione DNS del dominio (miosito.it)
  3. Crea un record di tipo TXT: nel campo nome (o host) indica "default._domainkey" e come valore incolla la stringa copiata.

11: verifica creazione record DNS

Dopo la creazione del nuovo record TXT attendi qualche minuto e poi verifica che il record sia stato correttamente configurato utilizzando il comando "opendkim-testkey"

# opendkim-testkey -d miosito.it -s default -vvv

Se la verifica ha avuto successo vedrai questo messaggio

key OK

Puoi anche utilizzare il comando dig per verificare la corretta creazione del record TXT

# dig +short default._domainkey.miosito.it TXT

12: invia email di prova

A questo punto proviamo a mandarci una mail, ad un indirizzo del dominio che abbiamo configurato su DKIM, ad esempio "info@miosito.it"

echo "test email" | sendmail info@miosito.it

Se DKIM è correttamente configurato Postfix, nei suoi log ("var/log/maillog") sarà presente questa riga

May  4 10:32:22 wa1 opendkim[1209]: 32EE04119408: DKIM-Signature field added (s=default, d=miosito.it)

Apriamo il sorgente della mail ricevuta e troveremo negli header la firma DKIM

DKIM-Filter: OpenDKIM Filter v2.11.0 wa1.wa67.it 32EE04119408
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=miosito.it; s=default;
	t=1525422742; bh=xXtulKcDtfvlKnswskIHrI4/8SNaNFckGCK1fCGLL3E=;
	h=Date:From:To:Subject:From;
	b=QHhpSTr76HK6BRf1I65ghSIyOJc9vuzQfAY6Ka9ULK2kiEOVAfz3TBL5X8HkeJK3z
	 HrgSzSbROEPHEPGuGnzU+LkmDegBGz86yGJzVumGuUkDwL5f/Pq9yszuo0DNn33eWr
	 fcW9Dg3lkR8zI8L9115/vyL0k8iq/uym+5W5doUYnv2VjnViBNMFok8/m5i94iez6K
	 FSnaUpZFARTDgJiRhKlZObCW1RczqUDQyxshfYPS4R1rDiigbx43AYefC36mXuyDSx
	 iy6DVfFIMviHAoZ2Q4nOzTFKhUdOHDt6zuk2Pz2hwSGRd38BGkHUWXYor05sImfuwt
	 mZrDSXkKJGjmw==

Possiamo individuare questi elementi

  • v: è la versione di DKIM
  • a: è l'algoritmo usato per la criptazione della firma
  • h: sono gli elementi della email sulla base dei quali verrà creata la firma
  • d: il dominio per il quale abbiamo configurato DKIM
  • s: il selettore scelto
  • b: la firma crittografata

Se il controllo DKIM è superato troverai nell'header l'indicazione "dkim=pass"

Il problema di DKIM, come abbiamo capito, è la sua difficile implementazione, e per questo non è adottata da tutti, ma anche per questo la sua assenza non indica necessariamente che l'e-mail sia fraudolenta. In poche parole possiamo dire che se c'è è meglio!

Potrebbe interessarti

x

ATTENZIONE