Postfix e Spamassassin

Ven, 25/02/2005 - 10:59

Postfix e Spamassassin

Inviato da Incubus 9 commenti

SCOPO
Installare e configurare un server di posta (non solo locale per il proprio pc o per la propria lan) con funzioni di filtraggio spam.

TOOLS
Programmi usati:
postfix
spamassassin
procmail

INSTALLAZIONNE
L'installazione è semplice: il caro apt è tutto quello di cui abbiamo bisogno Smile

# apt-get install postfix spamc spamd pyzor procmail

All'installazione di posrfix, vi verrà chiesto come configurare il demone (se per la consegna locale, su internet o altro): voi scegliete "nessuna configurazione": provvederemo a fare tutto a mano Smile

- la versione di spamassassin a cui si fa riferimento in questa guida è la 3.x
- la versione di postfix a cui si fa riferimento in questa guida è la 2.x

CONFIGURAZIONE DI POSTFIX
Il file di configurazione principale di postfix è main.cf, situato in /etc/postfix/: editiamolo quindi con l'editor preferito e iniziamo a modificarlo:


# command_directory specifica il path di tutti i comandi di cui postfix (postXXX) necessiata.
#
command_directory = /usr/sbin

# daemon_directory definisce il path dove risiedono i programmi indicati nel file master.cf (anche lui presente in /etc/postfix/)
# Il proprietadio di questa cartella DEVE ESSERE root.
#
daemon_directory = /usr/lib/postfix

# Directory dove risiedono i programmi di postfix
program_directory = /usr/lib/postfix

# L'utente con cui verranno mandati in esecuzione tutti i processi di cui postfix neecessita:
# è consigliabile usare un utente con privilegi minimi (l'utente postfix viene creato automaticamente all'installazione del demone), che non sia daemon o nobody.
mail_owner = postfix

# Privilegi minimi dell'agente di smistamento posta locale
default_privs = nobody

# Qui dovete indicare il nome completo del vostro pc, comprensivo di dominio: fate attenzione perchè questo parametro è molto importante: identifica il vostro sistema di posta ANCHE su internet: se avete un account presso dyndns o simili, o avete un dominio vostro che punta al pc su cui gira postfix, indicando qui tale nome, potrete farvi recapitare la posta direttamente a casa Smile
# ESEMPIO:
# sul mio sistema c'è l'utente "incubus", e quando mi collego a internet, aggiorno automaticamente dyndns facendo puntare il mio 'dominio' "incubus.homelinux.net" al nuovo ip. In questo modo, se qualcuno mi dovesse mandare una mail a incubus (at) incubus.homelinux.net, tale mail verrebbe processata dal mio server di posta e consegnata automaticamente all'utente presente sulla mia macchina Smile

myhostname = incubus.homelinux.net

# Il nome del vostro dominio (nel mio caso, essendo "proprietario" di incubus.homelinux.net e non di homelinux.net, il nome del dominio corrisponde all'hostname)
mydomain = incubus.homelinux.net

# Il dominio che risulterà l'origine delle e-mail
myorigin = $myhostname

# Le interfacce da cui postfix dovrà accettare le email
inet_interfaces = all

# L'elenco dei domini che postfix considererà locali: per tali domini postfix consegnerà le maill localmente senza interpellare l'esterno.
mydestination = $myhostname, localhost.$mydomain $mydomain

# Elenco degli ip collegati al pc e ritenute locali.
# ESEMPIO:
# la rete di casa mia è 192.168.1.0 con netmask 255.255.255.0 quindi considero locali, oltre il localhost, tutti gli ip di quella sottorete.
mynetworks = 127.0.0.0/8, 192.168.1.0/24

# Se indicato, postfix manderà le mail a questo smtp delegando a lui il compito di consegnarle. Se non viene indicato provvederà lo stesso postfix a consegnarle.

Consiglio di indicare come relay quello del vostro isp perchè spesso l'ip che viene assegnato al momento della conneessione è già blacklistato il che impedisce a postfix e al vostro sistema di essere ritenuto affidabile e quindi di "mandare in giro" le mail. (Sono utente alice, il che potrebe spiegare questa cosa, non è detto che chi usufruisce di un altro provider abbia meno problemi).

relayhost = mail.tin.it

# Elenco degli alias di ssitema
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

# Formato della mailbox (mbox in /var/spool/mail/ oppure Maildir/ in ~/Maildir/): per comodità (e preferenza Smug ) useremo Maildir/
home_mailbox = Maildir/

# Programma esterno (MTA) a cui passare le mail per la consegna
#
mailbox_command = /usr/bin/procmail

# Banner del demone smtp: quello che leggete quando con telnet vi collegate alla porta 25 di un smtp.
# E' d'OBBLIGO indicare $myhostname all'inizio del banner come da specifiche RFC: in main.cf si legge "You MUST specify $myhostname at the start of the text. That is an RFC requirement." quindi:

smtpd_banner = $myhostname ESMTP incubus.homelinux.net

# Imponiamo delle restrizioni su chi può collegarsi al server di posta
smtpd_client_restrictions = permit_mynetworks, reject_unknown_hostname, reject_non_fqdn_hostname
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain

# Richiediamo l'uso del comando HELO per stabilire la connessione e imponiamoo delle restrizioni a chi si collega:
smtpd_helo_required = yes
smtpd_helo_restriction = reject_invalid_hostname, reject_unknown_hostname

# Tempo di attesa in caso di errore
smtp_error_sleep_time = 1s

# Disabilitiamo il comando verify per la verifica dell'esistenza degli utenti
disable_vrfy_command = yes

# Dimensione massima dei messaggi da accettare (in byte)
message_size_limit = 20480000

CONFIGURAZIONE DI SPAMASSASSIN

Per permettere l'avvio del demone, bisogna editare /etc/default/spamassassin e assicurarsi che "ENABLED" sia a 1. Basta poi farlo partire con il classico /etc/init.d/spamassassin start

Il file principale di configurazione di spamassassin è local.cf situato in /etc/spamassassin/, editiamolo con l'editor di fiducia:


# Punteggio che un messaggio deve raggiungere per essere considerato spam
required_score 5.0

# Testo da aggiungere al Soggetto delle e-mail identificate spam
# Comodo perchè spamassassin non è infallibile e alle volte identiiifca come spam messaggi che invece non lo sono: in questo modo si possono filtrare i messaggi di spam dal client senza perdere posta utile
rewrite_header Subject [SPAM]-->

# Se abilitata, i messaggi ritenuti spam, verranno allegati come file
report_safe 0

# Abilitiamo il filtro Bayesiano
use_bayes 1

# Abilito l'auto-apprendimento di filtro
auto_learn 1

# Abilitiamo il controllo sulle RBL
skip_rbl_checks 0

# Abilito l'uso di pyzor
use_pyzor 1

# Path dell'eseguibile pyzor
pyzor_path /usr/bin/pyzor

# Abilito il controllo sul dns
dns_available yes

# Lingue da non considerare potenzialmente spam
ok_languages italian

# Domini da cui OGNI mail NON verrà considerata spam
whitelist_from *@blueyonder.co.uk
whitelist_from *@clanbase.com
whitelist_from *@tdiclan.com

# Domini da cui OOGNI mail VERRA' considerata spam
blacklist_from *@giovanitrepievi.it

CONFIGURAZIONE DI PROCMAIL
Procmail si occupa di consegnare la posta agli utenti sul sistema, il file di configurazione principale è procmailrc situato in /etc/, apriamolo con l'editor di fiducia e modifichiamolo:


PATH=/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
DROPPRIVS=yes
# Dove salvare la posta
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/mail.log
LOCKFILE=$MAILDIR/mail.lock

# Prima di consegnare le mail, le filtriamo tutte con spamassassin
:0fw:
| spamassassin

# Poi salviamo lo spam in una cartella a parte denominata Spam/
# Lo spam è dientificato da un controllo negli header sul campo X-Spam-Status agiunto da spamassassin quando la mail viene analizzata
:0
* ^X-Spam-Status: Yes*
$Maildir/Spam/

CONCLUSIONE
Ora avete un sistema di posta IMHO eccellente: ci vorrà qualche giorno perchè spamassassin inizi a distinguere tutti i messaggi di spam ma in breve tempo non riceverete più posta indesiderata Smile
Nel mio caso specifico ricevo circa 50 messaggi al giorno, 40 di spam: nell'arco della settimana, nella peggiore delle ipotesi, 4 messaggi sfuggono al filtro.

CREDITS
Autore: Incubus & Paolo Mainardi
E-Mail: incubus@gl-como.net & paolo@psycostudio.org

Ringrazio Paolo per avermi spinto a scrivere questa guida, per la pazienza dimostrata nonostante il tempo che ho impiegato a fornirgli anche la prima bozza e per avermi dato una mano nella correzione e pubblicazione della stessa Smile


In:



Commenti

Ritratto di kripsio
#1

Inviato da kripsio il Ven, 25/02/2005 - 17:42.

Eccellente!

Veramente ben fatta e ben commentata.
Complimenti e grazie!

Puoi, gentilmente, spiegarmi in soldoni il comportamento di pyzor (poi mi munisco di google e mi documento accuratamente ma una veloce introduzione mi piacerebbe).
Grazie Wink



Ritratto di cheis
#2

Inviato da cheis il Sab, 26/02/2005 - 00:15.

Re: Eccellente!

Scusa ma sto provando a mettere in atto la tua guida.. Ma spamd da installare è per caso spampd???

Magari sbaglio Big Grin

[=x-small]Knowledge is power: SHARE IT BABY!!![/]
_____________________________________________



Ritratto di Incubus
#3

Inviato da Incubus il Sab, 26/02/2005 - 10:30.

Re: Eccellente!

Ho controllato: il nome del demone non è spamd ma spamassassin :-P
Chiedo perdono per l'errore: se qualcuno che può modificare la guida, correggesse l'imprecisione mi farebbe un gran favore Big Grin

Sorry



Ritratto di Incubus
#4

Inviato da Incubus il Sab, 26/02/2005 - 10:46.

Re: Eccellente!

Di quel che ricordo quando mi ero documentato per configurare il tutto, pyzor sfrutta dei database "pubblici" per identificare lo spam. Allo stesso modo, quando il proprio sistema identifica della posta indesiderata, tramite pyzor informa questi database "globali" così che siano sempre aggiornati e permettano, a chi li interroga, di avere un filtraggio più sicuro della propria posta.
La spiegazione è vaga, ma ammetto di non essermi documentato a fondo sull'argomento :-P



Ritratto di kripsio
#5

Inviato da kripsio il Sab, 26/02/2005 - 13:33.

Re: Eccellente!

Quote:

La spiegazione è vaga, ma ammetto di non essermi documentato a fondo sull'argomento.

Tutt'altro, e' esattamente quello che ti chiedevo. Ora poi mi rangio io a documentarmi... molte grazie Smile



Ritratto di afrika
#6

Inviato da afrika il Gio, 03/03/2005 - 14:43.

Re: Eccellente!

Ciao,

vorrei innanzitutto complimentarmi per la bella guida...seguendola ho messo su il filtro antispam proposto!

Vorrei, poi, chiederti come mai usi il solo Pyzor tra le Network Test Options...ha a che vedere con la particolare licenza d' uso del progetto?

Grazie Wink



Ritratto di Incubus
#7

Inviato da Incubus il Gio, 03/03/2005 - 17:36.

Re: Eccellente!

Thx per i complimenti Laughing

Uso solo pyzor perchè riesco a filtrare con un errore estremametne basso tutto lo spam che mi arriva e nn vedo il motivo di mettere ulteriori controlli: tutto qui Smile



Ritratto di afrika
#8

Inviato da afrika il Ven, 04/03/2005 - 01:27.

Re: Eccellente!

Ti ringrazio dell' attenzione...

Vorrei aggiungere al tuo commento positivo che pyzor (client) viene eseguito con privilegi utente e risuta essere poco invasivo

Avrei una ulteriore domanda da porre in merito all' auto-learning dei filtri bayesiani...ho letto di recente, infatti, che tale caratteristica può rivelarsi un punto debole se attaccata con la tecnica del bayes poisoning

Per ovviare a tale inconveniente i valori di default delle opzioni:

bayes_auto_learn_threshold_nonspam

bayes_auto_learn_threshold_spam

sono piuttosto conservativi (verso il basso e verso l' alto rispettivamente)

In base alla tua esperienza, hai avuto problemi del genere?

Ciao Big Grin



Ritratto di Incubus
#9

Inviato da Incubus il Mar, 08/03/2005 - 13:10.

Re: Eccellente!

Per ora non ho mai avuto problemi: uso spamassassin da oltre un anno (ho iniziato dall versioen 2.X, ora siamo alla 3.X) ed ero rimasto un po' deluso agli inizia perchè non filtrava a dovere ma poi tutto si era sistemato. Con la versione 3.x, fin da subito non ho mai avuto alcun problema: forse perchè dopo l'installazione avevo usato salearn per fargli ri-analizzare tutte le mail di spam così da avere un database pulito da poter sfruttare per l'analisi delle nuove mail.

Ti ringrazio per la precisazione: farò qualche prova e vedrò se ci sono cambiamenti.

Thx Big Grin