4 069
contributi
Riga 842: | Riga 842: | ||
<pre> | <pre> | ||
System appeared to reject relay attempts | System appeared to reject relay attempts | ||
</pre> | |||
=== Filtrare spam e virus con AMaViS === | |||
AMaViS (A Mail Virus Scanner) è un'interfaccia tra Postfix, SpamAssassin e un virus scanner come ClamAV. La configurazione si AMaViS è divisa in alcuni files nella directory <code>/etc/amavis/conf.d</code>. | |||
<br/> | |||
Il virus scanner ClamAV è già configurato per default e va solo abilitato modificando il file: | |||
<pre> | |||
# nano /etc/amavis/conf.d/15-content_filter_mode | |||
</pre> | |||
rimuovendo il commento <code>#</code> dalle linee <code>@bypass_...</code>. | |||
<br/> | |||
E' buona cosa dare un occhio anche al file <code>/etc/amavis/conf.d/20-debian_defaults</code>; non cambiate questo file. Se avete bisogno di inserire delle personalizzazioni, utilizzate il file <code>/etc/amavis/conf.d/50-user</code>. | |||
* <code>$sa_spam_subject_tag</code>: se questa linea viene lasciata non commentata, allora ogni email ritenuta da AMaViS sospetta di spam avrà questa stringa inserita nell'oggetto della mail. Se non vogliamo alterare l'oggetto della mail possiamo impostarla a <code>$sa_spam_subject_tag=undef</code>. I client email potranno comunque riconoscere lo spam controllando l'header <code>X-Spam-Status</code> | |||
* <code>$sa_tag_level_deflt</code>: un messaggio con un punteggio spam uguale o maggiore a questo valore sarà taggata con lo spam header | |||
* <code>$sa_tag2_level_deflt</code>: i messaggi con un punteggio spam uguale o superiore saranno marcati come spam | |||
* <code>$sa_kill_level_deflt</code>: dovrebbe essere impostato allo stesso valore di <code>$sa_tag2_level_deflt</code> | |||
* <code>$final_spam_destiny</code>: il valore raccomandato è <code>D_PASS</code> | |||
* <code>$spam_quarantine_to</code>: dove vengono mandate in quarantena le mail di spam. Il valore suggerito è <code>undef</code> | |||
Un corretto file <code>50-user</code> potrebbe essere: | |||
<pre> | |||
$sa_spam_subject_tag = undef; | |||
$spam_quarantine_to = undef; | |||
$sa_tag_level_deflt = undef; | |||
$final_spam_destiny = D_PASS; | |||
1; # ensure a defined return | |||
</pre> | |||
Riavviamo AMaViS per fargli digerire le modifiche: | |||
<pre> | |||
# /etc/init.d/amavis restart | |||
</pre> | |||
Verifichiamo che AMaViS sia in ascolto sulla porta 10024: | |||
<pre> | |||
# netstat -nap | grep 10024 | |||
</pre> | |||
dovrebbe restituire: | |||
<pre> | |||
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 12345/amavisd | |||
</pre> | |||
Se otteniamo questa linea significa che AMaViS è in funzione correttamente, in attesa di sessioni SMTP. In caso contrario conviene controllare il file di log <code>/var/log/mail.log</code>. | |||
==== Integrazione di AMaViS con Postfix ==== | |||
Ogni email inviata sarà ricevuta dal server Postfix, in ascolto sulla porta TCP 25 (SMTP). Ogni mail accettata da Postfix sarà inoltrata a AMaViS sulla porta TCP 10024 (SMTP). AMaViS controllerà il contenuto della mail e, se ritenuta non pericolosa, restituirà la mail a Postfix sulla porta TCP 10025 (SMTP). Senza effettuare altri controlli Postfix inoltrerà la mail al destinatario. | |||
<br/> | |||
Per fare in modo che POstfix inoltri le mail in arrivo a AMaViS occorre modificare alcune direttive: | |||
<pre> | |||
# postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024 | |||
# postconf -e receive_override_options=no_address_mappings | |||
</pre> | |||
Abbiamo bisogno innanzitutto di definire il servizio <code>smtp-amavis</code> nel file <code>/etc/postfix/master.cf</code> e abbiamo inoltre bisogno che Postfix si metta in ascolto sulla porta TCP 10025 per ricevere le mail di ritorno da AMaViS. Modifichiamo quindi il file <code>/etc/postfix/master.cf</code>: | |||
<pre> | |||
# nano /etc/postfix/master.cf | |||
</pre> | |||
aggiungendo le linee: | |||
<pre> | |||
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 - - - - 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 | |||
-o local_header_rewrite_clients= | |||
</pre> | |||
Quindi riavviamo POstfix: | |||
<pre> | |||
# postfix reload | |||
</pre> | |||
Un parametro in particolare di questa configurazione ha bisogno di alcune spiegazioni. La direttiva <code>receive_override_options</code> è impostata su <code>no_address_mappings</code>. Questo disablita tutti i nostri alias virtuali. Subito dopo la mail è inviata al servizio <code>smtp-amavis</code> e infine ritorna sul servizio <code>127.0.0.1:10025</code>, su cui sono settate diverse opzioni. Una di queste opzioni è ancora <code>receive_override_options</code>, ma questa volta il suo valore è diverso e quindi, finalmente, Postfix prende in considerazione i nostri alias virtuali. Può sembrare complicato, ma è l'unica strada per evitare che i nostri alias siano valutati due volte, portando a una doppia spedizione di ogni email. | |||
<br/><br/> | |||
L'utente ''clamav'' deve appartenere al gruppo di sistema ''amavis'', in modo che i due servizi possano comunicare tra loro: | |||
<pre> | |||
# adduser clamav amavis | |||
# /etc/init.d/clamav-daemon restart | |||
<pre> | |||
<br/> | |||
AMaViS cercherà di scoprire se una certa mail è in arrivo (spedita da internet verso uno dei nostri domini) o in uscita (spedita dal nostro server verso internet) controllando l'impostazione <code>@acl_local_domains</code>. Dobbiamo perciò dire a AMaViS come controllare se un certo dominio e uno dei nostri domini virtuali. Modifichiamo quindi il file <code>/etc/amavis/conf.d/50-user</code> aggiungendo, prima della line <code>1;</code> le linee: | |||
<pre> | |||
@lookup_sql_dsn = ( | |||
['DBI:mysql:database=mailserver;host=127.0.0.1;port=3306', | |||
'mailuser', | |||
'mailuser2009']); | |||
$sql_select_policy = 'SELECT name FROM virtual_domains WHERE CONCAT("@",name) IN (%k)'; | |||
</pre> | |||
* La direttiva <code>@lookup_sql_dsn</code> definisce come AMaViS può accedere al database | |||
* La direttiva <code>$sql_select_policy</code> imposta la query che viene eseguita per determinare se il dominio in scansione è uno dei nostri domini virtuali. | |||
<br/> | |||
Riavviamo AMaViS: | |||
<pre> | |||
# /etc/init.d/amavis restart | |||
</pre> | |||
e proviamo a spedire una mail a ''john@example.com''. Se esaminiamo gli header di questa mail noteremo le linee aggiunte da AMaViS durante la scansione: | |||
<pre> | |||
X-Virus-Scanned: Debian amavisd-new at mymailserver | |||
X-Spam-Score: 0 | |||
X-Spam-Level: | |||
X-Spam-Status: No, score=0 tagged_above=-9999 required=6.31 tests=[none] | |||
</pre> | |||
I nostri utenti potranno filtrare lo spam basandosi su queste informazioni. La linea <code>X-Spam-Status</code> sarà impostata a ''Yes'' se il punteggio spam supera quello definito nella direttiva <code>$sa_tag2_level_deflt</code>. La linea <code>X-Spam-Level</code> contiene un certo numero di ''*'' che definiscono il punteggio spam. Un esempio reale è il seguente: | |||
<pre> | |||
X-Spam-Status: Yes, hits=16.0 tagged_above=-9999.0 required=6.31 | |||
tests=BAYES_99, FORGED_MUA_OUTLOOK, MSGID_FROM_MTA_ID, | |||
RCVD_IN_BL_SPAMCOP_NET, UNDISC_RECIPS, URIBL_OB_SURBL, WORK_AT_HOME | |||
X-Spam-Level: *************** | |||
X-Spam-Flag: YES | |||
</pre> | |||
Come ultima cosa modifichiamo i permessi del file in modo che nessun utente non autorizzato possa leggere la password del nostro database: | |||
<pre> | |||
# chmod o= /etc/amavis/conf.d/50-user | |||
</pre> | </pre> |