Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare il corretto terminie dei loro programmi C.

— Robert Firth

ArchLinux Small Business Server (21) - Mail Server (6)

http://www.stenoweb.it/files/blog/archlogo.png Configuriamo il sistema per utilizzare amavis-new, occhio al file di configurazione dello stesso: UN VERO INCUBO, quindi non addormentatevi sulla tastiera e magari salvate l'originale che se sbagliate qualche virgoletta o altro non funziona più un tubo ... O_o. Iniziamo con la parte Postfix e con qualla Spamassassin, per conludere, nel prossimo articolo, con quella relativa a Clamav.

Postfix

Sì, cavolo, ancora Postfix. Dobbiamo modificare il file dove vengono definiti i suoi servizi aggiungendone uno per amavis e configurarlo affinché ne faccia uso.
Modifichiamo il file master.cf (occhio, non main.cf), dove, appunto, sono specificate le impostazioni dei servizi di postfix:

sudo nano /etc/postfix/master.cf

e aggiungiamo in fondo :

## AMAVIS
##
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-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 smtpd_milters=
-o local_header_rewrite_clients=
-o local_recipient_maps=
-o relay_recipient_maps=
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

I parametri sono una marea prendeteli per buoni, oppure (meglio) googolate alla ricerca di una spiegazione. Due cose però le scrivo. Cosa diavolo abbiamo fatto ? Semplice (si fà per dire) abbiamo definito due "servizi": amavis per il delivery via smtp della posta al content filter, e la porta di reiniezione (reinjection sulla 10025) dove ci aspettiamo la risposta. Facile no ? :D
Lo sò, lo sò vi viene voglia di installare Exchange ...

Non abbiamo finito, ricercate la riga più sù dove stà scritto "pickup" e fatela diventare così:

pickup    fifo  n       -       n       60      1       pickup
-o content_filter=
-o receive_override_options=no_header_body_checks

Questo fà si che i messaggi locali (ad esempio quelli generati dal server stesso con crond per postmaster o root o chicchessia) non vengano filtrati.

Bene ora un ultimo tocco a main.cf :

sudo nano /etc/postfix/main.cf

in cui, ovviamente (almeno per chi non si è ancora perso), dobbiamo dire a postfix di usare il content filter alltraverso il servizio che abbiamo definito. Aggiungiamo quindi in fondo :
content_filter = amavis:[127.0.0.1]:10024

Ok ? Utilizziamo il servizio amavis che stà sulla interfaccia di loopback (127.0.0.1) sulla porta 10024. Questo vi dovrebbe far intuire che potremmo usare anche un altro server per il content filter, ma non perdiamoci, nella nostra Small Buisiness abbiamo un unico server ;)

Amavis

Bene, andiamo finalmente ad editare il nostro file-incubo che serve a configurare amavis. Perchè incubo ? Appena lo aprirete sull'editor capirete, diciamo che è un po' delicatino ...

sudo nano /etc/amavisd/amavisd.conf

Assicuriamoci che l'utente e il gruppo amavis siano impostati:
$daemon_user = 'amavis';
$daemon_group = 'amavis';

Troviamo e impostiamo la variabile $mydomain con il dominio:
$mydomain = 'mede.it';

e cambiamo il nome del nostro host (deve esistere!) con la variabile $myhostname
$myhostname = 'archi.mede.it';

troviamo la riga seguente e aggiungiamo il nostro dominio :
@local_domains_maps = ( [".$mydomain", ".mede.it"] );

Ora dobbiamo configurare la parte spamassassin di amavis-new. Questo primo fà si che tutte le mail indirizzate ai domini in @local_domains avranno specificato il punteggio spam nella header della mail, che siano spam oppure no.
$sa_tag_level_deflt = undef;

Questo è il punteggio "spartiacque" delle mail. In ogni mail con punteggio superiore a $sa_tag2_level_deflt sarà considerata spam, verrà aggiunto un prefisso "[SPAM] " all'oggetto e sarà inviata al destinatario.
$sa_tag2_level_deflt = 5.0;

Questo valore definisce il punteggio sopra cui la mail deve essere nessa in quarantena da Amavis. Definisce anche il livello sopra il quale il mittente viene avvisato (Delivery Status Notification, DSN) che il messaggio non è stato recapitato. Nessun DSN viene inviato, tuttavia, se il parametro $sa_dsn_cutoff_level è impostato ad un valore inferiore al punteggio spam (vedi dopo).
Siccome noi non vogliamo per niente al mondo avvisare gli spammers che gli abbiamo "sgamato" la mail impostiamo il parametro al valore assurdo di 10000.
$sa_kill_level_deflt = 10000;

Fino a questo momento tutto lo spam è inviato ai nostri utenti, con il solo oggetto modificato. Tuttavia, quando definiremo la variabile $spam_quarantine_to più sotto, in effetti ognuna di queste mail sarà considerata "bisognosa di quarantena" e inviata a chi definito dal parametro con oggetto e header modificato.
Questo parametro definisce il punteggio oltre al quale non siamo interessati ad inviare la notifica (DSN) al mittente. Possiamo lasciare questo valore dal momento che non siamo interessati ad inviare alcuna notifica (cambiaremo D_BOUNCE in D_DISCARD più sotto).

$sa_dsn_cutoff_level = 9;

Oltre questo livello la mail non viene nemmeno posta in quarantena
$sa_quarantine_cutoff_level = 20;

Come preannunciato, non inviamo MAI alcuna notifica ai mittenti. Tutte le mail finiscono in quarantena. Il preferisco inviare le mail ad un responsabile perchè controlli i messaggi incriminati anzichè in una directory di quarantena, i filtri non sono perfetti e si potrebbero verificare dei falsi positivi. Per fare questo definiamo i destinatari, e la directory di quarantena verrà disabilitata automaticamente:
$final_virus_destiny = D_DISCARD;
$final_spam_destiny = D_DISCARD;
$final_banned_destiny = D_DISCARD;

Gli indirizzi seguenti diventeranno, dunque, virus@mede.it e spam@mede.it e naturalmente devo ricordare di aggiungere questi destinatari sul mio server, o di "girarli" tramite alias a qualche indirizzo esistente.
$virus_quarantine_to = "virus\@mydomain";
$banned_quarantine_to = "spam\@$mydomain";
$bad_header_quarantine_to = "spam\@$mydomain";
$spam_quarantine_to = "spam\@$mydomain";

Ora definiamo gli indirizzi di notifica. Questi destinatari riceveranno le notifiche sui virus trovati, per disabilitare la notifica basta commentare la riga.
$virus_admin = "postmaster\@$mydomain";
$banned_admin = "postmaster\@$mydomain";

Non sarete mica già stufi ! Ora definiamo chi debba essere il mittente delle notifiche :
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain";
$hdrfrom_notify_sender = "amavisd-new <postmaster\@$mydomain>";

e per ultima la stringa che deve essere anteposta all' oggetto della mail che consideriamo SPAM :
$sa_spam_subject_tag = '[SPAM] ';

Ora le mail arriveranno, se SPAM, con l'oggetto modificato che include questa stringa.

Noiosa questa parte vero ? Almeno per me lo è stata, forse sono particolarmente allergico a questo file di configurazione che sembra (e probabilmente lo è) un sorgente scritto in perl. Veramente difficoltoso districarsi tra il marasma di opzioni, forse si potrebbe far meglio, ma l'importante è che faccia il suo dovere, e su questo non ci sono dubbi.

Alla prossima.

carissimo steno ho provato a mettere su in piedi un server di posta seguendo i tuoi passi tutto bene ma:
mi rimane una cosa che non rieco a risolvere
non riesco a mandare le spam a spam@atihr.com vengono bybassate e ricevute all'utente finale come spam
cosa devo fare
grazie