[howto] Debian 7.0 “Wheezy”: mail server con Postfix, Dovecot e mySql (parte 2)
Amavisd-new, spamassassin e clamav (antispam e antivirus)
Installazione dei pacchetti:
apt-get install amavisd-new spamassassin clamav-daemon clamav arj zip p7zip unzip zoo unrar-free cabextract nomarch lzop rpm pax tnef ripole lhasa
Configurazione di amavisd-new
Impostare l’hostname del server, modificando il file di configurazione 05-node_id di amavis:
nano -w /etc/amavis/conf.d/05-node_id
La riga da editare è $myhostname
#Qualified Domain Name (FQDN) and remove the # at the beginning of the line.
$myhostname = "mail.esempio.it";
Modifiche alla configurazione di Postfix per l’integrazione con amavis
Modificare il file di configurazione di Postfix (main.cf)
nano -w /etc/postfix/main.cf 
aggiungendo in fondo la seguente riga:
content_filter=smtp-amavis:[127.0.0.1]:10024
Inoltre, va modificato il file master.cf per aggiungere il servizio di amavis
nano -w /etc/postfix/master.cf 
aggiungendo in fondo queste righe:
 smtp-amavis unix    -       -       n       -       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    -       n       -       -     smtpd
    -o content_filter=
    -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 smtpd_restriction_classes=
    -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,no_milters
    -o local_header_rewrite_clients=
Il numero 2 nella riga smtp-amavis unix rappresenta il numero dei processi figli amavis; alzare il valore per gestire un alto traffico di email.
Modificare il file 20-debian_defaults di amavis
 # vi /etc/amavis/conf.d/20-debian_defaults 
in questo modo:
#Non viene specificata una directory per la quarantena
#in quanto verrà dirottata la mail ad un utente apposito
#$QUARANTINEDIR = "$MYHOME/virusmails";
$TEMPBASE = "/var/tmp";
#Inoltro delle mail virus e spam ad appositi utenti
$virus_quarantine_to = 'virus@esempio.it';
$spam_quarantine_to = 'spam@esempio.it';
$banned_quarantine_to = $spam_quarantine_to;
$bad_header_quarantine_to = $spam_quarantine_to;
$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
$final_banned_destiny     = D_DISCARD;   # D_REJECT when front-end MTA
$final_spam_destiny       = D_DISCARD;
$final_bad_header_destiny = D_DISCARD;     # False-positive prone (for spam)
 #$virus_admin = "postmaster\@$mydomain"; # due to D_DISCARD default
 $virus_admin = undef; #non notificare l'admin le notifiche di ricezione virus
Infine, riavviare il servizio amavisd
service amavis restart
Configurazione di mySql per white list, black list e policy di amavis
Connettersi al database mail su mysql e creare le tabelle necessarie:
mysql -u root
#mysql> use mail;
#mysql> CREATE TABLE wblist (
  email      varchar(255) NOT NULL,
  wb         char(1) NOT NULL DEFAULT 'w', -- W/B  (White=HAM, Black=SPAM)
  KEY email (email)
  );
#mysql> CREATE TABLE policy (
  id               int unsigned NOT NULL auto_increment,
  policy_name      varchar(32),     -- nome.Non usato da amavisd-new
  virus_lover          char(1),     -- Y/N
  spam_lover           char(1),     -- Y/N  (campo opzionale)
  banned_files_lover   char(1),     -- Y/N  (campo opzionale)
  bad_header_lover     char(1),     -- Y/N  (campo opzionale)
  bypass_virus_checks  char(1),     -- Y/N
  bypass_spam_checks   char(1),     -- Y/N
  bypass_banned_checks char(1),     -- Y/N  (campo opzionale)
  bypass_header_checks char(1),     -- Y/N  (campo opzionale)
  spam_modifies_subj   char(1),     -- Y/N  (campo opzionale)
  virus_quarantine_to   varchar(64) DEFAULT NULL, -- (campo opzionale)
  spam_quarantine_to   varchar(64) DEFAULT NULL, -- (campo opzionale)
  banned_quarantine_to   varchar(64) DEFAULT NULL, -- (campo opzionale)
  bad_header_quarantine_to   varchar(64) DEFAULT NULL, -- (campo opzionale)
  spam_tag_level  float,  -- un punteggio alto inserisce le intestazioni spam
  spam_tag2_level float DEFAULT NULL,  -- un punteggio alto inserisce le
              -- intestazioni di 'spam dichiarato'
  spam_kill_level float,  -- un punteggio alto attiva le azioni evasive:
              -- rifiuto/scarto, quarantena, ...
              -- (soggetto all'impostazione di final_spam_destiny)
  PRIMARY KEY (id)
 );
Infine, carichiamo la policy predefinita
 #mysql> INSERT INTO policy
  SET
     id                     =1,
     policy_name            ="Filtro predefinito",
     virus_lover            ="N",
     spam_lover             ="N",
     banned_files_lover     ="N",
     bad_header_lover       ="N",
     bypass_virus_checks    ="N",
     bypass_spam_checks     ="N",
     bypass_banned_checks   ="N",
     bypass_header_checks   ="N",
     spam_modifies_subj     ="Y",
     spam_quarantine_to     ="spam@esempio.it",
  	virus_quarantine_to    ="virus@esempio.it",
  	banned_quarantine_to    ="spam@esempio.it",
  	bad_header_quarantine_to  ="spam@esempio.it",
     spam_tag_level         =2,
     spam_tag2_level        =6.31,
     spam_kill_level        =7;
Impostare amavis per accedere al database, modificando il file 20-debian_defaults in questo modo:
#connessione al database
 @lookup_sql_dsn =
  ( ['DBI:mysql:mail:localhost', 'mailuser', 'mailpassword']  );
 #carica le impostazioni definite di policy
 $sql_select_policy = 'SELECT * FROM policy';
 #Per ottenere white/blacklisting in base al mittente
  $sql_select_white_black_list = 'SELECT wb FROM wblist'.
    ' WHERE (email IN (%k))';
Configurazione di Clamav
Modificare l’intervallo di aggiornamento delle definizioni attraverso il parametro Checks del file freshclam.conf
nano -w /etc/clamav/freshclam.conf 
Checks 4
Aggiungere l’utente clamav al gruppo amavis, per consentire l’accesso all’antivirus alle cartelle tempornaee di amavis:
gpasswd -a clamav amavis 
Verificare che nel file /etc/amavis/conf.d/15-av_scanners sia presente l’istruzione per eseguire clamav (di default dovrebbe esserlo). Quindi, abilitare il controllo dei virus attraverso amavis modificando il file
nano -w /etc/amavis/conf.d/15-content_filter_mode
e rimuovendo (se presenti) i commenti dalla riga @bypass_virus_check
 @bypass_virus_checks_maps = (
    \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re)
Configurazione di Spamassassin
Modificare o aggiungere i seguenti parametri nel file /etc/spamassassin/local.cf:
#permette di avere un unico database bayes anziché uno in ogni home degli  user
bayes_path /etc/spamassassin/bayes/bayes
bayes_file_mode 0666
Quindi creare la cartella specificata /etc/spamassassin/bayes con gli opportuni permessi
mkdir /etc/spamassassin/bayes
chmod 777 /etc/spamassassin/bayes
Disabilitare il demone spamd, in quanto è preferibile interfacciarsi tramite le API di Amavis, impostando il valore del parametro a zero nel file /etc/default/spamassassin:
#Change to one to enable spamd
ENABLED=0
Infine, abilitare il controllo dello spam attraverso le API di Amavis verificando la riga @bypass_spam_check non sia commentata nel file 15-content_filter_mode di amavis:
nano -w /etc/amavis/conf.d/15-content_filter_mode
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Verificare la configurazione di spamassassin attraverso il comando:
spamassassin --lint 
Quindi, testandone il funzionamento con un file di test:
spamassassin -D < /usr/share/doc/spamassassin/examples/sample-spam.txt
Infine, riavviare i servizi:
service amavis restart
service postfix restart
L’articolo originale lo trovate nel post Server mail: Postfix Amavisd-new Dovecot e MySql pubblicato sul sito Guide@Debianizzati.org