Postfix + Courier + Mysql HowTo
Autori: | Stefano “bacillo” Morandi <s.morandi (at) iast (dot) it>, Iacopo Spalletti <i.spalletti (at) ias (dot) it> |
---|---|
Copyright: | Copyright © 2000-2002 Morandi Stefano, Iacopo Spalletti |
Licenza: | GPL |
1 Legalese
Copyright © 2000-2002 Morandi Stefano, Iacopo Spalletti.
Postfix + Courier + Mysql HowTo
Autori: | Stefano “bacillo” Morandi <s.morandi (at) iast (dot) it>, Iacopo Spalletti <i.spalletti (at) ias (dot) it> |
---|---|
Copyright: | Copyright © 2000-2002 Morandi Stefano, Iacopo Spalletti |
Licenza: | GPL |
1 Legalese
Copyright © 2000-2002 Morandi Stefano, Iacopo Spalletti.
Le informazioni contenute in questo howto possono essere diffuse e riutilizzate in base alle condizioni poste dalla licenza GNU General Public License, come pubblicato dalla Free Software Foundation.
Potete trovare il testo originale della GPL al seguente indirizzo: http://www.gnu.org/copyleft/gpl.html
Una traduzione NON ufficiale qui: https://www.softwarelibero.it/gnudoc/gpl.it.txt
2 TODO
- Mailman (in realizzazione)
- Elenco pacchetti per la compilazione/funzionamento del sistema
- Quota
- Esempi completi (dump del db + file di config)
3 Bibliografia
Un sentito grazie(!) a Keith Metthews, Kirby Menzel e Lucas Peet per i loro preziosi lavori senza i quali difficilmente saremmo riusciti nell’impresa.
Potete reperire i rispettivi howto ai seguenti indirizzi:
- http://www.sweeney.demon.co.uk/pfix_imap_virtual.html
- http://kummerfryser.dk/HOWTO/mail/postfix_mysql.html
- http://kirb.insanegenius.net/postfix.html
Se troverete delle “somiglianze” tra questi lavori e il presente…. Si tratterà, ovviamente, di un puro caso
4 Introduzione:
In questo howto cercheremo di spiegare come configurare Postix e Courier-Imap per lavorare congiuntamente a MySQL. Quello che vogliamo ottenere è un sistema per la gestione della posta completamente viruale, senza alcun utente “reale” sulla macchina.
Non verrà trattata la configurazione di ciascun software in dettaglio, per questo si rimanda alla documentazione ufficiale.
5 Vantaggi e svantaggi
Il primo vantaggio è dato dal’avere completamente distinti gli utenti che effettivamente hanno una shell valida sulla macchina e quelli che utilizzano solo i servizi di posta (ma in discorso analogo lo si potrebbe fare anche per altri servizi).
Il tutto si traduce anche in una maggior facilità di amministrazione, e anche nel caso di un “trasloco” su di un’altra macchina. Infatti sara’ sufficiente ricreare la struttuta delle dir e importare il db. Il tutto senza interferire con eventuali utenti gia’ presenti sul nuovo server.
Attenzione!
il fatto di utilizzare un db per la gestione degli utenti ha anche un impatto da non sottovalutare sulle performance. Dato che per ogni mail in transito postfix deve eseguire più di una query sul db, è possibile che il sistema non abbia le stesse prestazioni.
6 Perché postfix e non qmail, courier e non cyrus, mysql e non postgresql…
Sicuramente vi sono molti altri programmi che consentono di fare lo stesso, le nostre scelte sono semplicemente derivate dall’esperienza. Conoscevamo postfix per averlo utilizzato in altre realtà e mysql è uno strumento che oramai padroneggiamo bene. Questo non vuol dire che siano i migliori software in circolazione, sono semplicemente quelli con i quali ci troviamo maggiormente a nostro agio.
7 Installazione
Noi abbiamo installato tutti i pacchetti partendo dai sorgenti, ma non è una cosa strettamente necessaria, potete utilizzare anche i binari. Fate però attenzione a Postfix, normalmente il supporto per MySQL non è incluso nella configurazione standard, per questo è consigliabile compilarlo a mano.
Quelle che seguono sono le impostazioni che abbiamo dato ai vari servizi durante la compilazione. In tutto questo documento daremo per scontato che i vari file di configurazione, i binari etc, si trovino come indicato di seguito. Non doverebbe essere in problema adattarli alle vostre esigenze.
Tutte le nostre prove sono state eseguite su SuSE 7.3, SuSE 8.0 e Debian Woody. Quest’ultima utilizzando i binari presenti senza dover ricompilare nulla, apt-get install … (!!!)
8 MySQL
Quest’ottimo dbms lo trovate qui http://www.mysql.com.
Opzioni di compilazione:
./configure --prefix=/usr/local/mysql \
--with-mysql-user=mysql \
--with-unix-socket-path=/var/lib/mysql/mysql.sock
make
make install
Fate particolare attenzione al percorso del socket, tutti i programmi che seguono ne faranno uso.
Ricordatevi di aggiungere /usr/local/mysql/lib/mysql a /etc/ld.so.conf, di eseguire ldconfig e di creare l’utente “mysql” (nel nostro esempio).
9 Postfix
Postfix è reperibile all’indirizzo http://www.postfix.org
Opzioni di compilazione:
make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql' \
'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm'
Ovviamente i percorsi per le librerie possono variare da sistema a sistema.
10 Courier-imap
Courier è scarcabile dal sito http://www.inter7.com/courierimap/
Opzioni di compilazione da eseguire come utente non privilegiato.
come utente normale e non root!:
./configure --prefix=/usr/local/courier-imap \
--prefix.... per i file di configurazione
make
make check
da root:
make install-strip
make install-configure
11 Configurazione MySQL
Abbiamo creato un nuovo db chiamato “maildb” con 4 tabelle:
- aliases
- contiene la mappatura degli alias (sostituisce il classico file /etc/aliases)
- mail_users
- contiene, ovviamente, l’eleco degli utenti e le relative conf.
- transport
- indica quale mezzo di transporto/teletrasporto utilizzare
- virtual
- per la gestione degli utenti virtuali
È stato creato anche un utente per gestire il db, nel nostro esempio faremo riferimento a user=postino, password=posta (mi raccomando, usate combinazioni più serie!) che può collegarsi solo da localhost e con tutti i permessi del caso. Se il db dovesse essre installato su una macchina diversa, modificate la configurazione di conseguenza.
12 Descrizione Tabelle
12.1 aliases
- alias
- contiene l’alias da mappare. Corrisponde alla colonna di sinistra del file “aliases”
- destination
- destinazione della posta indirizzata ad alias. Può contenere tutti i riferimenti validi nel file “aliases”; possono quindi essere usati indirizzi completo (utente@dominio.it), pipe (“/path/per/comando”) etc.
Per una descrizione completa si rimanda alla pagina man (man 5 aliases)
12.2 mail_users
- id
- identificativo dell’utente -> login
- address
- Indirizzo di posta.
- crypt
- La password criptata [#]_
- clear
- La password in chiaro
- name
- Nome dell’utente
- uid
- User id dell’utente, se è un utente esistente nel sistema indicare quello corretto.
- id
- Group id dell’utente. Valgono le stesse ossevazioni fatte per uid. [#]_
- home
- Home dir degli utenti di posta. È la base dalla quale verrà indicata la maildir.
- maildir
- Maildir dell’utente.
- domain
- Dominio dell’utente.
- imapok
- Valore booleano utile per attivare/disattivare al volo degli utenti.
12.3 virtual
- address
- indirizzo base
- goto
- indirizzo destinazione
12.4 transport
- domain
- dominio di riferimento
- transport
- metodo di consegna delle email per il dominio specificato. Può assumere i valori “virtual:” o “local:”
13 Configurazione Postfix
13.1 Configurazione di main.cf
In /etc/postfix/main.cf vanno aggiunte/modificate le seguenti linee:
# Indica di usare come riferimento locale solo la macchina corrente
mydestination = $myhostname, localhost.$mydomain
# Indica di utilizzare il formato Maildir e non il "vecchio" mbox
home_mailbox=Maildir/
# Indica a postfix dove trovare la configurazione per la tabella transport
transport_maps=mysql:/etc/postfix/sql_transport.cf
# Come sopra ma per virtual
virtual_maps=mysql:/etc/postfix/sql_virtual.cf
# Come sopra ma per gli alias
alias_maps=mysql:/etc/postfix/sql_aliases.cf
alias_database=mysql:/etc/postfix/sql_aliases.cf
# Dove reperire le informazioni sulle mailbox
virtual_mailbox_maps=mysql:/etc/postfix/sql_mailbox.cf
# Dir base dove sono contenute tutte le mailbox
virtual_mailbox_base=/var/posta
# Indica come reperire lo uid e il gid dei vari utenti
# La differenza nei due metodi sotto riportati e' che il primo fa si che
# postfix interroghi il db per sapere lo uid e il gid dell'utente, il secondo
# considera sempre uid=9999 e gid=9999 per *tutti* gli utenti evitando le query.
# Per evitare altre query e' consigliabile utilizzare il secondo.
virtual_uid_maps=mysql:/etc/postfix/sql_uid.cf
virtual_gid_maps=mysql:/etc/postfix/sql_gid.cf
virtual_uid_maps=static:9999
virtual_gid_maps=static:9999
# Indica di accettare la posta per $mydestination e per tutti i domini dichiarati
# nella tabella transport
relay_domains = $mydestination,$transport_maps
13.2 Configurazione di master.cf
Verificate la presenza della seguente riga in /etc/postfix/master.cf:
virtual unix - n n - - virtual
13.3 sql_transport.cf
In sql_transport.cf:
user = postino
password = pippo
dbname = maildb
table = transport
select_field = transport
where_field = domain
hosts = localhost se il db e' ospitato su una macchina diversa va
modificato di conseguenza.
13.4 sql_aliases.cf
In sql_aliases.cf:
user = postino
password = pippo
dbname = maildb
table = virtual
select_field = destination
where_field = alias
hosts = localhost
13.5 sql_virtual.cf
In sql_virtual.cf:
user = postino
password = pippo
dbname = maildb
table = virtual
select_field = goto
where_field = address
hosts = localhost
13.6 sql_mailbox.cf
In sql_mailbox.cf:
user = postino
password = pippo
dbname = maildb
table = mail_users
select_field = maildir
where_field = id se decidete di non avere un il login diverso dall'indirizzo
indicate qui il campo dell'indirizzo (address).
hosts = localhost
Nota
I singoli file non dicono altro a postfix come costruire la query che opererà sul db per estrarne i dati.
14 Consigli e avvertenze sulla configurazione delle tabelle
14.1 Uso del trasporto local
Se un dominio è dichiarato come ‘local:’ nella tabella transport, qualunque indirizzo ad esso riferito nelle tabelle virtual e mail_users sarà ignorato, e solo la tabella aliases e la lista degli utenti (reali) di sistema saranno utilizzati per indirizzare la posta. Da notare inoltre che due domini definiti come local: condividono gli stessi alias e gli stessi utenti. Può quindi essere superfluo dichiarare piu’ di un dominio come local: Infatti è sufficiente dichiarare local: il dominio specificato in masquerade_domains nel file main.cf. Fatto questo ogni indirizzo virtuale può essere indirizzato su un utente reale di sistema o un alias come specificato al punto 3)
14.2 Uso di account catch-all
Per usare account catch-all (cioè account che ricevono tutta la posta inviata ad un dominio non consegnata ad altri account: ad esempio, indirizzi inesistenti) è necessario che nella tabella virtual siano presenti tutti gli indirizzi del dominio, sia che siano realmente virtuali (ad es:indirizzo_virtuale@dominio.tld | indirizzo_reale@dominio.tld) sia che siano indirizzi a cui corrisponde un account in mail_users ( indirizzo_reale@dominio.tld | indirizzo_reale@dominio.tld, con indirizzo_reale@dominio.tld esistente nella tabella mail_users). Per attivare l’account indirizzo_reale@dominio.tldcome catch-all è necessario inserire nella tabella virtual un record con address “@dominio.tld” e goto “indirizzo_reale@dominio.tld”
14.3 Indirizzare un account di un dominio virtuale su un utente di sistema o un alias
Ipotizzando che siano configurati 2 domini: dominio.tld e host.dominio.tld, il primo virtual: e il secondo “local:”, e che si voglia indirizzare tutti i messaggi di utente_finto@dominio.tld al programma /usr/local/bin/mioprogramma, bisogna inserire i seguenti record (la pipe divide i diversi campi da inserire): virtual utente_finto@dominio.tld | utente_finto@host.dominio.tld:
alias utente_finto | "|/usr/local/bin/mioprogramma"
15 Configurazione di Courier-Imapd
Due sono i file da modificare per la configurazione di Courier:
-
/usr/local/courier-imap/etc/authdaemonrc:
authmodulelist="authmysql"
-
/usr/local/courier-imap/etc/authmysqlrc:
MYSQL_SERVER localhost come sempre da modificare se diverso
MYSQL_USERNAME postino
MYSQL_PASSWORD pippo
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE maildb
MYSQL_TABLE mail_users
MYSQL_CLEAR_PWFIELD clear
MYSQL_CRYPT_PWFIELD crypt
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAIDIR_FIELD maildir
MYSQL_WHERE_CLAUSE imapok=1
NB: Fate molta attenzione a non lasciare spazi dopo i valori dati alle variabili! Pena la mancata connessione al db. Sfortunatamente courier ritorna solamente un anonimo “login error”
Per le configurazione dei singoli programmi vi rimandiamo alla documentazione che trovate nei rispettivi siti internet.
Se tutto è andato bene con postfix start avvierete postfix, con /usr/local/courier-imap/libexec/impad.rc start partirà courier imap e con /usr/local/courier-imap/libexec/pop3d.rc start attiveremo anche il server pop3
16 Horde e Imp
Il framework horde ed il sistema di posta imp, non presentano prticolari difficoltà durante l’installazione. In questo howto ci riferiremo alle versioni 2 di horde e 3 di imp. Entrambi sono a disposizione sul sito internet http://www.horde.org e in debian sid. Tuttavia vi sono alcuni accorgimenti da attuare per il loro corretto funzionamento con Courier. Come consigliato anche dalla documentazione, lasciamo che sia IMP a gestire l’autenticazione. La configurazione std di IMP prevede un file servers.php simile al seguente:
$servers['imap'] = array(
'name' => 'IMAP Server',
'server' => 'imap.example.com',
'protocol' => 'imap/notls',
'port' => 143,
'folders' => 'mail/',
'namespace' => '',
'maildomain' => 'example.com',
'smtphost' => 'smtp.example.com',
'realm' => 'example.com',
'preferred' => ''
);
Che va modificato in questo modo:
<?php
$servers['imap'] = array(
'name' => 'IMAP Server',
'server' => '127.0.0.1',
'protocol' => 'imap',
'port' => 143,
'folders' => '',
'namespace' => 'INBOX.',
'maildomain' => '',
'smtphost' => '127.0.0.1',
'realm' => '',
'preferred' => '1'
);
?>
Ipotizzando che il server IMAP sia sulla stessa macchina. Fate molta attenzione a configurare correttamente le voci protocol e namespace
Per far si che l’autenticazione venga gestita da Imp, basta modificare il file horde.php:
/**
** Horde Authentication
**/
// What backend should we use for authenticating users to Horde? Valid
// options are currently 'imap', 'ldap', 'mcal', 'sql', and 'ftp'.
$conf['auth']['driver'] = 'imap';
I possessori di debian, dopo un apt-get install imp, troveranno i file di configurazione in /etc/horde e /etc/imp.
Più precisamente /etc/horde2/horde.php e /etc/imp3/servers.conf
17 Procmail
Se utilizzate questo sistema su un server casalingo sul quale concentrare la posta dei vostri innumerevuli account, come faccio io (n.d.S), potrebbe trornarvi utile configurare procmail in modo che smisti i vari messaggi nelle casella appropriate.
Es di procmailrc:
DEFAULT=$HOME/Maildir/new
MAILDIR=$HOME/Maildir
PMDIR=$HOME/etc/procmail
FORMAIL=/usr/bin/formail
DATE = `date +%Y%m`
#file .rc aggiuntivi
INCLUDERC = $PMDIR/liste.rc
Ed il file liste.rc è così composto:
:0
* ^TO_*linuxtrent*
.Liste.Linux.linuxtrent/new
:0
* ^TO_*debian-italian*
.Liste.Linux.debian-it/new
NB: le varie directory devono essere già presenti e create con un client di posta che supporti IMAP (anche Imp va benissimo)
Ovviamente altra letteratura interessante è reperibile
From unknown Mon Aug 30 10:19:04 +0200 2004 From: Date: Mon, 30 Aug 2004 10:19:04 +0200 Subject: courier-imap Message-ID: <20040830101904+0200@www.linuxtrent.it>
Quando cerco di creare una cartella di posta nella radice del server courier-imap, quest’ultimo risponde: Invalid mailbox name! :-(((( da cosa può dipendere? L’e-mail su cui rispondere è wittgen105@yahoo.it