Debian Advanced Mail System HowTo

I'm sorry: only Italian version available…

Update: 17 Ottobre 2005
Versione wiki: Dicembre 2004
Prima Versione: Ottobre 2003

Autore: Federico Quagliata

Importante

Scrissi questo howto tempo fa, molto velocemente, ripromettendomi di revisionarlo appena possibile. Naturalmente ciò non è mai accaduto: segnalazioni di errori, imprecisioni, suggerimenti e quant'altro sono graditissime.

Abstract

Come configurare un sistema di posta che elimini lo spam, smisti le mail in entrata in cartelle diverse e sia consultabile in locale o in remoto tramite IMAP.

Informazioni

Copyright

Copyright (C) 2003-2005 Federico Quagliata.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

Disponibilità

Questa guida sarà sempre disponibile online, in versione XHTML, presso il mio sito internet.

Suggerimenti

Questo HowTo è tutt'altro che perfetto. Qualche esperto potrà scovare qualche falla nei miei esempi di configurazione: gli sarei infinitamente grato se me lo comunicasse; il mio indirizzo è federico@...ta.org (clicca per mostrare l'indirizzo in chiaro). La casella è chiaramente aperta anche a qualsiasi tipo di suggerimento, richiesta, chiarimento, etc… !!!

Convenzioni

Quando un comando inzia per #, come è consueto, significa che ad eseguirlo deve essere l'utente root.

Introduzione

Ho deciso di scrivere questo HowTo per aiutare chi, come me, vorrebbe un sistema di posta avanzato per la propria Debian. Il sistema di posta del quale andrò a parlare è costituito, in buon stile unix, da una catena di programmi, ognuno con un compito specifico. In particolare avremo:

  • Postfix e Fetchmail, come MTA (Mail Transfer Agent). Fetchmail scaricherà per noi la posta via IMAP/POP3 dai nostri account e lascierà a Postfix il compito di recapitarla all'utente del computer
  • Procmail, come MDA (Mail Delivery Agent). Ovvero si preoccuperà di smistare la posta in cartelle.
  • SpamAssassin Come tool antispam
  • Courier-Imap, come server IMAP locale. Ci permetterà d'accedere alle cartelle di posta via IMAP, con l'enorme vantaggio di utilizzare qualsiasi client/macchina (anche d'un amico) ed avere sempre tutta la nostra posta (nuova e vecchia) disponbile e smistata nelle diverse cartelle.

Questa configurazione permetterà ad un utente del sistema (ma smanettando a partire da questo HowTo non sarà difficile aggiungere utenti) d'avere un server IMAP sulla propria macchina che gli permetterà d'accedere alla posta di tutti i suoi vari account dei diversi provider (smistata in cartelle e ripulita dallo spam), accessibile da qualisasi client (anche remoto) compatibile con il protocollo.

Prima di cominciare

Inannzitutto provvediamo ad installare i vari progammi

# apt-get install postfix procmail spamassassin fetchmail courier-imap 

Nulla di più facile… :-)

Durante l'installazione vi verranno fatte delle domande su come configurare i programmi. Le risposte da dare sono illustrate nei prossimi paragrafi.

Configurazione

Postfix

Per la configurazione base di Postfix ci possiamo far aiutare direttamente da Debian; infatti al momento dell'installazione con apt-get ci verranno fatte alcune domande in modo da configurare Postfix secondo le nostre esigenze. In caso aveste già installato Postfix con un'altra configurazione, per richiamare DebConf basta:

# dpkg-reconfigure postfix 

Tipo di configurazione generale

Innanzitutto ci verrà chiesto il tipo di configurazione generale da adottare, per un utenza normale le opzioni da prendere in considerazione sono due:

  1. Internet site: la posta viene inviata e ricevuta direttamente via SMTP. In questo modo, al momento d'inviare la posta, la macchina si collegherà direttamente al server SMTP del destinatario.
  2. Internet site using smarthost: la posta da Internet viene ricevuta sia via SMTP, sia grazie ad utility come fetchmail (come faremo noi), mentre la posta in uscita è inviata tramite uno smarthost. Questo significa che dovremo specificare l'SMTP del nostro provider, e che Postfix agirà come un qualsiasi client di posta, non recapitando direttamente la posta, ma delegando questo compito allo smarthost.

Per il mio sistema ho scelto la prima opzione, preferendo agire come SMTP autonomo, e ricevendo comunque la posta anche con fetchmail ma qui si tratta d'una scelta individuale. Ad esempio potreste voler scegliere la seconda opzione nel caso in cui il vostro IP risulti nelle blacklist di qualche provider, e che quindi siate considerati come fuorilegge. Questo può accadare ad esempio con gli account dialup, quando l'indirizzo dinamico assegnatovi sia stato usato in precedenza da uno spammer.

Mail name

Ora ci viene chiesto un nome dominio valido da utilizzare per le mail in uscita. Quando non viene specificato un mittente esempio , o quando vengono inviati “messaggi di servizio”, Postifx utilizzirà il mail name per la posta in uscita. Di solito s'usa il nome della macchina, nel mio caso: rhinoceros.bsd.st.

Aggiungere .dominio ad indirizzi semplici?

Rispondendo sì a questa domanda, ogni volta che Postfix troverà un nome dominio semplice, ad esempio paperopoli, vi aggiungerà .dominio. Avremo quindi che inviando una mail a paperino@paperopoli, Postfix la invierà automaticamente a paperino@paperopoli.miodominio (sul mio PC a paperino@paperopoli.rhinoceros.bsd.st). Anche la risposta a questa opzione va scelta secondo le proprie esigenze, ricordandosi però che, rispondendo no, si dovrà aggiungere successivamente localhost tra i domini locali. La mia scelta è stata no.

Altre impostazioni

  • Nomi dominio locali: per quali domini Postfix deve recapitare la posta? Se non sapete che scrivere vanno bene il nome della macchina e localhost. Io ho inserito: rhinoceros.bsd.st, localhost, rhinoceros.
  • Nework blocks: i blocchi dai quali si deve accettare posta da recapitare. Salvo particolari configurazioni, il valore predefinito va più che bene, infatti consente l'utilizzo del server solo in locale.
  • Usare Procmail?: certamente sì, dopo provvederemo a configurare anche questo programma. Procmail ci permetterà di smistare la posta in entrata in varie cartelle, dividendo ad esempio le mailing list, lo spam, la posta da familiari, etc…
  • Limite mailbox: lasciare impostato 0 (infinito).
  • Address extension: lasciare il valore predefinito.

Finito

Ora Postfix è configurato. Provate a fare questo test, da terminale

$ mail nomeutente@localhost [Invio]
Subject: Prova [Invio]
Questo e` un messaggio di prova! [Invio][CTRL^D]
Cc: [Invio] 

Ora nomeutente avrà in casella un messaggio da parte di utentechehaeseguitomail@mailnamesceltosopra.

Per controlalre la casella di nomeutente loggarsi come tale, e dare il comando mail:

$ su nomeutente 
$ mail 

Più avanti vedremo come integrare la configurazione di Postfix con gli altri componenti della nostra catena.

Fetchmail

Se abbiamo saltato la configurazione assistita durante l'installazione, anche qui basta un:

# dpkg-reconfigure fetchmail 

per richiamarla.

Configurazione assistita

  • Sistem-wide?: rispondiamo sì. In questo modo useremo un file di configurazione unico (/etc/fetchmailrc) ed un solo demone fetchmail scaricherà la posta per tutti gli utenti (a noi basta che la scarichi per il nostro utente predefinito).
  • Eseguire fetchmail come root?: Sì.

Ritocchi

Ora dobbiamo personalizzare la configurazione.

Partiamo innanzitutto da /etc/default/fetchmail. L'unica opzione che potremmo decidere di modificare può essere:

OPTIONS="-daemon 300 -syslog" 

Inseriamo al posto del numero predefinito (di solito 300), ogni quanto tempo (in secondi) fetchmail deve controllare la posta. Ad esempio 120 (2 minuti).

fetchmailrc

Configureremo fetchmailrc da soli, ex-novo, ecco un file di configurazione commentato:

# /etc/fetchmailrc 
# Valori di default 
defaults 
    # Protocollo predefinito, IMAP è piuttosto comodo. 
    proto imap 
    # Aggiunge un Received header di debug 
    tracepolls 
    # Nome utente a cui recapitare la posta per default 
    is "nomeutente" here; 
    # Specifica quali errori di Postfix vengono interpretati come errori per Spam 
    antispam 450,501,504,554 
# Definiamo i server dai quali scaricare la posta 
    poll imapmail.email.it 
        user "nomeutente" pass "miapassword"; 
    poll imap.fastwebnet.it 
        user "nomeutente" pass "miapassword"; 
# Questo è un server POP3 invece che IMAP (scelto come predefinito) 
    poll pop.tiscali.it proto pop3 
        user "nomeutente" pass "miapassword";

Test

Ora riavviate fetchmail:

# /etc/init.d/fetchmail restart 

Inviatevi una mail ad una delle controllate dal demone, aspettate che venga scaricata (o forzate lo scaricamento con fetchmail da root), e quindi controllate la posta dell'utente predefinito: tra gli header dovrebbero essercene due che testimoniano il passaggio da fetchmail a postfix sul vostro sistema, ad esempio:

Received: from localhost (nomemacchina [127.0.0.1]) by mailname (Postfix) with ESMTP
    id 4D06E107946 for <nomeutente@localhost>; Thu, 23 Oct 2003 10:38:00 +0200 (CEST)
Received: from relay.fastwebnet.it [213.140.2.32] by localhost with IMAP (fetchmail-6.2.4 polling
    imap.fastwebnet.it account nomeaccount) for nomeutente@localhost (single-drop); Thu, 23 Oct 2003 10:38:00 +0200 (CEST) 

Avvio automatico

A differenza di altri programmi, Debian non prevede che fetchmail venga automaticamente avviato durante il boot del sistema. Fetchmail viene avviato una volta attivato il collegamento ad internet. Per fare questo, durante l'installazione, viene creato uno script /etc/ppp/ip-up.d/fetchmail. Questo script avvia fetchmail, e viene eseguito una volta che PPP ha collegato il PC alla rete. Se non è presente questo script, createlo; il contenuto è:

#!/bin/sh
#
# Default fetchmail ip-up script
#
[ -x /etc/init.d/fetchmail ] || exit 0
/etc/init.d/fetchmail restart >/dev/null 2>&1 || /etc/init.d/fetchmail start

Lo script deve avere i permessi d'esecuzione (chmod +x). Se siete collegati ad Internet tramite ethernet (questo succede ad esempio per alcune ADSL, o per Fastweb), basta copiare, o linkare, lo script come /etc/network/if-up.d/fetchmail.

Procmail

Configuriamo procmail. Per fare questo basta creare/modificare il file .procmailrc nella home directory dell'utente predefinito.

Ecco il solito file di esempio commentato (alcune regole sono prese dall'ottimo Quick & Easy Configuration HOWTO di Mr.Shark, al quale vi rimando per configurazioni più impegnative):

# ~/.procmailrc
SHELL=/bin/sh
# Decommentiamo se vogliamo log prolissi
# VERBOSE=yes
# File di log
LOGFILE=${HOME}/log/procmail.log
# Directory della posta
MAILDIR=${HOME}"/.Maildir"
# Cartella di default. Notare lo slash (/) alla fine che indica a Procmail
# di trattare la cartella in formato Maildir (compatibile con il server IMAP
# che configureremo) e non Mbox !!!
DEFAULT=${MAILDIR}/
YEAR=`date +%Y`
MONTH=`date +%m`
# Alcune regole dal Quick & Easy Configuration HOWTO di Mr.Shark
# Backup su MAILDIR/.ProcScript/.backup.gz di tutte le mail in ingresso
:0c:
|gzip -9fc >> .ProcScript/.backup.gz
# Messaggi doppi (andranno in Messaggi Doppi)
:0Whc:msgid.lock
| formail -D 8192 .ProcScript/msgid.cache
:0a
.Messaggi\ Doppi/
# Posta per root (andrà nella cartella Sistema)
* ^TO_root
.Varie.Sistema/
# Mailing list di Punto-Informatico
:0
*^FROM:.*pilist@deandreis.it
.Punto\ Informatico/
# Lista Agora del LugRoma
* ^X-BeenThere:.*agora@lugroma.org
.Agora/
# Spam di SpamAssassin
:0
* ^X-Spam-Flag: YES
.Spam/
# Aggiungo un header per far vedere che ho processato ...
:0fhw
| formail -A "X-Procmail: Processed on `date +\"%c`"
#Regola di Default (ciò che non soddisfa le regole va nella cartella di Default)
:0
${DEFAULT} 

Da notare come ogni cartella inizi con un punto e termini con uno slash (/). Il punto nasconde la cartella, mentre lo slash imposta il formato maildir, l'unico riconosciuto da Courier-Imap.

SpamAssassin

Ora vedremo come eliminare lo spam! Trovo fantastico SpamAssassin, finora ha sempre riconosciuto distinto le mail di spam da quelle buone (ham) sul mio sistema. Due volte sole ha considerato ham delle mail pubblicitarie di Tiscali, non propriamente spam, ma comunque fastidiose, ma ho provveduto subito ad insegnarli la loro vera natura (man sa-learn). Tra le caratteristiche di SpamAssassin c'è anche quella di controllare dei database online (come Razor o delle blacklist) per decidere se la mail è spam o meno.

Ecco un file di configurazione:

# /etc/spamassassin/local.cf
# Quanti punti negativi deve raggiungere una mail prima di essere considerata spam.
required_hits 5.0
# Cambio l'oggetto dello spam? (vedi sotto)
rewrite_subject 0
# Prefisso da aggiungere se uso rewrite_subject 1
subject_tag *****SPAM*****
# Incapsulo lo spam come allegato (utile se contiene codice HTML pericoloso)
report_safe 1
# Usa il report corto
use_terse_report 0
# Abilito i filtri bayesani
use_bayes 1
# Abilito l'auto-learning per i filtri
auto_learn 1
# Abilito il controllo ai database online
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Lingue nelle quali si riceve posta
ok_languages en it
# Locales nei quali si riceve posta (en vale come Occidentale)
ok_locales en

Esiste anche un tool di configurazione online, dal quale ho attinto per la mia prima configurazione: http://www.yrex.com/spam/spamconfig.php

Abilitiamo la catena in Postfix

Ora dobbiamo permettere a Postfix d'utilizzare SpamAssassin per il check della posta, e quindi Procmail per lo smistamento. Basta aggiungere/modificare questa linea nel file di configurazione:

# /etc/postfix/main.cf
mailbox_command = /usr/bin/spamc | /usr/bin/procmail -a "$SENDER $RECIPIENT $EXTENSION"

Courier-Imap

Ecco l'ultimo passaggio: configurare il server IMAP in modo da poter accedere alla nostra posta (organizzata in cartelle e ripulita dallo spam), in modo uguale da qualunque client (in locale) o PC. Pensate che comodità, potrete cambiare client senza dover riscrivervi tutti i filtri per la posta in entrata o ricreare tutte le cartelle, oppure potrete accedere alla vostra posta da casa d'un amico come da casa vostra!

Courier-Imap permette l'accesso via IMAP ad una directory di posta in formato Maildir. E` per questo che abbiamo dovuto far terminare nel file ~/.procmailrc ogni nome cartella con uno slash (/); in questo modo abbiamo infatti specificato a procmail d'utilizzare questo formato.

Configurazione d'accesso

Dobbiamo configurare innanzitutto l'accesso. Courier-Imap permette l'accesso al server attraverso vari moduli, noi utilizzero un file userdb, il modo più semplice, a patto che si debba consentire l'accesso ad una sola mailbox, come nel nostro caso. La parte che segue è praticamente una traduzione della guida originale del programma, con qualche ritocco qua e la.

Creiamo un file /etc/courier/userdb vuoto (se non esiste già):

# cp /dev/null /etc/courier/userdb 

Lanciamo quindi lo script pw2userdb, che converte il contenuto di /etc/passwd (e di /etc/shadow) nel formato userdb, e prendiamo in considerazione solo le linee riguardanti il nostro utente:

# pw2userdb | grep nomeutente

Dovremmo vedere due linee tipo queste:

utente uid=1000|gid=1000|home=/home/utente|systempw=*
1000= utente

Perfetto. Ora salviamole in /etc/courier/userdb:

# pw2userdb|grep nomeutente > /etc/courier/userdb 

Quindi settiamo i permessi a 700 (userdb deve avere questi permessi):

# chmod 700 /etc/courier/userdb 

Ora creiamo un nome utente in /etc/courier/userdb per il servizio IMAP:

# userdb "nomeutenteimap" set home=/home/utente \ 
mail=/home/utente/.Maildir \ 
uid=UUU gid=GGG 

nomeutenteimap sarà lo username da inserire nelle impostazioni del client di posta, mentre utente è il solito nome dell'utente principale. UUU e GGG vanno cambiati secondo i valori uid e gid che avevamo visto prima tramite pw2userdb (nell'esempio uid=1000 e gid=1000). /home/utente/.Maildir è la cartella principale che abbiamo specificato nella configurazione di Procmail.

Controlliamo che l'utente nomeutenteimap sia stato aggiunto correttamente con:

# cat /etc/courier/userdb 

Quindi creiamo una password per l'utente:

# userdbpw | userdb "nomeutenteimap" set imappw 

Ci verrà chiesta una password e quindi la conferma.

Ora compiliamo il database userdb in binario (questa operazione va fatta ogni volta che si fanno delle modifiche al database in quanto il server legge i binari e non il file di testo semplice userdb):

# makeuserdb 

Ora in /etc/courier/ dovrebbero esser presenti un userdb.dat e un userdbshadow.dat, creati a partire dal file di testo userdb.

AuthdaemonRC

Ringrazio Alex M. per la precisazione.

L'ultima cosa da fare è abilitare l'uso di userdb: aprite il file /etc/courier/authdaemonrc e modificate:

authmodulelist="authpam"

con:

authmodulelist="authuserdb"

Configurazione del demone IMAP

La configurazione di default di Debian va più che bene. Volendo smanettare il file /etc/courier/imapd è commentato in ogni sua parte ed è piuttosto esaustivo, prenderò perciò in considerazione solo qualche opzione da modificare:

  • ADDRESS=0: settato a 0 permette l'accesso da qualunque IP; se si vuole, si può restringere l'accesso, ad esempio solo locale: ADDRESS=127.0.0.1.
  • IMAP_CHECK_ALL_FOLDERS=1: settato ad 1 permette al client IMAP di controllare la posta in tutte le cartelle e non solo in quella principale. Utilissima nel nostro caso, visto che utilizziamo più cartelle (grazie a procmail).

Riavvio del server IMAP

Riavviamo sia il server che il demone di autenticazione:

# /etc/init.d/courier-authdaemon restart # /etc/init.d/courier-imap restart

Prove

Finito! Assicuriamoci che tutti i servizi siano attivi:

# /etc/init.d/postfix restart 
# /etc/init.d/procmail restart 
# /etc/init.d/fetchmail restart 
# /etc/init.d/spamassassin restart 
# /etc/init.d/courier-authdaemon restart 
# /etc/init.d/courier-imap restart 

Configurazione del client

Configurate il vostro programma con le seguenti opzioni:

  • Username: nomeutenteimapscelto
  • Password: passwordscelta
  • Server: localhost
  • Protocollo: IMAP

Test

Provate ad inviare una mail ad ognuno degli indirizzi configurati con fetchmail, facendoli rientrare -magari- in qualche filtro di procmail (se avete usato il file d'esempio, provate a mandare una mail a root@localhost, dovrebbe andare automaticamente nella cartella Sistema). Tra gli header dovreste trovare traccia di ognuno dei programmi costituenti la catena (a parte forse courier-imap, che state però sicuramente usando se vedete la posta).

Conclusioni

Come già scritto nell'introduzione questo HowTo non è perfetto (ci mancherebbe). Sono disponibile ad aggiungere configurazioni od esempi, rendere più chiare alcune parti, modificarle, etc… Vi prego quindi di aiutarmi a migliorarlo contattandomi al mio indirizzo di posta: federico@...ta.org.

Grazie, l'autore.

Back to top