La tecnica del greylisting e' un metodo emerso recententemente nella lotta allo spam, che in molti casi consente di bloccare la maggior parte delle mail indesiderate a livello del mailserver.
In estrema sintesi, un MTA che adotti questa tecnica scarta "in via temporanea" qualsiasi email proveniente da mittenti non conosciuti, segnalando loro che la mailbox del destinatario non e' temporaneamente disponibile. Esso continuera' a scartare simili email, identificate secondo la terna indirizzo IP dell'host sorgente, email del mittente e del destinatario, fino allo scadere di un determinato timeout.
Normalmente un mail server legittimo, prevede la ritrasmissione del messaggio email in casi simili. Una volta scaduto il timeout previsto, quindi, il server di destinazione potra' accettare il messaggio ritrasmesso.
Tale meccanismo di ritrasmissione, invece, non viene comunemente implementato dalle applicazioni specificatamente dedicate allo spamming. Inviano il messaggio una sola volta, esso puo' quindi essere filtrato da partete del mailserver destinatario.
Questa soluzione puo' essere utilizzata ovviamente anche con postfix, appoggiandosi a software quali gps o postgrey.
In particolare si vuole illustrare un'esempio di utilizzo di postgrey.
Presumendo di utilizzare un sistema debian, esso e' disponibile gia' pacchettizzato, e pertanto e' installabile semplicemente con il comando: apt-get install postgrey
.
Una volta installatolo e' sufficiente editare il file /etc/default/postgrey, indicando la porta da utilizzare, il timeout trascorso il quale accettare un messaggio scartato precedentemente, ed il numero di giorni dopo il quale eliminare le terne indirizzo IP, email mittente e destinatario dal database utilizzato dal programma:
POSTGREY_OPTS="--inet=127.0.0.1:54000 --delay=180 --max-age=15"
Naturalmente in seguito alla modifica e' necessario riavviare postgrey:/etc/init.d/postgrey restart
.
Per abilitare il greylisting in postfix e' invece sufficiente inserire la riga check_policy_service inet:127.0.0.1:54000 in /etc/postfix/main.cf sotto smtpd_recipient_restrictions:
smtpd_recipient_restrictions =
[...]
check_policy_service inet:127.0.0.1:54000,
[...]
Anche in questo caso, perche' le modifiche apportate abbiano effetto si richiede ri riavviare il servizio in questione: /etc/init.d/postfix restart
.
Per verificare il funzionamento del sistema e' sufficiente controllare i log di postfix dopo avere ricevuto un'email da un mittente non ancora registrato nel database di postgrey. Esso dovrebbe contenere un record simile al seguente:
[...]
450 <[email protected]>: Recipient address rejected: Greylisted for 180 seconds (see http://isg.ee.ethz.ch/tools/postgrey/help); from [email protected]
[...]
Nel mio caso, infatti, la mailbox dell'utente andrea, non appena ricevuto il messaggio da parte di postfix appariva vuota.
Trascorsi alcuni minuti, l'email e' stata rispedita automaticamente dall'SMTP di libero. In questo caso, pero', essendo trascorsi i 180 secondi specificati in /etc/default/postgrey essa e' stata accettata da postfix e correttamente recapitata alla mailbox dell'utente.