Computer: cretino ad alta velocità in dotazione, spesso, a cretini molto lenti.

— Stefano Benni

ArchLinux Small Business Server (19) - Mail Server (4)

http://www.stenoweb.it/files/blog/archlogo.png Nell' articolo precedente in Postfix abbiamo impostato la direttiva check_policy_service per utilizzare un anche un servizio esterno per le restrizioni. In questo caso vogliamo usare Postgrey che implementa il graylisting. Cos'e' il graylisting ? Molti avranno sicuramente sentito parlare di whitelist (la lista dei buoni) e blacklist (la lista dei cattivi). Con Postgrey si implementa un livello intermedio tra i due, detto appunto greylist (che fantasia :)).

Questo sistema sfrutta un concetto molto semplice: visto l'elevato numero di mail che gli spammers inviano, raramente tentano più di una volta l'invio della posta ad un destinatario.
Con Postgrey il vostro server sfrutta questo fatto respingendo temporaneamente tutte le email provenienti da mittenti sconosciuti segnalando loro che la casella di posta del destinatario non è momentaneamente disponibile e mettendosi in ascolto per il secondo tentativo che un server "ufficiale" fà sempre.

Semplice, efficace ed ingegnoso, non servono filtri bayesiani o altre diavolerie e, ve lo garantisco, per il momento questo sistema spazza via da solo oltre il 95% dello spam !.

Più sotto vedremo in dettaglio il funzionamento.

Configurazione

La configurazione base di Postgrey è molto semplice. Anzi, praticamente nulla. Nelle smtpd_recipient_restrictions di Postfix abbiamo già impostato:

check_policy_service inet:127.0.0.1:10030

E siamo già a posto, possiamo avviare il servizio per metterlo in funzione
sudo /etc/rc.d/postgrey start

e inserirlo nell'array di avvio in /etc/rc.conf prima (anche se forse non è importante l'ordine) di postfix :
DAEMONS=(... ... ... ... ... postgrey postfix ... ... ...)

Ulteriori configurazioni per Postgrey possono essere fatte editando il file dei default del servizio postgrey
sudo nano /etc/conf.d/postgrey

di particolare interesse possono essere i due parametri :

  • --delay : definisce per quanti secondi in messaggio viene messo in graylist. Di default 300 secondi.
  • --max-age : definisce per quanti giorni un mittente che ha già in passato superato la verifica rimane nella whitelist generata da postgrey. Finchè sono qui verranno in futuro accettati senza verifica. Di default 30 giorni.

Per variare questi parametri bisogna metterli nella variabile POSTGREY_OPTS, e riavviare il servizio.
Ad esempio, per portare il delay a 180 secondi e il max age a 60 giorni :

POSTGREY_OPTS="--delay=180 --max-age=60"

Postgrey memorizza i suoi dati in formato Berkley DB nella cartella :

/var/spool/postfix/postgrey

Putroppo pare non ci siano comandi per gestire il database o per visualizzare la greylist. Se qualcuno vuole smentirmi è bene accetto.

Possiamo personalizzare le whilelist editando il file dove vengono identificati i domini da non filtrare con greylist :

sudo nano /etc/postfix/postgrey_whitelist_clients

Oppure i destinatari da non filtrare :
/etc/postfix/postgrey_whitelist_recipients

Il giochino di Postgrey

Con la configurazione di default vediamo a grandi linee cosa succede quando a Postgrey viene chiesta la verifica di una mail da un utente fino ad ora sconosciuto :

  1. Postgrey rifiuta la mail e Postfix comunica che la mailbox dell'utente non è al momento disponibile
  2. Postgrey memorizza la terna indirizzo IP dell'host sorgente, email del mittente, email del destinatario nella greylist
  3. Al successivo tentativo del server mittente se non è trascorso il tempo di delay (300 secondi), postgrey continua a rifiutare la mail. Questo per evitare i rinvii troppo veloci operati dagli spammers.
  4. Se al successivo reinvio il tempo di delay è trascorso postgrey accetta la mail e memorizza la terna indirizzo IP dell'host sorgente, email del mittente, email del destinatario nella sua whitelist per max age tempo (30 giorni)

Come vediamo la "terna" rimane nella white list di default per 30 giorni, in questo modo chi ci invia regolarmente email non viene più " ritardato" da postgrey ma accettato subito.

Controindicazioni ?

Bhe, a parte un ritardo di 5 minuti la prima volta che qualcuno ci scrive sinceramente non ne vedo. Ok, il sistema si appesantisce perchè ogni nuovo messaggio deve essere inviato due volte, ma credetemi che i benefici sono enormi. Ho un semplice caso in cui con Postgrey i messaggi di spam sono passati da circa 8.000 al giorno a qualche decina.

Godiamoci il greylisting finchè funziona, temo che se verrà implementato su larga scala (credo che i grossi provider con alto volume di traffico difficilmente lo faranno) gli spammers cominceranno ad uscire con delle contromisure...

Una guerra infinita.

Alla prossima.