DKIM nella pratica: selector, chiavi e servizi
Modulo 4: Recapitabilità: SPF, DKIM e DMARC nella pratica · Tempo di lettura: 12 minuti
Obiettivo della lezione: Al termine di questa lezione sarà in grado di analizzare un'intestazione DKIM-Signature, configurare DKIM con il proprio dominio per ogni servizio di invio, verificare se un selector funziona e spiegare come sostituire le chiavi in modo sicuro.
Concetti chiave: DKIM-Signature, d= (dominio firmatario), s= (selector), h= (intestazioni firmate), bh= e b=, canonicalizzazione (c=), <selector>._domainkey.<dominio>, TXT con p= o CNAME verso il servizio, lunghezza della chiave 2048 bit (RFC 8301), segmenti di 255 caratteri, ed25519 (RFC 8463), sostituzione della chiave, p= vuoto (revocata), DKIM e reindirizzamento
Perché DKIM è il più importante dei tre
SPF indica quali server possono inviare posta, ma si rompe in caso di reindirizzamento e guarda al Return-Path, che presso molti servizi non è il Suo. DKIM inserisce una firma nel messaggio stesso. Questa firma sopravvive al reindirizzamento (finché il messaggio non viene modificato) ed è collegata a un dominio che Lei stesso sceglie. Per questo motivo DKIM è spesso, nella pratica, l'unico meccanismo che fa superare il DMARC a newsletter, fatture generate da un programma di contabilità e posta reindirizzata.
Le basi (come la chiave è inserita nel DNS, cos'è un selector) sono spiegate nel corso DNS, lezione 4.4. Qui andiamo oltre: cosa contiene esattamente una firma, e come si configura DKIM per ogni servizio?
Analizzare una firma
Apra le intestazioni di un'email che ha ricevuto (lezione 1.5). In alto, se il messaggio è firmato, trova qualcosa del genere:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=x;
t=1762588800; h=from:to:subject:date:message-id:mime-version:content-type;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Gm7yW3q...lunga sequenza di caratteri...Qx9A==| Tag | Significato |
|---|---|
v=1 | Versione di DKIM |
a=rsa-sha256 | Algoritmo: chiave RSA, SHA-256. Possibile anche: ed25519-sha256 |
c=relaxed/relaxed | Canonicalizzazione: quanto rigorosamente vengono trattate piccole modifiche (spazi, maiuscole nei nomi delle intestazioni), per le intestazioni e per il testo. relaxed è l'impostazione comune ed è più tollerante rispetto a simple |
d=example.com | Il dominio firmatario. Questo dominio risponde del messaggio. Il DMARC lo confronta con l'indirizzo Da |
s=x | Il selector: quale chiave di quel dominio è stata usata |
t= | Momento della firma (secondi dal 1970) |
h= | Quali intestazioni sono state firmate. from deve sempre esserci |
bh= | Un'impronta digitale (hash) del testo del messaggio |
b= | La firma stessa |
Il destinatario recupera la chiave pubblica da <s>._domainkey.<d>, qui quindi x._domainkey.example.com, e verifica se b= corrisponde alle intestazioni di h= e all'impronta bh=. Se lungo il percorso viene modificata anche una sola lettera nel testo o in un'intestazione firmata, la verifica fallisce.
In Authentication-Results vede il risultato, ad esempio dkim=pass header.d=example.com header.s=x. Un messaggio può avere più firme, ad esempio una del Suo dominio e una del servizio stesso. Per il DMARC conta solo una firma il cui d= corrisponde al Suo dominio Da.
Ogni servizio il proprio selector
Un dominio può avere molte chiavi DKIM contemporaneamente, ciascuna sotto un proprio selector. È proprio questo lo scopo: ogni servizio che invia posta per Suo conto firma con una chiave propria.
| Mittente | Selector (esempio) | Come appare nel DNS |
|---|---|---|
| Server di posta di hosting | x oppure default | TXT con la chiave, creato dal pannello |
| Microsoft 365 | selector1, selector2 | due record CNAME verso Microsoft |
| Google Workspace | google (predefinito) | TXT con una chiave che fa creare nella console di amministrazione |
| Servizio di newsletter | ad esempio k2, k3, mte1 | di solito record CNAME verso il servizio |
TXT o CNAME?
- Con un record TXT inserisce Lei stesso la chiave pubblica nel Suo DNS. Se il servizio vuole una nuova chiave, deve modificare il record.
- Con un record CNAME fa puntare il selector verso un nome presso il servizio, ad esempio
k2._domainkey.example.com CNAME dkim2.mailer.example.Il servizio gestisce quindi la chiave autonomamente e può sostituirla senza che Lei debba fare nulla. Per questo i grandi servizi scelgono il CNAME, e spesso ne usano due: così possono alternare tra una chiave attiva e una nuova.
Attenzione: un CNAME non può coesistere con un altro record sullo stesso nome. Se esiste già un TXT su selector1._domainkey, lo rimuova.
L'elemento più importante: attivare DKIM presso il servizio
Presso molti servizi, DKIM con il Suo dominio non è attivo per impostazione predefinita. In tal caso firmano con il proprio dominio (d=mailer.example). Il messaggio è sì firmato, ma non allineato con il Suo indirizzo Da. Per il DMARC questo non conta. Nella gestione del servizio si chiama spesso "verifica del dominio", "verifica dominio", "autenticazione" o "dominio mittente personalizzato". Solo dopo aver impostato i record E averlo attivato nel servizio, questo firmerà con d=example.com.
Chiavi: lunghezza, segmenti e algoritmo
- Lunghezza. L'RFC 8301 stabilisce: almeno 1024 bit, e i mittenti dovrebbero usare almeno 2048 bit. Usi 2048. Una chiave di 512 bit viene considerata non valida dai destinatari.
- Segmenti di 255 caratteri. Un record TXT è composto da sequenze di caratteri di massimo 255 caratteri. Una chiave a 2048 bit è lunga circa 400 caratteri e non entra in un'unica sequenza. Il record è quindi composto da due o più sequenze consecutive (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), che il destinatario unisce. La maggior parte dei pannelli lo fa automaticamente. Se qualcosa va storto, ottiene una chiave troncata e ogni firma fallisce. Copi quindi sempre una chiave per intero, senza spazi extra o virgolette nel mezzo. - ed25519 (RFC 8463) è un algoritmo più moderno con chiavi brevi. Non tutti i destinatari lo verificano ancora. Chi lo usa firma quindi con due firme: una RSA e una ed25519.
Sostituire una chiave
È opportuno sostituire una chiave di tanto in tanto, e sicuramente se sospetta che la chiave privata sia trapelata (ad esempio dopo un attacco al server o l'uscita di un amministratore). Proceda così:
- Crei una nuova chiave sotto un nuovo selector, ad esempio
s2026, e inserisca la chiave pubblica nel DNS. - Attenda che il record sia visibile ovunque (il TTL, vedere corso DNS lezione 6.1).
- Faccia firmare il server con il nuovo selector.
- Lasci la vecchia chiave ancora per qualche giorno: la posta già in transito o che viene verificata nuovamente vi fa ancora riferimento.
- Revochi la vecchia chiave svuotando
p=(v=DKIM1; p=), oppure rimuova il record.
Presso i servizi con record CNAME, è il servizio stesso a occuparsene.
Cosa fa fallire DKIM
- Il messaggio viene modificato lungo il percorso: una mailing list che inserisce
[nomelista]nell'oggetto o aggiunge un piè di pagina, un antivirus che incolla una riga sotto il messaggio, un server di reindirizzamento che converte la formattazione. - Chiave errata o troncata nel DNS.
- Il selector non esiste: un errore di battitura nel nome, oppure
selector1._domainkey.example.com.example.com(il nome di dominio duplicato, perché il pannello lo aggiunge già da solo). - Chiave revocata (
p=vuoto) mentre il server firma ancora con quel selector.
Verificare se funziona
- Invii un'email dal servizio verso un indirizzo presso Gmail o Outlook.com.
- Apra le intestazioni e cerchi
DKIM-Signature: annotid=es=. - Guardi in
Authentication-Resultsse comparedkim=pass, e seheader.d=è il Suo dominio. - Cerchi il selector:
dig TXT s._domainkey.example.com(oppure con uno strumento online). Deve esserci unp=con una chiave lunga, oppure un CNAME che porta a tale record.
Nella pratica: come si presenta in un pannello
Con un pacchetto di hosting di WebOké, DKIM è attivo per impostazione predefinita, con il selector x: il record si chiama x._domainkey.<ilSuodominio>. In DirectAdmin lo trova in Amministrazione DNS; se il Suo DNS è presso un altro fornitore, copi quel record lì. In Mio WebOké la scheda Imposta E-Mail mostra quale valore deve essere presente e se viene trovato. Presso altri fornitori il selector ha un nome diverso (default, mail, dkim), ma lo trova allo stesso modo: nel pannello o nel s= di un messaggio firmato.
Riepilogo
- DKIM è il controllo che sopravvive al reindirizzamento e che collega ogni servizio al Suo dominio; per il DMARC conta solo una firma con il Suo dominio in
d=. - Nella
DKIM-Signaturetrovad=(dominio) es=(selector); la chiave si trova in<s>._domainkey.<d>. - Ogni servizio riceve un selector proprio; i record CNAME permettono al servizio di sostituire le chiavi autonomamente. Attivi DKIM con il Suo dominio anche effettivamente presso il servizio.
- Usi 2048 bit; faccia attenzione alle chiavi troncate durante la copia.
- Sostituisca una chiave con un nuovo selector e revochi quella vecchia solo in seguito.
Quiz
Esercizio
Esercizio Z4.3: Verificare un selector DKIM. Invii un'email dal Suo dominio (o da un servizio che invia per Suo conto) verso un proprio indirizzo presso un altro fornitore. Apra le intestazioni e inserisca i valori di d= e s= dalla DKIM-Signature, e cosa compare in Authentication-Results accanto a dkim=. Il programma cerca il selector in tempo reale, segue un eventuale CNAME, verifica la chiave (presenza, non vuota, lunghezza) e Le dice se d= è allineato con il dominio che Lei indica come mittente.
Per approfondire
I passaggi descritti in questi articoli valgono per i pannelli di WebOké; presso altri fornitori il funzionamento è simile.
- Corso gratuito DNS 4.4: DKIM: la firma sotto la Sua posta
- Guida DirectAdmin 5.8: Attivare e verificare DKIM
- Configurare DKIM quando il DNS è gestito da un server esterno
- Guida WebOké 6.7: La scheda Configura l'e-mail (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (lunghezza delle chiavi e algoritmi), RFC 8463 (ed25519)
