_Questa è la prima parte della guida, e tratta delle impostazioni di base di Postfix. Nella [seconda parte](/postfix-nirvana-parte-ii) verranno affrontati i programmi accessori._
Questo documento, scritto a quattro mani con Manuel, spiega come configurare un server di posta in modo da avere nel proprio sistema utenti, sia reali sia virtuali, che possono accedere tramite interfaccia web alle loro caselle e-mail, con protezione da virus, worm e spam.
Per utente virtuale si intende qualcuno che non ha un account fisico sulla macchina (non c’è alcun suo riferimento nel file /etc/passwd) ed esiste solo per il sistema di posta. La gestione di questi utente avviene tramite interfaccia web e i loro dati sono registrati su un database SQL.
la cui configurazione va però oltre gli scopi di questo howto. Tutti questi software sono stati installati partendo dai pacchetti offerti dalla distribuzione Debian Etch. Le principali fonti di ispirazione sono stati un howto precedentemente scritto da Manuel, [Howtoforge](http://www.howtoforge.com/virtual_postfix_mysql_quota_courier "Howtoforge"), i wiki di [Dovecot](https://doc.dovecot.org/ "Dovecot"), [Horde](https://wiki.horde.org/Wiki/Home?referrer=WikiHome "Horde"), [Debian](http://wiki.debian.org/Horde "Debian") e [Debian Administration](https://web.archive.org/web/20090228161415/https://debian-administration.org/articles/259 "Debian Administration").
Prima di procedere all'installazione di Postfix occorre assicurarsi che la propria macchina sia FQDN, cioè abbia un nome corretto (per intenderci, al comando hostname deve rispondere qualsiasi cosa che non sia localhost o localhost.localdomain). Per questo occorre impostare il nome macchina e settare il file `/etc/hosts` correttamente.
I principali file di configurazione sono due: `main.cf` in cui stanno tutti i parametri della parte MTA e `master.cf` in cui stanno i parametri del demone, ed entrambi si trovano in `/etc/postfix`.
Il `main.cf` ha moltissime opzioni (potete trovare [qui](https://www.postfix.org/postconf.5.html) un elenco completo); vediamo le più importanti (che vanno modificate rispetto al default):
Nel file `aliases` ci sono i riferimenti ai vari utenti e serve per decidere chi è il destinatario delle mail: va modificato specificando a chi va recapitata la posta di root, solitamente l'utente di 'manutenzione' che utilizzate nel vostro sistema (non usate root per queste cose, vero?). Ad ogni modifica del file aliases deve seguire il comando:
per aggiornare il database aliases, che viene scritto nel file `aliases.db`.
Attenzione perché può esistere anche un file `/etc/aliases`: è quello che utilizza sendmail, e per il nostro sistema di posta non serve (ogni modifica a quel file risulta ininfluente).
Il `sender_canonical` invece serve per tradurre gli account degli utenti locali in indirizzi di posta elettronica. Una volta modificato occorre dare:
La configurazione che ho effettuato fino ad ora è sufficiente per un valido, robusto e sicuro sistema di posta. Purtroppo però si sente sempre più l'esigenza di proteggere da virus e spam gli utenti: in prima battuta non ci si pensa, ma se un nostro cliente ha un virus che invia mail a raffica la cosa si ripercuote anche su di noi, sovraccaricando il nostro MTA e rischiando di farlo finire in qualche black-list da cui è poi difficile uscire...
Sia Spamassassin che ClamAV devono essere costantemente aggiornati per essere efficaci, cosa che non è sempre garantita con i repository di Debian. Per questa ragione è consigliabile scaricarli dai repository di volatile, aggiungendo a `/etc/apt/sources.list` la riga:
Passo quindi alla configurazione. È necessario abilitare ClamAV e Spamassassin in `/etc/amavis/conf.d/15-content_filter_mode`, che dovrà avere questo aspetto:
nel file `/etc/amavis/conf.d/50-user`. Normalmente le impostazioni di default contenute in `/etc/amavis/conf.d/20-debian_defaults` non devono essere modificate. Riavvio i demoni con:
e posso proseguire nella configurazione di Postfix. Per fare in modo che le mail vengano inoltrate al demone di amavisd-new aggiungo le seguenti righe a `/etc/postfix/main.cf`:
Faccio ripartire postfix e con "`netstat -tap`" vedo Postfix (master) in ascolto sulle porte 25 (smtp) e 10025 e amavisd-new sulla porta 10024. Dopo aver spedito o ricevuto alcune e-mail posso verificare il funzionamento di tutto nei log.
ClamAV non ha solitamente bisogno di alcuna impostazione particolare. Il demone _freshclam_ provvederà a tenere sempre aggiornato il database dei virus. Debian durante l'installazione crea già gli utenti e i gruppi necessari. Sarà sufficiente aggiungere l'utente _clamav_ al gruppo _amavis_ e riavviare i demoni con i comandi:
Spamassassin è un software scritto in Perl in grado di identificare e bloccare la posta indesiderata (chiamata spam, UCE - unsollicited commercial e-mail oppure anche UBE - unsollicited bulk e-mail) con una buona accuratezza tramite una serie di test euristici sugli headers e sul corpo della mail.
Come impostazioni di base, è richiesto a Spamassassin di raggiungere un punteggio pari a 6.3 per identificare la mail come spam; io ho abbassato la soglia fino a 5 impostando in `/etc/spamassassin/local.cf`:
e fino ad ora non mi è mai capitato che abbia bloccato una mail che non fosse spam, ed ha lasciato passare alcune e-mail che invece lo erano. Ovviamente non si può garantire un’ accuratezza del 100% perché si rischierebbe di stringere troppo i controlli ed avere troppi falsi positivi.
A questo punto per Debian modifico il file /etc/default/spamassassin con:
Una delle caratteristiche più utili di Spamassassin sono i filtri "bayesiani" che filtrano le mail sulla base di sequenze di caratteri che compaiono spesso nello spam, e che vengono abilitati in `/etc/spamassassin/local.cf` dalle righe:
la seconda riga dice dove si trova il database, l'indirizzo è quello della configurazione standard di Debian, e l'ultima attiva l'autoapprendimento, che inizierà al riavvio Spamassassin. Per fargli apprendere più velocemente è possibile dargli in pasto delle directory contenenti spam o mail "pulite", loggandosi come utente amavis e dando i comandi:
È anche possibile aggiungere a Spamassassin moduli come Razor2, Pyzor, DCC, ma questo va un poco oltre lo scopo di questo howto, quindi vi rimando alla [documentazione specifica](http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04-p3 "HowtoForge").
I filtri tipo greylist sono uno dei recenti metodi di lotta allo SPAM, e si basano sul fatto che la maggior parte degli spammer inviano i messaggi attraverso server che non gestiscono una coda per la ritrasmissione dei messaggi falliti. Quando una mail viene ricevuta per la prima volta viene registrata la tripletta server/mittente/destinatario e viene respinta con un messaggio 450 di errore temporaneo. I server di cui sopra non riproveranno, mentre un server regolare dovrebbe riprovare l'invio dopo qualche minuto, quando il nostro server, dopo aver verificato la tripletta, lo accetterà. Questo provoca un ritardo nella ricezione di tutte le e-mail, ma evita la ricezione di gran parte dello spam.
Postfix prevede la possibilità di effettuare un certo numero di test sulle mail in transito: è possibile controllare gli headers e il corpo del messaggio, mittenti e i destinatari, parti mime ed allegati. Lo svantaggio è che tutto questo causa un forte appesantimento del sistema di posta, e l'accuratezza non è molto elevata (c'è il rischio di avere molti falsi positivi e falsi negativi).
Vediamo più da vicino queste mappe (e come si compilano): alcune sono di tipo _hash_ ed altre di tipo _pcre_ (o regexp). Per quelle di tipo hash occorre dare il comando postmap prima di riavviare postfix per aggiornare il database, mentre per le altre basta solamente riavviare il demone postfix.
Tra pattern, azione e motivazione ci deve essere almeno uno spazio; per questioni di chiarezza visiva mi piace impaginare il file utilizzando vari [tab] in maniera da avere tutto incolonnato.
**/etc/postfix/mime\_header\_checks (pcre o regexp)**
è una tavola specifica per le estensioni mime, che possono sfuggire ai controlli sul body e sugli headers; la sintassi è del tutto simile ai due file precedenti.
Come detto, serve specificamente per intercettare mittenti o destinatari indesiderati.
La sintassi prevede 3 categorie su cui effettuare i confronti: un utente ben determinato, un certo utente di qualsiasi dominio o tutti gli utenti di un certo dominio.
Il file access e’ anche importante per effettuare delle whitelist sugli indirizzi da accettare, anche se provengono da utenti, domini o indirizzi IP elencati in qualche black-list.
In particolare dobbiamo, nel rispetto delle RFC, accettare qualsiasi cosa indirizzato alla casella postmaster ed eventualmente alla abuse.