Sicurezza email con SPF, DKIM e DMARC
Scopri come proteggere il tuo dominio dallo spoofing email usando i record SPF, DKIM e DMARC. Guida passo-passo per la configurazione tramite dashboard e API su DNScale.
Lo spoofing email consente agli attaccanti di inviare messaggi che sembrano provenire dal tuo dominio. Senza un'autenticazione adeguata, chiunque può inviare un'email affermando di essere ceo@tuodominio.com. SPF, DKIM e DMARC sono standard basati su DNS che aiutano i server di posta riceventi a verificare le email legittime.
Cosa imparerai
- Come SPF dichiara i server di posta autorizzati
- Come DKIM firma crittograficamente le email
- Come DMARC definisce le policy per le autenticazioni fallite
- Configurazione di tutti e tre tramite dashboard e API DNScale
- Test e validazione della configurazione
SPF (Sender Policy Framework)
Cosa fa SPF
SPF ti consente di specificare quali indirizzi IP e server di posta possono inviare email per il tuo dominio. I server riceventi controllano il tuo record SPF per verificare che il mittente sia autorizzato.
Sintassi del record SPF
Un record SPF è un record TXT all'apex del tuo dominio:
v=spf1 [meccanismi] [qualificatore]all| Componente | Descrizione |
|---|---|
v=spf1 | Identificatore di versione (obbligatorio) |
include:dominio | Autorizza i server autorizzati dal record SPF di un altro dominio |
a | Autorizza l'IP del record A del dominio |
mx | Autorizza i server MX del dominio |
ip4:x.x.x.x | Autorizza un indirizzo IPv4 specifico o un intervallo |
ip6:x::x | Autorizza un indirizzo IPv6 specifico o un intervallo |
~all | Soft fail per mittenti non autorizzati |
-all | Hard fail per mittenti non autorizzati |
Esempi comuni di SPF
Google Workspace:
v=spf1 include:_spf.google.com ~allMicrosoft 365:
v=spf1 include:spf.protection.outlook.com ~allProvider multipli:
v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~allServer di posta personalizzato:
v=spf1 ip4:203.0.113.5 mx ~allBest practice SPF
- Inizia con
~all(soft fail), passa a-alldopo i test - Mantieni sotto 10 lookup DNS (limite SPF)
- Includi tutte le fonti di invio: email transazionali, piattaforme di marketing, ecc.
DKIM (DomainKeys Identified Mail)
Cosa fa DKIM
DKIM aggiunge una firma digitale alle email in uscita. Il tuo server di posta firma ogni email con una chiave privata e tu pubblichi la chiave pubblica corrispondente nel DNS. I server riceventi usano questa chiave pubblica per verificare la firma, dimostrando che l'email non è stata manomessa e proviene da un mittente autorizzato.
Come funziona DKIM
- Il tuo server di posta genera una firma crittografica usando una chiave privata
- La firma viene aggiunta agli header dell'email
- I server riceventi cercano la tua chiave pubblica DKIM nel DNS
- Verificano che la firma corrisponda al contenuto dell'email
- Se valida, l'email supera l'autenticazione DKIM
Sintassi del record DKIM
Un record DKIM è un record TXT su selector._domainkey.tuodominio.com:
selector._domainkey.tuodominio.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCS..."| Tag | Descrizione |
|---|---|
v=DKIM1 | Identificatore di versione |
k=rsa | Tipo di chiave (solitamente RSA) |
p=... | Chiave pubblica (codificata in base64) |
t=s | (Opzionale) Modalità strict - richiesta corrispondenza esatta del dominio |
t=y | (Opzionale) Modalità test |
Selector DKIM
Il selector è un nome che identifica quale chiave utilizzare. Questo consente:
- Rotazione delle chiavi senza downtime
- Chiavi diverse per servizi di posta diversi
- Chiavi multiple attive contemporaneamente
Pattern di selector comuni:
googleper Google Workspaceselector1,selector2per Microsoft 365k1,k2,k3per configurazioni personalizzatemailjet,sendgridper servizi di terze parti
Ottenere le chiavi DKIM
Le chiavi DKIM sono generate dal tuo provider email. Ecco dove trovarle:
Google Workspace:
- Console di amministrazione → App → Google Workspace → Gmail
- Autentica email → Genera nuovo record
- Copia il valore del record TXT
Microsoft 365:
- Microsoft 365 Defender → Email e collaborazione → Criteri
- DKIM → Seleziona dominio → Crea chiavi DKIM
- Copia entrambi i record selector1 e selector2
Servizi di terze parti (SendGrid, Mailjet, ecc.):
- Controlla la dashboard del tuo provider per le impostazioni DNS
- Ti forniranno il nome del selector e la chiave pubblica
Esempi di record DKIM
Google Workspace:
google._domainkey.tuodominio.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."Microsoft 365:
selector1._domainkey.tuodominio.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNA..."
selector2._domainkey.tuodominio.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNA..."Personalizzato/terze parti:
mail._domainkey.tuodominio.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3..."Best practice DKIM
- Usa chiavi a 2048 bit - Le chiavi a 1024 bit sono sempre più vulnerabili
- Ruota le chiavi periodicamente - Almeno annualmente per sicurezza
- Mantieni le chiavi private al sicuro - Non esporle mai nel DNS o nei log
- Usa selector unici - Selector diversi per ogni servizio
- Testa prima di applicare DMARC - Assicurati che DKIM passi prima di
p=reject
DMARC (Domain-based Message Authentication)
Cosa fa DMARC
DMARC si basa su SPF (e DKIM) per fornire:
- Una policy che indica ai riceventi cosa fare con le email che falliscono l'autenticazione
- Report che permettono di monitorare i risultati dell'autenticazione
Sintassi del record DMARC
Un record DMARC è un record TXT su _dmarc.tuodominio.com:
v=DMARC1; p=policy; [tag opzionali]Tag obbligatori:
| Tag | Descrizione |
|---|---|
v=DMARC1 | Identificatore di versione |
p=none|quarantine|reject | Policy per le email che falliscono |
Tag opzionali:
| Tag | Descrizione |
|---|---|
rua=mailto:indirizzo | Destinazione report aggregati |
ruf=mailto:indirizzo | Destinazione report forensi |
pct=100 | Percentuale a cui applicare la policy (predefinito 100) |
sp=policy | Policy per i sottodomini |
Opzioni della policy DMARC
| Policy | Azione | Quando usarla |
|---|---|---|
p=none | Solo monitoraggio | Configurazione iniziale |
p=quarantine | Invia allo spam | Intermedia |
p=reject | Blocca completamente | Protezione completa |
Esempi DMARC
Modalità monitoraggio:
v=DMARC1; p=none; rua=mailto:dmarc-reports@tuodominio.comModalità quarantena:
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@tuodominio.com; pct=100Modalità rifiuto:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@tuodominio.comRollout consigliato
- Settimane 1-2:
p=noneper monitorare - Settimane 3-4: Analizza i report, risolvi i problemi
- Settimane 5-6:
p=quarantineconpct=25 - Settimane 7-8: Aumenta a
pct=100 - Settimana 9+: Passa a
p=reject
Configurazione tramite dashboard DNScale
Crea il record SPF
- Accedi su dnscale.eu
- Seleziona il tuo dominio
- Clicca Add Record
- Configura:
- Name: Lascia vuoto (apex)
- Type: TXT
- Content:
v=spf1 include:_spf.google.com ~all - TTL: 3600
- Clicca Create Record
Crea il record DKIM
- Ottieni la chiave pubblica DKIM dal tuo provider email (vedi "Ottenere le chiavi DKIM" sopra)
- Clicca Add Record
- Configura:
- Name:
google._domainkey(o il selector del tuo provider) - Type: TXT
- Content:
v=DKIM1; k=rsa; p=MIIBIjANBgkq...(la tua chiave pubblica) - TTL: 3600
- Name:
- Clicca Create Record
Nota: Per Microsoft 365, dovrai creare due record (selector1 e selector2).
Crea il record DMARC
- Clicca Add Record
- Configura:
- Name:
_dmarc - Type: TXT
- Content:
v=DMARC1; p=none; rua=mailto:dmarc@tuodominio.com - TTL: 3600
- Name:
- Clicca Create Record
Configurazione tramite API DNScale
Autenticazione
export DNSCALE_API_KEY="your-api-key"Ottieni l'ID della zona
curl -s "https://api.dnscale.eu/v1/zones" \
-H "Authorization: Bearer $DNSCALE_API_KEY" | jq '.data.zones[] | {id, name}'Crea il record SPF
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "@",
"type": "TXT",
"content": "v=spf1 include:_spf.google.com ~all",
"ttl": 3600
}'Crea il record DKIM
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "google._domainkey",
"type": "TXT",
"content": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
"ttl": 3600
}'Sostituisci google._domainkey con il tuo selector e la chiave pubblica con la tua chiave DKIM effettiva.
Crea il record DMARC
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "_dmarc",
"type": "TXT",
"content": "v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com",
"ttl": 3600
}'Verifica i record
curl -s "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" | jq '.data.records[] | select(.type == "TXT")'Test e validazione
Strumenti online
- MXToolbox SPF Check
- MXToolbox DKIM Check
- MXToolbox DMARC Check
- DMARC Analyzer
- Mail Tester - Invia un'email di test per verificare tutta l'autenticazione
Riga di comando
# Controlla SPF
dig TXT tuodominio.com +short
# Controlla DKIM (sostituisci 'google' con il tuo selector)
dig TXT google._domainkey.tuodominio.com +short
# Controlla DMARC
dig TXT _dmarc.tuodominio.com +shortInvia un'email di test
Il modo migliore per verificare che tutto funzioni è inviare un'email di test e controllare gli header:
- Invia un'email a un account Gmail
- Apri l'email → Clicca i tre puntini → "Mostra originale"
- Cerca:
spf=passdkim=passdmarc=pass
Riepilogo
| Record | Nome | Tipo | Esempio |
|---|---|---|---|
| SPF | @ | TXT | v=spf1 include:_spf.google.com ~all |
| DKIM | selector._domainkey | TXT | v=DKIM1; k=rsa; p=MIIBIjAN... |
| DMARC | _dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@example.com |
Come funzionano insieme:
- SPF verifica che il server di invio sia autorizzato
- DKIM verifica che il contenuto dell'email non sia stato modificato
- DMARC indica ai riceventi cosa fare quando SPF o DKIM falliscono
Ordine di implementazione consigliato:
- Configura SPF per primo (il più semplice)
- Configura DKIM con il tuo provider email
- Aggiungi DMARC in modalità monitoraggio (
p=none) - Analizza i report, risolvi i problemi
- Applica gradualmente DMARC (
p=quarantine→p=reject)