
Server e-mail dalla A alla Z
Basta poco per creare e gestire uno o più domini di posta elettronica garantendo allo stesso tempo sicurezza e privacy degli utenti che utilizzano il servizio. Ecco come
(pagina 1 di 2)
Uno dei servizi
più utilizzati
su
Internet è la
posta elettronica, e
non solo da parte dei
singoli utenti. Oramai,
anche all’interno delle
aziende è diventata importante quasi quanto il telefono e rappresenta
un servizio essenziale dell’intero sistema produttivo per quanto concerne
la comunicazione. Generalmente, questo tipo di servizio viene
offerto dai provider Internet, i cosiddetti ISP (Internet Services Provider)
o da altre organizzazioni dedicate. In realtà, nessuno ci obbliga ad
appoggiarci a strutture esterne e con un po’ di lavoro e un investimento
praticamente nullo è possibile creare e gestire in proprio un servizio di
posta sicuro, efficiente e facile da gestire.
Quando il “fai da te” conviene
Le ragioni che spingono una organizzazione a creare da zero un servizio
di posta sono molteplici e dipendono da esigenze “specifiche”.
Nonostante ciò, è possibile individuare i fattori più importanti riassumendoli
in questo breve elenco:
- Posta nella Intranet - se gran parte della corrispondenza viene
veicolata in account utilizzati solo all’interno della rete locale, è
inutile sprecare banda per inviarla e riceverla su server esterni;
- Garanzia della privacy - su server gestiti da terzi, nessuno
può veramente garantire la riservatezza
della nostra posta. Se la privacy è
una necessità, la soluzione più semplice
e disporre di un proprio server;
- Servizi aggiuntivi - con un server
gestito in proprio abbiamo la libertà di
cambiare il software in ogni momento
per cercare sempre la soluzione migliore,
magari in grado di fornire anche servizi
aggiuntivi come antispam e webmail;
- Vendita del servizio - gli strumenti utilizzati, in particolare in
questo caso specifico, ci consentono di configurare un sistema di
gestone delle e-mail professionale, per cui aprono la possibilità di
dedicarci alla fornitura del servizio di posta anche a terzi.
Componenti del sistema
Fatte le dovute premesse, è chiaro che il nostro obiettivo è realizzare
un server per la gestione di più domini di posta elettronica. In particolare,
il sistema sarà composto dalle seguenti applicazioni perfettamente
in grado di interfacciarsi tra loro:
- Postfix – questo componente, detto MTA (Mail Transfer Agent)
ha il ruolo di ricevere la posta destinata ai domini gestiti dal sistema
e depositarla nelle mailbox (caselle di posta) degli utenti;
- Dovecot – questo è il server incaricato di fornire agli utenti i servizi
POP3 e IMAP per la ricezione della posta;
- Postfix Admin – si tratta di un’applicazione PHP che si appoggia
a MySQL o PostgreSQL e permette di gestire il sistema di posta
tramite interfaccia web. Il database utilizzato contiene le informazioni
necessarie a Postfix e Dovecot per svolgere le funzioni di
invio e lettura delle e-mail (http://postfixadmin.sourceforge.net).
Oltre a questi elementi, è necessario che sul sistema siano installati e attivi
un server web, tipicamente Apache, e uno dei due database server supportati,
in genere MySQL. Questa, in genere, è la configurazione più diffusa.
Il database prima di tutto
Il software usato per la gestione dell’intero sistema influenza la configurazione
dei servizi di posta in uscita ed entrata. Nel nostro caso abbiamo
scelto di usare Postfix Admin. Consigliamo vivamente di usare l’ultima
release candidate, in quanto è molto più stabile
della ormai obsoleta versione 2.1.x.
Dopo aver decompresso l’archivio, la prima operazione da svolgere è installare
il database. In particolare, sono necessari due utenti, uno dedicato
alla gestione, quindi l’amministratore, e l’altro con solo i privilegi in
lettura per Postfix e Dovecot. Gli utenti da creare sono rispettivamente
“postfixadmin” e “postfix”. La creazione può essere eseguita dalla console
di MySQL:
CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘pass1’;
CREATE USER ‘postfixadmin’@’localhost’ IDENTIFIED
BY ‘pass2’;
Dopo gli utenti, possiamo creare l’intero database utilizzando lo script fornito
nel pacchetto di Postfix Admin:
mysql -u root -p < DATABASE_MYSQL.TXT
A questo punto, il database è pronto per ospitare le definizioni dei domini e
degli utenti di posta, ma l’applicazione di gestione necessita ancora di alcune
modifiche prima di essere messa in produzione.
Postfix Admin in produzione
Prima di procedere con la configurazione, copiamo tutti i file di Postfix Admin
in una directory accessibile ad Apache o nella sua Document Root:
cp -r postfixadmin-2.2.0-RC1 /var/www/postfixadmin
Se l’obiettivo è installare Postfix Admin in un virtualhost e/o cambiare il
nome del percorso di accesso bisogna sostituire quello di destinazione con
uno a nostra scelta, comunque presente nella Document Root del sito. A
questo punto, nella directory di destinazione troveremo il file “config.inc.
php” nel quale dobbiamo impostare le seguenti direttive:
CONF[‘postfix_admin_url’] = ‘http://miohost.
miodominio.it/postfixadmin/’;
CONF[‘database_password’] = ‘pass2’;
CONF[‘default_language’] = ‘it’;
CONF[‘admin_email’] = ‘postmaster@miodominio.it’;
CONF[‘emailcheck_resolve_domain’]=’NO’;
Questo primo blocco di direttive definisce l’URL (l’indirizzo) dal quale possiamo
collegarci all’interfaccia di Postfix Admin, la password per l’accesso
al database e un’e-mail che verrà posta sul sito per permettere agli utenti di
contattare l’amministratore. L’ultima riga è obbligatoria in quanto l’attuale
versione del software soffre di un bug che impedisce la corretta creazione
degli account di amministrazione.
CONF[‘domain_path’] = ‘YES’;
CONF[‘quota’] = ‘YES’;
Queste direttive sono importanti per l’archiviazione (storage) della posta. La
prima riga permette di memorizzare i messaggi in cartelle differenziate per
domini, mentre la seconda abilita la possibilità di limitare lo spazio occupato
su disco per ognuna delle mailbox degli utenti (quote). L’ultima direttiva
riguarda gli alias di default, aggiunti automaticamente alla creazione di un
nuovo dominio, contenuti nella voce “$CONF[‘default_aliases’]”. Gli indirizzi
abuse, postmaser, webmaster e postmaster sono obbligatori per
segnalare eventuali problemi amministrativi e di abusi perpetuati da utenti
del dominio in oggetto. La direttiva permette di impostare gli indirizzi di
default in attesa che essi vengano assegnati a persone responsabili per il dominio.
L’area dove salvare la posta
Prima di installare Postfix e Dovecot, dobbiamo ancora creare un utente non
privilegiato ed un’area di storage su disco dove immagazzinare la posta.
Possiamo eseguire entrambe queste operazioni con un unico comando:
adduser --system --group --home /var/spool/
virtualmail virtualmail
A questo punto, annotiamo gli ID numerici dell’utente (UID) e del gruppo
(GID) appena creati, in quanto serviranno nelle fasi successive. Nel seguito
dell’articolo ipotizzeremo che l’UID e il GID siano pari a 510. Per quanto
concerne la directory in cui verrà memorizzata la posta, assicuriamoci sempre
che vi sia uno spazio adeguato al volume di mail che vogliamo gestire.
Adesso passiamo a Dovecot
L’installazione di Dovecot è semplice. Tutte le distribuzioni dispongono dei
pacchetti precompilati, in caso contrario possiamo copiare i sorgenti (dovecot-
1.0.10.tar.gz), scompattarli con tar -xzf dovecot-
1.0.10.tar.gz, entrare nella nuova directory con cd dovecot-1.0.10, ed eseguire
il comando seguente: “./configure && make && make install”. La
configurazione di Dovecot va effettuata intervenendo sul file “/etc/dovecot/
dovecot.conf”, al quale dobbiamo apportare le seguenti modifiche:
protocols = imap imaps pop3 pop3s
mail_location = maildir:/var/spool/virtualmail/%h
Queste righe permettono di attivare i protocolli IMAP e POP3, sia in chiaro
che via SSL. La seconda riga indica dove Dovecot dovrà cercare la posta degli
utenti (nel nostro caso l’area di storage creata in precedenza). Per quanto
concerne l’integrazione con il database di Postfix Admin, dobbiamo assicurarci
di attivare l’autenticazione su server SQL, nel nostro caso MySQL:
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
}
Fatto ciò non rimane altro che creare il file “/etc/dovecot/dovecot-sql.conf”nel modo seguente:
driver = mysql
connect = host=localhost dbname=postfix user=
postfix password=pass1
default_pass_scheme = MD5
password_query = SELECT username as user,
password FROM mailbox
WHERE username = ‘%u’
user_query = SELECT maildir as home, 510 AS uid,
510 AS gid FROM
mailbox WHERE username = ‘%u’
Avviando Dovecot (/etc/init.d/dovecot start) il sistema è pronto per accogliere le richieste degli utenti, la cui mailbox è stata creata con Postfix Admin.
Interfaccia diversa
Modificare l’aspetto di Postfix Admin
Se l’aspetto dell’interfaccia di gestione non ci soddisfa, è
sempre possibile modificarla per integrarla perfettamente
con il nostro sito web. Per farlo bisogna intervenire su un
unico file CSS, per l’esattezza si tratta di stylesheet.css.
Amministratori e domini di posta
Per configurarli basta collegarsi all’interfaccia web di Postfix Admin
Aggiungiammo il superadmin
Configurato Postfix Admin dobbiamo creare il primo
superadmin nella pagina di setup all’indirizzo “http://
hostname/postfixadmin/setup.php”. A questo punto, dopo aver
creato l’amministratore dobbiamo eliminare il file “setup.php” ed
effettuare il login nella pagina principale.
Creazione dei domini
La creazione di un nuovo dominio avviene selezionando
“Lista dei domini/Nuovo Dominio”. A questo punto, bisogna
inserire nel form il nome di un dominio valido, una descrizione
e le quote sul numero di caselle di posta, un alias e lo spazio complessivo
su disco. Il valore 0 in questi campi equivale a infinito.
Nuovi amministartori
Selezioniamo “Lista degli amministratori/Nuovo
Amministratore”. Nel nuovo modulo inseriamo l’e-mail,
una password e i domini che l’amministratore può gestire. Questo
permette di lasciare gestire al cliente la creazione delle mailbox e
l’amministrazione degli alias solo per i domini in suo possesso.
Panoramica generale
Cliccando su “Lista degli amministratori” otteniamo la
lista degli amministratori dalla quale è possibile procedere
alla loro eliminazione o modifica. Questo permette di modificare i domini gestiti e da la possibilità di promuovere un admin in
superadmin, operazione non attuabile nella fase di creazione.
Un modo più semplice
Postfix con le quote da pacchetti DEB e RPM
Se compilare Postfix dovesse risultare troppo complicato,
possiamo sempre utilizzare come base i pacchetti sorgenti per la
nostra distribuzione. Per quelli in formato DEB possiamo seguire
questa guida “www.besy.co.uk/doku.php/debian:postfix_quota”,
mentre per gli RPM bisogna attenersi alle informazioni presenti
sul seguente forum: www.netadmintools.com/art492.html.
Per finire installiamo postfix
L’installazione di Postfix prevede prima l’applicazione di una patch ai
sorgenti, indispensabile se vogliamo disporre del supporto per le quote. I
sorgenti e la patch sono dei file
postfix-2.4.6.tar.gz e postfix-2.4.6-vda-ng.patch.gz. In realtà nella stessa
directory è presente anche il pacchetto relativo all’ultima versione del server,
Postfix 2.5.0, ma la patch non è ancora disponibile, per cui bisogna utilizzare
una release precedente. Di seguito la procedura per applicare la patch e installare
Postfix dopo aver posizionato i file nella stessa cartella:
tar -xzf postfix-2.4.6.tar.gz
cd postfix-2.4.6
zcat ../postfix-2.4.6-vda-ng.patch.gz | patch -p1
make makefiles -DHAS_MYSQL -I/usr/include/mysql
Ovviamente se volete fare a meno delle quote, i pacchetti precompilati dispongono già di tutto il necessario per creare e gestire il servizio di posta.
Configurazione generale di postfix
La prima modifica necessaria è l’eliminazione del chroot di esecuzione nel
quale Postfix è abitualmente “confinato” durante il suo funzionamento. Questo
componente aumenta la sicurezza del server, ma anche se eliminarlo può sembrare
una scelta negativa, il sistema non corre rischi in quanto Postfix è comunque
molto sicuro. Per “liberare” Postfix dalla sua “gabbia” dobbiamo modificare
la riga relativa a “smtp” presente nel file “/etc/postfix/master.cf” settandola
nel seguente modo: smtp inet n - n - - smtpd. Ovviamente, possiamo anche
lasciare il chroot, ma al costo di complicare troppo la configurazione degli altri
componenti che costituiscono il sistema di posta, e questo non è sicuramente il
nostro obiettivo. Per quanto riguarda il resto della configurazione, il file “/etc/postfix/main.cf” è costituito da una prima parte “generica” così composta:
myhostname = miohost.miodominio.it
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = miohost.miodominio.it, localhost
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a “$EXTENSION”
Queste opzioni permettono al servizio di capire come comportarsi alla richiesta
di invio di una e-mail da parte di uno dei domini e capire di chi si
tratta. In particolare, il servizio accetterà solo messaggi per i domini di sua
competenza o creati da un eventuale servizio di webmail installato sul server.
L’interfacciamento a Postfix Admin, invece, avviene nel seguente blocco:
virtual_alias_maps = proxy:mysql:/etc/postfix/
sql/alias.cf
virtual_mailbox_domains = proxy:mysql:/etc/
postfix/sql/domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/
sql/mailbox.cf
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps = mysql:/etc/postfix
/sql/quota.cf
virtual_mailbox_limit_override = yes
virtual_create_maildirsize = yes
virtual_uid_maps=static:510
virtual_gid_maps=static:510
virtual_mailbox_base=/var/spool/virtualmail/
In queste righe sono contenute tutte le informazioni necessarie su come determinare se un utente è presente nel sistema, dove depositare la posta e l’ammontare di spazio su disco concesso.
Ricerca dei dati all’interno del database
Nella configurazione generale non sono presenti le query da eseguire sul
database, le quali sono inserite in file esterni composti da un blocco iniziale
sempre uguale che riporta le informazioni generiche di accesso al database
secondo la configurazione seguente:
user = postfix
password = pass1
hosts = localhost
dbname = postfix
Subito dopo, è presente una riga di query che varia a seconda delle informazioni da ottenere dal database. Per quanto riguarda il file “alias.cf” è:
query = SELECT goto FROM alias WHERE address=’%s’
AND active = ‘1’
Nel caso del file “domains.cf” la richiesta diventa questa:
query = SELECT domain FROM domain WHERE domain=’%u’
E ancora, per quanto riguarda “mailbox.cf” avremo: