Anche se non rientra strettamente nel funzionamento di un mailserver, non possiamo pensare di metterne in piedi uno senza prevedere qualche strumento di antispam/antivirus. Si stima che la percentuale di spam superi il 50% dei messaggi email ricevuti, pertanto se non vogliamo che i nostri utenti si trovino più spam che mail legittime dobbiamo prendere le opportune contromisure. Esistono diverse soluzioni, gratuite o a pagamento, che permettono di combattere in modo efficace lo spam. In questa guida andremo a vedere una classica combinazione usata per Postfix data dall’utilizzo di tre software cooperanti tra loro: Amavis, Spamassassin e Clamav.
Prima di procedere con le installazioni e configurazioni vediamo concettualmente come sarà il funzionamento. Postfix riceve email dal web e passa il messaggio ad Amavis sempre tramite SMTP sulla porta 25. A questo punto Amavis gira la mail per i controlli a Spamassassin (software antispam) e a Clamav (software antivirus). Una volta che la mail è stata controllata Amavis decreta se questa è legittima o spam e la inoltra nuovamente a Postfix utilizzando la porta 10025. Di fatto amavis agisce come un proxy SMTP.
Installazioni
Per prima cosa installiamo i tre software appena descritti:
sudo apt-get install amavisd-new spamassassin clamav-daemon
Proseguiamo poi con l’installazione di pacchetti opzionali ma utili al fine di identificare lo spam:
sudo apt-get install libnet-dns-perl libmail-spf-perl pyzor razor
Installiamo infine anche questi pacchetti che consentono una scansione approfondita anche dentro gli allegati:
sudo apt-get install arj bzip2 cabextract cpio file gzip lhasa nomarch pax rar unrar unzip zip zoo
Il software necessario è stato tutto installato, vediamo pertanto come configurare ciascun programma.
Clamav
Le configurazioni di Clamav si trovano all’interno della directory /etc/clamav ma la configurazione di default va già bene per le nostre necessità, pertanto per una volta non andremo a toccare nulla! Quello che dobbiamo fare invece è creare l’utente clamav e l’utente amavis. Dovremo poi aggiungerli entrambi al gruppo dell’altro per dare a Clamav l’accesso ai files in modo da poterli scansionare:
sudo adduser clamav amavis
sudo adduser amavis clamav
Diamo anche una password all’utente amavis dal momento che lo utilizzeremo in seguito per l’accesso:
sudo passwd amavis
Spamassassin
Abilitiamo razor e pyzor, due sistemi per individuare lo spam usati da spamassassin, accedendo con l’utente amavis:
su - amavis -s /bin/bash
razor-admin -create
razor-admin -register
pyzor discover
exit
Amavis
Per prima cosa dobbiamo attivare il rilevamento di spam e antivirus su amavis. Per farlo editiamo il seguente file:
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Decommentiamo il suo contenuto in modo da avere queste istruzioni:
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Uncomment the two lines below to enable it
#
@bypass_virus_checks_maps = (
%bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it
#
@bypass_spam_checks_maps = (
%bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);
1; # insure a defined return
Il comportamento di default di amavis è di segnalare al mittente che il suo messaggio è stato considerato spam spedendogli indietro il messaggio stesso. Questo comportamento in alcuni casi può essere inutile (nel caso l’indirizzo fosse fasullo) o addirittura dannoso (nel caso lo spammer volesse solo accertarsi dell’esistenza degli indirizzi per attacchi futuri). Può essere consigliabile pertanto andare a modificare il file:
sudo nano /etc/amavis/conf.d/20-debian_defaults
e impostare il parametro final_spam_destiny a D_DISCARD al posto di D_BOUNCE:
$final_spam_destiny = D_DISCARD;
Terminate queste modifiche possiamo procedere col riavvio di amavis:
sudo /etc/init.d/amavis restart
Integrazione con Postfix
Ora è il momento di configurare Postfix in modo da poter usufruire dei servizi di antivirus e antispam appena configurati. Per prima cosa abilitiamo il content filter su Postfix in modo che passi ogni messaggio mail ad amavis. Per farlo editiamo il file main.cf:
sudo nano /etc/postfix/main.cf
e aggiungiamo il fondo al file la seguente istruzione:
content_filter = smtp-amavis:[127.0.0.1]:10024
Salviamo e chiudiamo main.cf per andare ad editare il file master.cf:
sudo nano /etc/postfix/master.cf
Individuiamo la direttiva del servizio "pickup" e incolliamo sotto le 2 seguenti istruzioni:
-o content_filter=
-o receive_override_options=no_header_body_checks
In fondo al file invece aggiungiamo quanto segue:
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
A questo punto salviamo e chiudiamo anche master.cf e le configurazioni per antispam/antivirus sono terminate.
Chi volesse approfondire l’integrazione di Amavis con Postfix può farlo da qui.
Durante le operazioni è sempre bene tenere d’occhio il file di log /var/log/mail.log utilizzato dai programmi visti finora. Anche amavis scrive su quel file i propri messaggi, volendo possiamo cambiare il dettaglio dei log modificando il valore log_level da 1 a 5 nel file /etc/amavis/conf.d/50-user. Per avere la conferma che amavis risponda e sia attivo possiamo testarlo dal server stesso lanciando una sessione telnet e interrogando il localhost sulla porta 10024 specificata in fase di configurazione:
telnet localhost 10024
Se tutto va bene riusciremo a stabilire una connessione e otterremo le seguenti risposte:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready