User Tools

Site Tools


doc:appunti:linux:sa:postfix_spf_check

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:postfix_spf_check [2021/02/11 11:25] – [Configurazione] niccolodoc:appunti:linux:sa:postfix_spf_check [2025/12/04 10:22] (current) – [Manual Testing] niccolo
Line 5: Line 5:
 Secondo le specifiche **[[https://tools.ietf.org/id/draft-ietf-spfbis-4408bis-09.html|Sender Policy Framework]]** si possono effettuare dei controlli di validità durante una sessine SMTP verificando il contenuto dei comandi **HELO/EHLO** e **MAIL FROM**. Secondo le specifiche **[[https://tools.ietf.org/id/draft-ietf-spfbis-4408bis-09.html|Sender Policy Framework]]** si possono effettuare dei controlli di validità durante una sessine SMTP verificando il contenuto dei comandi **HELO/EHLO** e **MAIL FROM**.
  
-Per implementare il check SPF su **MAIL FROM** si deve aggiungere al DNS un record di tipo **TXT** relativamente al dominio mittente, un esempio per il dominio example.org:+Per soddisfare il controllo SPF su **MAIL FROM** il provider mittente deve aggiungere al DNS un record di tipo **TXT** relativamente al dominio mittente, un esempio per example.org:
  
 <file> <file>
Line 11: Line 11:
 </file> </file>
  
-Per implementare il check SPF su **HELO/EHLO** si deve anzitutto configurare correttamente il comando HELO sul server di posta che invia i messaggi, supponendo che il comando sarà **EHLO mail.example.org** e che un record di tipo **A** sia correttamente configurato per quel nome, si deve aggiungere un record **TXT** del tipo:+Per soddisfare il check SPF su **HELO/EHLO** si deve anzitutto configurare correttamente il comando HELO sul server di posta che invia i messaggi, supponendo che il comando sarà **EHLO mail.example.org** e che un record di tipo **A** sia correttamente configurato per quel nome, si deve aggiungere un record **TXT** del tipo:
  
 <file> <file>
 mail.example.org.  IN  TXT  "v=spf1 a -all" mail.example.org.  IN  TXT  "v=spf1 a -all"
 </file> </file>
 +
 +**ATTENZIONE**! Nei **record TXT** è necessario specificare **il nome esatto** del **dominio** e quello dell'**host**, inoltre il nome dell'host deve avere un corrispondente record di tipo **A** (IPv4) ed eventualmente di tipo **AAAA** (IPv6). Non è possibile definire i nome dell'host con un **CNAME** poiché il software Bind non accetta che un ''CNAME'' coesista con altri record, in questo caso un ''TXT''.
  
 ===== Configurazione ===== ===== Configurazione =====
Line 31: Line 33:
 </file> </file>
  
-Il parametro **HELO_reject** determina il comportamento durante il check di **HELO/EHLO**, l'impostazione predefinita **Fail** significa che il reject avviene solo nel caso di SPF **Fail**, cioè di una situazione esplicitamente vietata. Si può essere più restrittivi con l'opzione **SPF_Not_Pass**, in tal caso il reject avviene nei casi di **Fail**, **Softfail** (//weak statement//, ad esempio la clausola ''~all''), **Neutral** (il DNS fornisce informazioni blank) e **PermError** (es. record SPF non valido).+Il parametro **HELO_reject** determina il comportamento durante il check di **HELO/EHLO**, l'impostazione predefinita **Fail** significa che il reject avviene solo nel caso di SPF **Fail**, cioè di una situazione esplicitamente vietata. Si può essere più restrittivi con l'opzione **SPF_Not_Pass**, in tal caso il reject avviene anche nei casi di **Softfail** (//weak statement//, ad esempio la clausola ''~all''), **Neutral** (il DNS fornisce informazioni, ma vuote) e **PermError** (es. record SPF non valido).
  
 L'impostazione predefinita prevede il log su **/var/log/syslog**. L'impostazione predefinita prevede il log su **/var/log/syslog**.
Line 53: Line 55:
 client_address=192.222.46.168 client_address=192.222.46.168
 client_name=testhost.rigacci.org client_name=testhost.rigacci.org
 +
 </code> </code>
  
-il programma risponde con qualcosa del tipo:+Questi sono i parametri che Postfix passa ad un altro programma quando esegue una **SMTP access policy delegation request**, la documentazione si trova in **[[https://www.postfix.org/SMTPD_POLICY_README.html|Postfix SMTP Access Policy Delegation]]**. 
 + 
 +**ATTENZIONE**: Il **sender** che viene passato da Postfix è il contenuto del **MAIL FROM** della sessione SMTP, **non è** l'eventuale contenuto dell'header **From:**. Infatti il controllo viene effettuato ancora prima che venga ricevuto il contenuto del messaggio con tutti gli header. Questo è un problema abbastanza importante perché un sender malevolo può forgiare il MAIL FROM in modo che sia compatibile con l'IP sorgente (la verifica SPF viene soddisfatta) e poi inserire un header **From:** a piacimento. Purtroppo i client di posta mostrano come mittente il contenuto dell'header, mentre l'originale MAIL FROM di solito è visibile solo nel sorgente del messaggio, generalmente nell'header **Return-Path:**. 
 + 
 +Per fare una verifica di coerenza fra **MAIL FROM** e header **From:** è possibile aggiungere a Postfix un controllo con **[[opendmarc|opendmarc]]**. 
 + 
 +Il programma risponde con qualcosa del tipo:
  
 <code> <code>
Line 68: Line 77:
 Nei record SPF è possibile indicare direttamente anche degli indirizzi IPv6, usando la sintassi **%%ip6:2a01:4f8:d16:1355::2%%**. Più comodo è indicare il nome di un host, con la sintassi **%%a:testhost.rigacci.org%%** si includono automaticamente tutti i record di tipo **A** (IPv4) e di tipo **AAAA** (IPv6) associati al nome. Nel test del paragrafo precedente è possibile specificare un indirizzo IPv6 come //client_address//. Nei record SPF è possibile indicare direttamente anche degli indirizzi IPv6, usando la sintassi **%%ip6:2a01:4f8:d16:1355::2%%**. Più comodo è indicare il nome di un host, con la sintassi **%%a:testhost.rigacci.org%%** si includono automaticamente tutti i record di tipo **A** (IPv4) e di tipo **AAAA** (IPv6) associati al nome. Nel test del paragrafo precedente è possibile specificare un indirizzo IPv6 come //client_address//.
  
-===== Problema recort TXT ed helo_name =====+===== Problema record TXT ed helo_name =====
  
-**ATTENZIONE**! Per motivi non chiari il programma **policyd-spf** richiede il **record TXT** di **//helo_name//** prima di richidere quello del dominio del **//sender//**. Se tale record esiste, viene utilizzato il suo contenuto SPF per controllare l'indirizzo IP di //client_address//.+**ATTENZIONE**! Il programma è predisposto per effettuare due controlli SPF, il primo è su **HELO/EHLO**, il secondo su **MAIL FROM**, sono entrambi comandi usati durante la sessione SMTP. 
 + 
 +Per il controllo HELO/EHLO il programma **policyd-spf** richiede il **record TXT** di **//helo_name//** prima di richidere quello del dominio del **//sender//**. Se tale record esiste, viene eventualmente utilizzato il suo contenuto SPF per controllare l'indirizzo IP di //client_address//.
  
 Per questo motivo - quando si configura un server di posta - è opportuno controllare l'**//helo_name//**: se ad esso è **associato un record TXT**, questo deve includere l'indirizzo IP che verrà usato come **//client_address//**. Per questo motivo - quando si configura un server di posta - è opportuno controllare l'**//helo_name//**: se ad esso è **associato un record TXT**, questo deve includere l'indirizzo IP che verrà usato come **//client_address//**.
  
 Ad ogni modo - dopo che **policyd-spf** ha controllato la corrispondenza fra SPF di //helo_name// e //client_address// - verrà fatto anche il controllo tra SPF del dominio di //sender// e il //client_address//. Ad ogni modo - dopo che **policyd-spf** ha controllato la corrispondenza fra SPF di //helo_name// e //client_address// - verrà fatto anche il controllo tra SPF del dominio di //sender// e il //client_address//.
 +
 +===== Problema envelope_sender e From =====
 +
 +Una mail può contendere informazioni non coerenti sul mittente, tale informazione infatti compare sia nell'header **From:** che nell'**envelope sender**, cioè quello che compare come **Return-Path:** nel messaggio ricevuto. Si tratta di due informazioni distinte che è possibile configurare in modo indipendente soprattutto quando si desidera **forgiare una mail**.
 +
 +Se esiste l'envelope sender il controllo SPF viene fatto su questo ed è possibile creare una mail con un **From:** spoofed che sarebbe altrimenti stato bloccato dalla logica di SPF.
 +
 +FIXME Come fare ad evitare questo?
  
 ===== Configurazione di Postfix ===== ===== Configurazione di Postfix =====
doc/appunti/linux/sa/postfix_spf_check.1613039158.txt.gz · Last modified: by niccolo