User Tools

Site Tools


doc:appunti:linux:sa:postfix_spf_check

This is an old revision of the document!


SPF check con Postfix

Installare il pacchetto Debian postfix-policyd-spf-python. Secondo quanto riportato dal sito openspf.org l'implementazione Python è tecnicamente superiore a quella Perl.

Il file di configurazione del programma è /etc/postfix-policyd-spf-python/policyd-spf.conf.

debugLevel = 2
TestOnly = 1
HELO_reject = Fail
Mail_From_reject = Fail
PermError_reject = False
TempError_Defer = False
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1

L'impostazione predefinita prevede il log su /var/log/syslog.

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.

Manual Testing

Per verificare il funzionamento del programma con la configurazione corrente è sufficiente eseguire da linea di comando policyd-spf, sullo standard input si forniscono alcune righe che caratterizzano un messaggio di posta, seguite da una riga vuota:

request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
helo_name=testhost.rigacci.org
queue_id=8045F2AB23
instance=12345.6789
sender=test.sender@rigacci.org
recipient=test.recipient@rigacci.org
client_address=192.222.46.168
client_name=testhost.rigacci.org

il programma risponde con qualcosa del tipo:

action=550 5.7.23 Message rejected due to: SPF fail - not authorized.
    Please see http://www.openspf.net/Why?s=mfrom;id=...

L'invocazione da riga di comando risponde ad una sola richiesta.

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:

policyd-spf  unix  -       n       n       -       0       spawn
  user=policyd-spf argv=/usr/bin/policyd-spf

Il socket viene creato in /var/spool/postfix/private/policyd-spf, il programma policyd-spf viene eseguito appena necessario, cioè quando viene ricevuto un nuovo messaggio. A nome dell'utente postfix risulterà un processo del tipo:

spawn -z -n policyd-spf -t unix user=policyd-spf argv=/usr/bin/policyd-spf

mentre a nome dell'utente policyd risulta:

/usr/bin/python3 /usr/bin/policyd-spf

Web References

doc/appunti/linux/sa/postfix_spf_check.1547825981.txt.gz · Last modified: 2019/01/18 16:39 by niccolo