Greylisting con Postfix

Il greylisting è un metodo di difesa dallo spam, che distingue i
server SMTP “buoni” da quelli che inviano spam in base al loro comportamento
in caso di reject dei messaggi. I server “buoni”, infatti, cercano di
inviare di nuovo qualsiasi email, se questa è stata “rigettata
temporaneamente” dal server di destinazione, mentre i server che inviano
spam normalmente non si prendono la briga di reinviare i messaggi.

La protezione di greylisting, quindi, la prima volta che gli arriva una
email, ne memorizza

  • l’indirizzo IP del server
  • l’indirizzo del mittente
  • l’indirizzo del destinatario

e rigetta la mail con messaggio di “temporarily unavailable, try again later”.

Il server SMTP che ha inviato il messaggio ritenterà di farlo, e a questo
punto il messaggio verrà accettato normalmente.

In questo modo vengono eliminate moltissime email di spam, sollevando
il server SMTP dal lavoro di controllo nelle blacklist e con l’antivirus.
D’altra parte, si può avere un leggero ritardo nella ricezione di alcune
email.

Fare greylisting con Postfix

Il server SMTP Postfix ha un pacchetto che implementa il greylisting che
si chiama postgrey. Per installarlo, da root:

apt-get install postgrey

Per controllare che sia attivo il servizio sulla porta 6000 di localhost, date

# netstat -anp | grep 60000
tcp        0      0 127.0.0.1:60000         0.0.0.0:*

A questo punto è necessario aggiungere una linea a /etc/postfix/main.cf per indicargli di usare il nuovo servizio. Dato
che si tratta di un controllo anche sull’indirizzo del destinatario, lo
mettiamo in smtpd_recipient_restrictions:

check_policy_service inet:127.0.0.1:60000

Attenzione a dove lo mettiamo, può cambiare notevolmente! In una
installazione con blacklist, conviene fare così:

smtpd_recipient_restrictions =
        check_recipient_access hash:/etc/postfix/rejectedrecipients,
        check_recipient_access hash:/etc/postfix/mailboxfull,
        permit_sasl_authenticated,
        permit_mynetworks,
        check_policy_service inet:127.0.0.1:60000,
        reject_unauth_destination,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client cbl.abuseat.org

Cioè metterlo dopo permit_mynetworks, che permette l’accesso
incondizionato a tutte le connessioni provenienti dalla rete locale (o da
localhost, a seconda della configurazione di mynetworks nello
stesso file) e quindi, ad esempio, non crea problemi nelle installazioni
di webmail, ma prima dei reject_rbl_client, che vanno a fare una
query sui server di blacklist.

A questo punto si deve riavviare il server Postfix, con

/etc/init.d/postfix reload

ed è fatto.

L’unico problema che si può avere è nel caso in cui vogliate cambiare
il testo di default del messaggio; nel qual caso, leggete il
bug n. 298832
di Debian.