This is an old revision of the document!
Table of Contents
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. 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:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, ... reject_unauth_destination, check_policy_service unix:private/policyd-spf
Il programma policyd-spf non viene eseguito immediatamente, ma quando necessario; cioè quando viene ricevuto un messaggio da controllare. In quel momento risulterà un processo a nome dell'utente postfix del tipo:
spawn -z -n policyd-spf -t unix user=policyd-spf argv=/usr/bin/policyd-spf
inoltre a nome dell'utente policyd risulta:
/usr/bin/python3 /usr/bin/policyd-spf