Menu Chiudi

Postfix Courier Mysql

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:

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

WordPress Appliance - Powered by TurnKey Linux