qmail/vpopmail Virtual Mail Hosting System Guide Mike Frysinger Enrico Morelli Team Italiano Questo documento espone dettagliatamente come creare un mail server basato su qmail, vpopmail, courier-imap, mysql e imp di horde. 1.11 24 Aprile 2005 Introduzione

qmail può essere facilmente configurato per la gestione delle mail inviate da demoni di sistema, da singoli server, da domini, o da domini virtuali. Questa guida fornirà un aiuto per configurare qmail per tutti questi scenari focalizzando l'attenzione sull'accesso remoto e le comunicazioni crittate.

Specificamente, i pacchetti che questa guida prenderà in esame sono qmail, courier-imap, vpopmail e horde/imp. Insieme a questi, saranno installati, come dipendenze, i pacchetti daemontools, ucspi-tcp, mysql, apache e mod_php. Attraverso qmail, viene fornito il core delle funzioni mta, con courier-imap si hanno i servizi necessari al recupero delle mail da remoto, attraverso vpopmail si ha la gestione dei domini virtuali, infine, con horde/imp si ha l'accesso via web alle mail.

Prima di emergere tutti i pacchetti, è necessario avere le seguenti variabili USE abilitate: (se alcuni di questi pacchetti sono già stati installati, probabilmente sarà necessario riemergeli) USE="maildir ssl imap mysql". Inoltre, per usare horde/imp occorre abilitare USE="nls" prima di installare mod_php.

Questa guida comprende diversi passaggi. In ogni momento se si pensa che la configurazione sia 'completa', non c'è bisogno di continuare.

Ci sono molti altri pacchetti per avere un sistema di gestione delle mail, per cui questo è il momento di decidere in favore di qmail. Altrimenti si rimanda alla lettura di una bella guida incentrata su Postfix o si può dare un'occhiata a exim.

qmail
# emerge qmail
Questa guida si incentra su qmail-1.03-r13 o superiore, ma potrebbe essere seguita anche per versioni precedenti. In caso si ottenga il messaggio the virtual/mta package conflicts with another package, è necessario rimuovere l'altro MTA presente nel sistema. Per sapere di quale pacchetto si tratta, eseguire emerge qmail -p.

Insieme a qmail vengono installati anche i pacchetti ucspi-tcp e daemontools. Si possono leggere maggiori informazioni su ucspi-tcp e daemontools. Basilarmente, daemontools è responsabile della gestione di qmail come servizio mentre ucspi-tcp è responsabile della gestione delle connessioni TCP in ingresso verso i servizi di qmail.

E' necessario eseguire alcune configurazioni post-installazione.

(Da personalizzare per adattarle alle informzioni personali)
# nano /var/qmail/control/servercert.cnf
# ebuild /var/db/pkg/mail-mta/qmail-1.03-r*/qmail-1.03-r*.ebuild config

Il progetto qmail si focalizza completamente sulla sicurezza. A questo fine, nessuna mail sarà inviata all'utente 'root'. Si rende così necessario selezionare un utente per ricevere le mail che altrimenti sarebbero destinate a 'root'. In questa guida faremo riferimento a tale utente col nome di 'vapier'.

# cd /var/qmail/alias
# echo vapier > .qmail-root
# echo vapier > .qmail-postmaster
# echo vapier > .qmail-mailer-daemon

Avvio dei servizi di consegna di qmail.

# rc-update add svscan default
# /etc/init.d/svscan start
# cd /service
# ln -s /var/qmail/supervise/qmail-send qmail-send

Test per vedere se qmail lavora correttamente.

# ssh vapier@localhost
# maildirmake .maildir
# qmail-inject root << EOF
test root e-mail!
EOF
# qmail-inject postmaster << EOF
test postmaster e-mail!
EOF
# qmail-inject vapier << EOF
test vapier e-mail!
EOF
# mutt 
(Ci dovrebbero essere tre email nella inbox)

A questo punto è pronto un sistema di gestione mail per la macchina locale e per utenti che utilizzano tale macchina nonché per i demoni di sistema che necessitano di inviare mail.

Se non si è ricevuta alcuna mail o se nei file di log sono presenti errori (controllare in /var/log/qmail) che coinvologono 'localhost.localhost', il problema coinvolge la configurazione del dominio/dns. Il comportamento predefinito di qmail è l'utilizzo dell'output di hostname --fqdn. Se il comando restituisce 'localhost' controllare la correttezza di /etc/hostname, /etc/hosts e che il dns funzioni correttamente. Editare i file di configurazione in /var/qmail/control usando gli esempi che seguono.
# hostname --fqdn
wh0rd.org
# cat me
wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
wh0rd.org
# cat rcpthosts
wh0rd.org
# hostname --fqdn
mail.wh0rd.org
# cat me
mail.wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
mail.wh0rd.org
# cat rcpthosts
mail.wh0rd.org
vpopmail
# emerge vpopmail
Questa guida si incentra su vpopmail-5.4.6 o superiore, ma potrebbe essere seguita anche per versioni precedenti.

La configurazione di vpopmail è leggermente più difficile del pacchetto precedente. Dato che l'uso di vpopmail prevede mysql, assicurarsi che il demone di mysql sia attivo, quindi configurare il database di vpopmail. Prima di tutto, assicurarsi di aver emerso e configurato mysql. La password usata per il database vpopmail è 'vpoppw', si raccomanda di sceglierne una differente.

# rc-update add mysql default
Se mysql è stato installato per la prima volta, assicurarsi di eseguire
il comando ebuild <mysql.ebuild> config e seguire le direttive che seguono
prima di far partire il server mysql.

# /etc/init.d/mysql start
# nano /etc/vpopmail.conf 
(Cambiare la password da 'secret' a 'vpoppw')
# mysql -p << EOF
create database vpopmail;
use mysql;
grant select, insert, update, delete, create, drop on vpopmail.* to vpopmail@localhost identified by 'vpoppw';
flush privileges;
EOF
(I passi che seguono non sono necessari, vanno eseguiti per sicurezza)
# chown root:vpopmail /etc/vpopmail.conf
# chmod 640 /etc/vpopmail.conf
# chown root:vpopmail /var/vpopmail/bin/vchkpw
# chmod 4711 /var/vpopmail/bin/vchkpw
Se si ha esperienza di problemi di permessi con mysql/vpopmail, riavviare mysql eseguendo /etc/init.d/mysql restart.

A questo punto vpopmail è pronto all'uso. In questa guida viene provveduto l'hosting virtuale per il dominio 'wh0rd.org', il che significa che sarà necessario configurare vpopmail affinché faccia da host per questo dominio. Sarà anche creato uno user account per 'vapier'.

(Necessario solo se il comando vadddomain visualizza "command not found")
# source /etc/profile
  	 
 (Durante il debug di vpopmail, si potrebbero consultare i log)
# mysql -u vpopmail -p
mysql> select * from vpopmail.vlog;
# vadddomain wh0rd.org postpass
(Verifica se il dominio è configurato correttamente)
# printf "postmaster@wh0rd.org\0postpass\0blah\0" | vchkpw `which id` 3<&0
uid=89(vpopmail) gid=89(vpopmail) groups=0(root)
(Se il risultato non simile al precedente, i permessi non sono corretti)
# vadduser vapier@wh0rd.org vappw

Ogni dominio creato con vpopmail possiede anche un account 'postmaster'. Nel caso specifico è stato specificato che la password per il postmaster è 'postpass'. Prima che vpopmail possa funzionare correttamente, è necessario riuscire a ricevere mail via courier e inviare mail via qmail e SMTP.

Courier POP/IMAP
# emerge net-mail/courier-imap
Eseguire emerge courier-imap dopo vpopmail. In questo modo verrà compilato anche il modulo authvchkpw. Questa guida si incentra su net-mail/courier-imap-2.1.2-r1 o successivi, ma potrebbe essere seguita anche per versioni precedenti.

Seguono i passi per la configurazione post-installazione. Questi sono necessari solo se si vuole una comunicazione crittata via SSL. Altrimenti si deve rimuovere '-ssl' dagli init script degli esempi che seguono.

 # nano /etc/courier/authlib/authdaemonrc
(Impostare la variabile authmodulelist  affinché contenga "authvchkpw")
# cd /etc/courier-imap
# nano pop3d.cnf 
(Editare la sezione [ req_dn ])
# mkpop3dcert
# rc-update add courier-pop3d-ssl default
# /etc/init.d/courier-pop3d-ssl start
# cd /etc/courier-imap
# nano imapd.cnf 
(Editare la sezione [ req_dn ])
# mkimapdcert
# rc-update add courier-imapd-ssl default
# /etc/init.d/courier-imapd-ssl start

A questo punto un mail client dovrebbe essere in grado di effettuare un login sull'host in cui è in esecuzione courier e recuperare le mail per l'host virtuale. Nel caso preso in esame, si dovrebbe essere in grado di effettuare un login usando lo username 'vapier@wh0rd.org' e password 'vappw'.

qmail

Segue la messa in funzione dell'SMTP prevenendo la creazione di un sistema di cui abusare per fare spamming.

# cd /var/qmail/control/
# nano conf-smtpd
(Scommentare la variabile SMTP-AUTH e impostare QMAIL_SMTP_CHECKPASSWORD in /var/vpopmail/bin/vchkpw)
# nano servercert.cnf 
(Editare la sezione [ req_dn ])
# mkservercert
# cd /service
# ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
# /etc/init.d/svscan restart

Assumendo che non siano stati modificati i file di controllo di qmail, qmail accetterà mail per il dominio virtuale wh0rd.org e per gli utenti della macchina locale. Inoltre, qmail invierà mail per chiunque le spedisca via 127.0.0.1 e per chiunque sia capace di autenticarsi via vpopmail. Durante la configurazione di un mail client per l'invio della posta, assicurarsi di selezionare l'opzione 'Server requires authentication'. Nel caso preso in esempio, verrà usato l'utente 'vapier@wh0rd.org' con password 'vappw'. Infine, assicurarsi di configurare il mail client per usare SSL/TLS per le connessioni SMTP. qmail non permetterà autenticazioni se la sessione non è crittata.

Horde / IMP Webmail Client

Benché ci siano molti webmail client, si preferisce IMP Webmail Client che è parte dell'Horde framework. La ragione principale risiede nel fatto che si può usare Horde semplicemente per gestire le mail via Web, o aggiungere facilmente altri componenti per gestire Rubriche, Calendari, Appuntamenti, ecc. Se questo non è convincente, si possono leggere ulteriori caratteristiche da Horde.

Emergere IMP.

# emerge horde-imp
Questa guida si incentra su horde-2.2.x e horde-imp-3.2.x. Le versioni del CVS (ed anche le prossime major release) avranno probabilmente configurazioni differenti. Da notare anche che horde-2.x non funziona con php-5.x.

Attualmente, Horde non è facile da configurare a meno che non si conosca esattamente cosa fare. Fortunatamente l'autore di questa guida conosce esattamente cosa fare e questo potrà essere di aiuto per il lettore.

# cd /var/www/localhost/htdocs/horde/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano horde.php
(In 'Horde Authentication':)
$conf['auth']['driver'] = 'imap';
$conf['auth']['params']['dsn'] = '{localhost:993/imap/ssl/novalidate-cert}';

(In 'Horde Logging':)
$conf['log']['name'] = '/var/log/apache2/horde.log';

(In 'Problem Reporting':)
$conf['problems']['enabled'] = true;
$conf['problems']['email'] = 'webmaster@wh0rd.org';

# nano registry.php
(In 'Handlers':)
$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';

(In 'Application registry':)
Porre l'elemento 'status' di applications['imp'] da 'inactive' a 'active'

# touch /var/log/apache2/horde.log
# chown apache:apache /var/log/apache2/horde.log
Si vorrà anche cambiare l'email per l'account 'webmaster'. Se si vuole usare questo indirizzo, ricordarsi di aggiungere l'utente via vpopmail (o vedere sotto per qmailadmin).

Configurazione di IMP.

# cd /var/www/localhost/htdocs/horde/imp/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano servers.php

(Editare l'array $servers['imap']:)
$servers['imap'] = array(
	'name' => 'wh0rd.org',
	'server' => 'localhost',
	'protocol' => 'imap/ssl/novalidate-cert',
	'port' => 993,
	'folders' => '',
	'namespace' => '',
        'namespace' => 'INBOX.',
	'maildomain' => 'wh0rd.org',
	'smtphost' => 'localhost',
	'realm' => '',
	'preferred' => ''
);

Al termine, far partire apache in modo da poter usare webmail.

# nano /etc/conf.d/apache2 
(Scommentare APACHE2_OPTS="-D SSL -D PHP4")
# rc-update add apache2 default
# /etc/init.d/apache2 start
Si dovrebbe forzare la connessione https per utenti di horde. Questo è un punto importante a motivo della sicurezza.

Per testare la configurazione di IMP, lanciare il browser e visitare http://localhost/horde/ (cambiare localhost con il server su cui si è configurato IMP). Si dovrebbe essere in grado di vedere la pagina di benvenuto di Horde con la richiesta di login. Sempre seguendo il nostro esempio, si dovrebbe eseguire il login con 'vapier@wh0rd.org' e 'vappw' come username e password.

La configurazione di Horge e IMP è terminata. Si dovrebbe, comunque, tornare indietro attraverso le directory di configurazione e cambiare quello che si ritiene opportuno.

Pacchetti extra
qmailadmin

Un primo pacchetto che si suggerisce di usare è qmailadmin. E' un interfaccia basata su web per la gestione di domini virtuali. Si installa con emerge net-mail/qmailadmin e si usa semplicemente attraverso un browser attraverso l'indirizzo http://localhost/cgi-bin/qmailadmin.

qmHandle

Se si hanno problemi con la queue di qmail e si perde tempo per il debugging, si può dare un'occhiata a qmHandle. E' un semplice programma in perl per vedere e gestire le code dei messaggi di qmail. Anche in questo caso per l'installazione usare emerge net-mail/qmhandle.

Aggiunte a horde

Si raccomanda uno sguardo alle altre applicazioni Horde. Le applicazioni complementari Turba, Kronolith, e Nag migliorano l'uso di IMP. La loro configurazione è simile a quella per IMP, non si dovrebbero quindi trovare eccessivi problemi. Ricordarsi di editare registry.php nella direcotory config di horde per inserire la nuova applicazione.

ucspi-tcp

qmail utilizza ucspi-tcp per gestire le connessioni in ingresso. Se si desidera personalizzare le regole dei filtri, i file di configurazione sono in /etc/tcprules.d/ (vecchie versioni di qmail pongono i file in /etc). Qui si trovano due file per ogni servizio, il file di configurazione (p.e. tcp.qmail-smtp) e la versione compilata di questo file usato da ucspi-tcp (p.e. tcp.qmail-smtp.cdb). Ogni volta si aggiorna il file di configurazione, si dovrà anche provvedere alla ricompilazione della versione binaria eseguendo tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp. Ogni volta che viene creata una connessione da qmail, il file di regole compilate viene riletto, non è quindi necessario far ripartire il servizio.

qmail-scanner

Se si vuole filtrare il contenuto delle mail che passano per il mail server (contro spam e virus), si deve usare un programma di queuing differente da quello predefinito. Un buon programma per far questo è qmail-scanner. Installare con emerge qmail-scanner e editare il file /etc/tcprules.d/tcp.qmail-smtp.

Il processo di installazione di qmail-scanner prevede la ricerca nel sistema dei pacchetti da usare che devono essere già presenti. E' necessario quindi provvedere ad emergere SpamAssassin e/o Clam AntiVirus prima di emergere qmail-scanner.
# cd /etc/tcprules.d/
# nano tcp.qmail-smtp
(Aggiungere QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"  alla regola allow )
# tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp

La prossima sezione prende in esame come configurare un filtro contro spam e virus. Si possono personalizzare alcune opzioni editando direttamente /var/qmail/bin/qmail-scanner-queue.pl.

SpamAssassin

Uno dei filtri antispam Open Source è SpamAssassin. Installare con emerge mail-filter/spamassassin. Il pacchetto ha sia una versione da linea di comando che una client/server. Per server che smistano una piccola quantità di mail, si può utilizzare la versione da linea di comando, mentre per server che gestiscono carichi abbondanti di mail è bene usare la versione client/server.

# nano /etc/mail/spamassassin/local.cf
(Aggiungere queste opzioni minime:)
required_hits 6
skip_rbl_checks 1

# rc-update add spamd default
# /etc/init.d/spamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Assicurarsi che la variabile $spamc_binary sia definita come '/usr/bin/spamc'.)
(Se fosse definita come '', guardare la nota che segue.)
Se non si aveva SpamAssassin nel sistema prima di emergere qmail-scanner, sarà necessario riemergere qmail-scanner. In questo modo verranno aggiunti i pacchetti aggiuntivi scoperti nel sistema.

A questo punto, le mail in ingresso dovrebbero essere inviate a qmail-scanner che eseguirà SpamAssassin.

Clam AntiVirus

Come SpamAssassin, Clam AntiVirus arriva in due versioni. Si daranno indicazioni su come configurare la versione client/server. Installare con emerge app-antivirus/clamav.

# nano /etc/conf.d/clamd 
(Definire START_CLAMD=yes)
# nano /etc/clamav.conf
(Definire cosa si vuole)
# rc-update add clamd default
# /etc/init.d/clamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Assicurarsi che la variabile $clamscan_binary sia definita come '/usr/bin/clamscan'.)
(Se fosse deinita come '', guardare la nota che segue.)
# nano /var/qmail/control/conf-common
(Se ClamAV riporta problemi di memoria provare a cancellare il softlimit)
Se non si aveva Clam AntiVirus nel sistema prima di emergere qmail-scanner, sarà necessario riemergere qmail-scanner. In questo modo verranno aggiunti i pacchetti aggiuntivi scoperti nel sistema.

A questo punto, le mail in ingresso dovrebero essere inviate a qmail-scanner che eseguirà Clam AntiVirus.

Note finali

Non ci sono note finali eccetto che se si hanno problemi seguendo questa guida si dovrebbe contattare l' autore o inviare una segnalazione sul Gentoo's Bugtracking Website. Se si hanno esperienze interessanti da aggiungere a questa guida, inviarle all'autore per essere incluse.