DKIM su Exim 4 v.4.94 e successive

Il supporto a DKIM esiste in Exim4 sia in ingresso che in uscita. Prima di tutto, mi occupero` della configurazione in uscita, ovvero di firmare le email uscenti dal mio server. Il controllo delle firme in ingresso sara` oggetto di un lavoro futuro.

DKIM in uscita su Exim 4

Il sistema qui descritto permette di firmare automaticamente tutte le email in uscita. E` adatto a una configurazione multidominio, con diverse chiavi di firma una per dominio. Se una chiave per un dominio manca, le mail in uscita non vengono firmate, senza che vi sia alcun errore. Questo e` un comportamento voluto. La configurazione di DKIM in uscita e` composta principalmente di 3 passi:

Va faro` l'esempio con il mio dominio, kurgan.org.

Configurazione di Exim4

Se andate a leggervi la documentazione di Exim vedrete che ci sono altri parametri per il DKIM. Studiate.

Creazione dei files di chiavi pubbliche / private

Abbiamo detto che nella nostra configurazione mettiamo i files di chiavi dentro a /etc/exim4/dkim/, quindi creiamo la directory, entriamoci, e creiamo le chiavi. Questa procedura va ripetuta per ogni dominio per il quale vogliamo usare DKIM in uscita. Questi files devono essere leggibili dall'utente con cui gira Exim, ovviamente. Nota che ci sono due sintassi diverse a seconda dalla versione di Openssl che usate:

Questi comandi generano due chiavi, una pubblica e una privata, per il dominio kurgan.org. Notare che nelle chiavi, che non sono certificati, non c'e` scritto il dominio da nessuna parte. Quello che conta e` che la chiave pubblica e` derivata dalla privata. I nomi dei files contengono il nome del dominio (in minuscolo) perche` e` cosi` che Exim li cerca, stando alla configurazione che ho appena fatto. Queste chiavi sono valide per sempre, non vanno rinnovate, ma possono essere rifatte in ogni momento se lo riteniamo necessario. E` sufficiente ripubblicare la nuova chiave pubblica sul DNS. (vedi il passo dopo)

Pubblicazione della chiave pubblica sul DNS

Il contenuto della chiave pubblica (SOLO QUELLA PUBBLICA) va pubblicato sul DNS in un record TXT. Inoltre sempre sul DNS vanno pubblicate le "regole" che vogliamo (vorremmo) che gli altri seguissero quando ricevono mail da noi. Ovvero, se vogliamo o meno che gli altri accettino per esempio anche i messaggi non firmati o la cui verifica della firma fallisce, oppure se siamo cosi` sicuri che il nostro sistema non mandera` mai via messaggi non firmati, che vogliamo che gli altri rifiutino in toto i messaggi non firmati da noi.

Dobbiamo quindi creare due record TXT per il nostro dominio, cosi` fatti:

dkim._domainkey IN      TXT     "k=rsa; p=CHIAVE PUBBLICA RSA"
_domainkey      IN      TXT     "t=y; o=~;"  ;PER TESTING
_domainkey      IN      TXT     "o=~"        ;PER PRODUZIONE
_domainkey      IN      TXT     "o=-"        ;PER PRODUZIONE
_dmarc          IN      TXT     "v=DMARC1; p=none" ;CONFIG MINIMALE DMARC

Nota bene: la chiave pubblica deve essere inserita senza la prima e l'ultima riga, ovvero non deve contenere i due pezzi -----BEGIN PUBLIC KEY----- e -----END PUBLIC KEY----- e inoltre deve essere su una sola riga.

Poniamo attenzione alla stringa che determina le regole per il dominio:

Potete verificare se avete pubblicato bene questi dati usando questi comandi (ovviamente il vostro dominio al posto del mio):

host -t txt _domainkey.kurgan.org
host -t txt dkim._domainkey.kurgan.org

Il risultato dovrebbe essere qualcosa del tipo:

# host -t txt _domainkey.kurgan.org
_domainkey.kurgan.org descriptive text "t=y\; o=~\;"

# host -t txt dkim._domainkey.kurgan.org
dkim._domainkey.kurgan.org descriptive text "k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCAm+FLU8fTj5dF+5EDMDsox+12xUvHZMi79gwYD2E0t/+b7AEolifWQbyzTMjO5gIrvO5Lq/HMvX0n6b2YeGZBQ3wBxQWfE81n7zwZlkWbdKJ6D2Qjf2ucjhfax4OQJQDRVgF/UevdPSzWxLjMSgeFXXApW9Zoy+MxuXUc2/P1wIDAQAB"

Potete ulteriormente verificare se funziona tutto usando lo strumento di validazione che trovate a https://www.mail-tester.com/ oppure https://mxtoolbox.com

LinuxDebian/Exim4-DKIM (last edited 2023-01-26 13:34:56 by Kurgan)