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 [2019/01/18 16:43] – [Configurazione di Postfix] niccolodoc:appunti:linux:sa:postfix_spf_check [2021/02/12 12:39] (current) – [SPF check con Postfix] niccolo
Line 2: Line 2:
  
 Installare il pacchetto Debian **postfix-policyd-spf-python**. Secondo quanto riportato dal sito **[[http://www.openspf.org/Software|openspf.org]]** l'implementazione Python è tecnicamente superiore a quella Perl. Installare il pacchetto Debian **postfix-policyd-spf-python**. Secondo quanto riportato dal sito **[[http://www.openspf.org/Software|openspf.org]]** l'implementazione Python è tecnicamente superiore a quella Perl.
 +
 +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:
 +
 +<file>
 +example.org.  IN  TXT  "v=spf1 a:mail.example.org -all"
 +</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:
 +
 +<file>
 +mail.example.org.  IN  TXT  "v=spf1 a -all"
 +</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 **AAA** (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 =====
  
 Il file di configurazione del programma è **/etc/postfix-policyd-spf-python/policyd-spf.conf**. Il file di configurazione del programma è **/etc/postfix-policyd-spf-python/policyd-spf.conf**.
Line 14: Line 32:
 skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1 skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1
 </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 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 19: Line 39:
 Attenzione al parametro **TestOnly** che fa **esattamente il contrario di quello che si intuisce**! Impostando **TestOnly = 1** significa che **il filtro è attivo** (restituisce a Postfix il codice dell'azione da intraprendere), invece con un valore zero si ha solo il log del risultato, ma nessuna azione conseguente. Attenzione al parametro **TestOnly** che fa **esattamente il contrario di quello che si intuisce**! Impostando **TestOnly = 1** significa che **il filtro è attivo** (restituisce a Postfix il codice dell'azione da intraprendere), invece con un valore zero si ha solo il log del risultato, ma nessuna azione conseguente.
  
 +Attenzione che il **reload** o il **restart** del servizio dopo aver cambiato configurazione non esiste, in quanto il processo viene avviato da Postfix solo quando necessario (vedi più avanti la configurazione). Pertanto in caso di variazione della configurazione è necessario fare il **restart di Postfix**.
 ===== Manual Testing ===== ===== Manual Testing =====
  
Line 26: Line 47:
 request=smtpd_access_policy request=smtpd_access_policy
 protocol_state=RCPT protocol_state=RCPT
-protocol_name=SMTP+protocol_name=ESMTP
 helo_name=testhost.rigacci.org helo_name=testhost.rigacci.org
 queue_id=8045F2AB23 queue_id=8045F2AB23
Line 44: Line 65:
  
 L'invocazione da riga di comando risponde ad **una sola richiesta**. L'invocazione da riga di comando risponde ad **una sola richiesta**.
 +
 +===== IPv6 e record AAAA =====
 +
 +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 =====
 +
 +**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//.
 +
 +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//.
  
 ===== Configurazione di Postfix ===== ===== Configurazione di Postfix =====
  
-Anzitutto si configura Postfix in modo che attivi uno **Unix socket** collegato al checker; nel file di configurazione **/etc/postfix/master.cf** si aggiunge:+Anzitutto si configura Postfix in modo che attivi uno **Unix socket** collegato al programma **policyd-spf**; nel file di configurazione **/etc/postfix/master.cf** si deve aggiungere:
  
 <file> <file>
Line 54: Line 87:
 </file> </file>
  
-Il socket viene creato in **/var/spool/postfix/private/policyd-spf**. Si deve quindi indicare a Postfix di aggiungere il controllo SPF alle **smtpd_recipient_restrictions**, di solito subito dopo il **reject_unauth_destination**. Nel file **/etc/postfix/main.cf** si imposta:+Il socket viene creato in **/var/spool/postfix/private/policyd-spf**. Si deve quindi configurare Postfix per aggiungere il controllo SPF alle **smtpd_recipient_restrictions**, di solito subito dopo il **reject_unauth_destination**. Nel file **/etc/postfix/main.cf** si imposta:
  
 <file> <file>
doc/appunti/linux/sa/postfix_spf_check.1547826222.txt.gz · Last modified: 2019/01/18 16:43 by niccolo