Gentoo Logo

Guida al Sistema di Mailhosting Virtuale con Postfix

Indice:

1.  Introduzione

Per la maggior parte degli utenti Gentoo, un semplice client di posta e fetchmail sono sufficienti. Comunque, se sul proprio sistema si ospita un dominio, ci sarà bisogno di un MTA (Mail Transfer Agent) completo. E se si stanno ospitando diversi domini, allora sicuramente ci sarà bisogno di qualcosa di più robusto per gestire tutte le email dei propri utenti. Il sistema proposto è stato progettato per essere una soluzione elegante a questo problema.

Un sistema di mail virtuale deve essere in grado di gestire email per numerosi domini con molteplici utenti su diverse interfacce. Questo presenta alcune problematiche alle quali far fronte. Per esempio, cosa fare se si hanno due utenti su domini differenti che vogliono lo stesso nome utente? Se viene fornito accesso imap e autenticazione smtp, come combinare i diversi demoni di autenticazione in un sistema unico? Come riuscire a fornire sicurezza ai numerosi componenti che comprende il sistema? Come gestire tutto?

Questa guida mostrerà come configurare un sistema di posta capace di gestire email per tanti domini quanti ne può gestire il proprio hardware, supportare utenti di posta virtuale senza bisogno di account di shell, avente nomi utenti specifici per il dominio, capace di autenticare client web, imap, smtp e pop3 tramite un unico database, utilizzare ssl come layer di trasporto sicuro dei dati, avente un'interfaccia web, capace di gestire mailing list per ogni dominio sulla macchina, e controllato da un database MySQL semplice, carino e centralizzato.

Ci sono molteplici modi di configurare un sistema di mailhosting virtuale. Con tutte le opzioni disponibili, forse un altro modo risulterà migliore per le proprie esigenze specifiche. Cercare su http://www.qmail.org e http://www.exim.org per esplorare le proprie opzioni.

I seguenti pacchetti sono usati in questa configurazione: apache, courier-imap, courier-authlib, postfix, mod_php, phpmyadmin, squirrelmail, cyrus-sasl, mysql, php e mailman.

Assicurarsi di abilitare le seguenti variabili USE all'interno di /etc/portage/make.conf prima di compilare i pacchetti: USE="mysql imap libwww maildir sasl ssl". Altrimenti molto probabilmente si dovranno ricompilare alcune cose per avere il supporto necessario per tutti i protocolli. Inoltre, è una buona idea disabilitare ogni altra variabile per la posta e la rete, come per esempio ipv6.

Importante: Ci sarà bisogno di un nome di dominio per far girare un server di posta pubblico o almeno di un MX record per un dominio. Idealmente ci sarà bisogno di avere il controllo di almeno due domini per avvantaggiarvi delle nuove funzionalità di dominio virtuali.

Importante: Assicurarsi che il file /etc/hostname sia configurato con il giusto hostname per il proprio server di posta. È possibile applicare qualsiasi modifica fatta a questo file eseguendo /etc/init.d/hostname restart. Verificare che l'hostname sia impostato correttamente con il comando hostname. Verificare inoltre che non ci siano voci in conflitto tra loro nel file /etc/hosts.

Nota: Si raccomanda di leggere per intero questo documento e di familiarizzare con tutti i passi prima di provare ad installare. Se si riscontrano dei problemi con uno di questi passi, controllare la guida alla risoluzione in fondo a questo documento. Inoltre, non tutti i pacchetti nominati sono necessari: questa configurazione è molto flessibile. Per esempio, se non si ha bisogno di una interfaccia web, saltare la sezione che riguarda squirrelmail.

2.  Le basi di Postfix

Codice 2.1: Installare postfix

# emerge postfix

Avvertenza: Verificare di non avere installato nessun altro MTA, come ssmtp, exim o netqmail, o si avranno sicuramente GRANDI problemi.

Una volta installato postfix, è tempo di configurarlo. Cambiare le seguenti opzioni nel file /etc/postfix/main.cf. Ricordarsi di sostituire $variabile con i loro nomi relativi.

Codice 2.2: /etc/postfix/main.cf

myhostname = $host.nome.dominio
mydomain = $nome.dominio
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = ip.della.propria.rete/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10

Successivamente cambiare le seguenti opzioni dentro a /etc/postfix/master.cf. Questo attiverà l'output prolisso per poter fare debugging:

Codice 2.3: /etc/postfix/master.cf

# service type  private unpriv  chroot  wakeup  maxproc command + args
#
#               (yes)   (yes)   (yes)   (never) (50)
#
(Aggiungere semplicemente la "-v" dopo smtpd nella riga sopra)
==========================================================================
 smtp      inet  n       -       n       -       -       smtpd -v

Poi, modificare /etc/mail/aliases per aggiungere i propri alias locali. Ci dovrebbe essere almeno un alias per l'utente root simile a questo: root: vostro@indirizzo.email.

Codice 2.4: Avviare postfix per la prima volta

# /usr/bin/newaliases 
(Questo installerà i nuovi alias. Si deve fare soltanto questo)
(quando gli alias vengono aggiornati o installati.)

# /etc/init.d/postfix start

Ora che postfix è in esecuzione, avviare il proprio client di posta preferito e mandare una mail a sè stessi. L'autore di questo documento usa mutt per tutta la posta da console. Verificare che postfix consegni la posta agli utenti locali, e una volta fatto, proseguire con il prossimo passaggio.

Nota: Si raccomanda fortemente di verificare che questa configurazione di base di postfix sia funzionante prima di proseguire con il prossimo passaggio di questa guida.

3.  Courier-imap

Codice 3.1: Installare courier-imap e courier-authlib

# emerge courier-imap courier-authlib

Codice 3.2: Configurazione Courier-imap

# cd /etc/courier-imap 
(Se si vogliono usare le capacità ssl di courier-imap o pop3, ci sarà
bisogno di creare certificati per questo scopo. Questo passo è raccomandato, ma
se non si vuole usare ssl, è possibile saltarlo.)

# nano -w pop3d.cnf
# nano -w imapd.cnf 
(Cambiare i parametri C, ST, L, CN, e email per adeguarli al proprio server.)

# mkpop3dcert
# mkimapdcert

Codice 3.3: Avviare i servizi courier necessari.

# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start

Avviare il proprio client di posta preferito e assicurarsi che tutte le connessioni avviate funzionino per ricevere e mandare posta. Ovviamente non si riuscirà a loggarsi a qualunque servizio poichè l'autenticazione non è stata ancora configurata, ma è saggio verificare se le connessioni stesse funzionano oppure no.

Ora che le cose di base funzionano, verranno fatte diverse cose contemporaneamente per avere il resto del sistema funzionante. Ancora, verificare che funzionino tutte le cose già installate prima di proseguire.

4.  Cyrus-sasl

Ora verrà installato cyrus-sasl. Sasl servirà per passare a courier-auth le proprie variabili di autenticazione, le quali verranno poi passate a mysql per autenticare gli utenti smtp. Per questa guida, non verrà verificato il funzionamento di sasl finchè mysql non sarà configurato e conterrà un utente di prova. Questo è giusto visto che alla fine l'autenticazione avverrà tramite mysql.

Codice 4.1: Configurare e installare l'ebuild cyrus-sasl

# emerge cyrus-sasl

Poi, modificare /etc/sasl2/smtpd.conf.

Codice 4.2: Avviare sasl

# nano -w /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
# nano -w /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"
# /etc/init.d/saslauthd start

5.  Certificati SSL per Postfix e Apache

Ora verrà creato un gruppo di certificati ssl per postfix e apache.

Codice 5.1: Creare certificati ssl

# cd /etc/ssl/
# nano -w openssl.cnf

Cambiare i seguenti valori predefiniti con quelli per il proprio dominio:

countryName_default
stateOrProvinceName_default
localityName_default
O.organization_default
commonName_default
emailAddress_default.

(Se le variabili non sono già presenti, aggiungerle semplicemente nel posto giusto.)

# cd misc
# ./CA.pl -newreq-nodes
# ./CA.pl -newca
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newreq.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix 
(Ora verrà fatta la stessa cosa per apache)

# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365 
(Per ora lasciare qui i certificati ottenuti. Verranno installati dopo aver installato Apache.)

6.  Aggiungere il supporto SSL e SASL a Postfix

Ora modificare il file di configurazione di postfix per metterlo a conoscenza delle sue nuove capacità sasl e ssl. Aggiungere i seguenti parametri alla fine del file dove saranno più facili da trovare.

Codice 6.1: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =


(Le opzioni broken_sasl_auth_clients e il metodo di autenticazione di login sono solamente per outlook
e outlook express e non sono documentate. Non è interessante dover modificare del software con hack per
far funzionare programmi stupidi e fatti male della M$? smtpd_sasl_local_domain aggiunge un nome di
dominio ai client usando smtp-auth. Assicurarsi di lasciarlo in bianco o i propri nomi utente saranno
storpiati da postfix e non saranno in grado di autenticarsi.)

smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unath_destination

(Le prossime due opzioni attivano la criptatura verso l'esterno.)
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newreq.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

(smtpd_tls_auth_only è senza commento per facilitare il testing del sistema. In seguito, volendo, si potrà riabilitarlo.)

# postfix reload

Ora si verificherà che le configurazioni aggiunte vengano accettate da postfix. Per fare ciò verrà utilizzato telnet (fornito per esempio da net-misc/netkit-telnetd) sebbene sia possibile utilizzare anche nc (fornito da net-analyzer/netcat):

Codice 6.2: Verificare sasl e il supporto tls

# telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN OTP
250-AUTH=LOGIN PLAIN OTP
250-XVERP
250 8BITMIME
^]
telnet> quit

Verificare che le righe AUTH e STARTTLS sopra, ora appaiano nella propria installazione di postfix. Come detto prima, ora AUTH non funzionerà. Questo perchè sasl cercherà di autenticarsi verso il suo sasldb, invece del file shadow per qualche sconosciuta ragione, che non è stato configurato. Per cui si proseguirà configurando mysql per contenere tutte le informazioni di autenticazione e dei domini virtuali.

7.  L'utente vmail

Prima di configurare il proprio ambiente di mailhosting virtuale, verrà creato un utente funzionale tramite il quale verranno ospitate le mailbox virtuali. Per motivi di chiarezza verrà chiamato vmail:

Codice 7.1: Aggiungere l'utente vmail

# useradd -d /home/vmail -s /bin/false -m vmail

A questo punto l'account vmail è stato impostato. È possibile creare account multipli se lo si desidera (per mantenere una certa struttura nel proprio insieme di account mail virtuali). L'user id, il group id e le directory home sono referenziate nelle tabelle MySQL.

Successivamente all'account utente bisogna anche creare la locazione dove risiederanno le mailbox:

Codice 7.2: Creare le mailbox

# mkdir -p /home/vmail/virt-domain.com/foo
# chown -R vmail:vmail /home/vmail/virt-domain.com
# maildirmake /home/vmail/virt-domain.com/foo/.maildir

8.  MySQL

Ora verrà installato e configurato MySQL. Per questo passo ci sarà bisogno del file di dump genericmailsql.sql.

Codice 8.1: Installare e configurare MySQL

# emerge mysql

# /usr/sbin/mysql_install_db 
(Dopo aver eseguito questo comando seguire le indicazioni sullo schermo
per aggiungere una password di root con mysql, altrimenti il proprio db sarà
aperto a tutti.)

# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p mailsql < genericmailsql.sql

# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
    ->     ON mailsql.*
    ->     TO mailsql@localhost
    ->     IDENTIFIED BY '$password';
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
(Verificare che il nuovo utente mailsql possa connettersi al server mysql.)

# mysql -u mailsql -p mailsql

Il nuovo database contiene valori predefiniti e tabelle configurate per due domini. Sono incluse le seguenti tabelle:

  • alias - alias locali e informazioni alias di mailman.
  • relocated - mappe riallocate di indirizzi email di utenti
  • transport - informazioni predefinite per il trasporto di mail per tutti i domini ospitati
  • users - informazioni sugli account di tutti gli utenti
  • virtual - mappe degli alias delle mail dei domini virtuali

Codice 8.2: esempio di tabella alias

id   alias    destination
1    root     foo@bar.com
2  postmaster foo@bar.com

Codice 8.3: esempio di tabella user

(Linee spezzate per chiarezza.)
id email            clear     name     uid     gid     homedir     \
        maildir                                quota  postfix
10 foo@virt-domain.com $password realname virtid  virtid  /home/vmail \
        /home/vmail/virt-domain.com/foo/.maildir/        y
13 foo@bar.com      $password realname localid localid /home/foo   \
        /home/foo/.maildir/                           y

I valori uid e gid di virtid dovrebbero essere quelli del gruppo e dell'utente vmail.

Codice 8.4: esempio di tabella transport

id   domain       destination
1    bar.com      local:
2    virt-domain.com virtual:

Codice 8.5: esempio di tabella virtual

id   email            destination
3   root@virt-domain.com other@email.address

9.  Apache e phpMyAdmin

Ora verrà configurato apache e verrà aggiunta un'interfaccia per interagire più facilmente con il database.

Codice 9.1: Configurare apache e phpmyadmin

# emerge apache phpmyadmin

Ci sono una moltitudine di guide su come configurare apache con php, incluse le guide fornite dal Gentoo PHP Project (pagina in inglese, ndT). Ci sono anche numerose discussioni su http://forums.gentoo.org che spiegano in dettaglio come risolvere problemi con l'installazione. Così, come detto, questo problema non verrà coperto in questa sede. Installare e configurare apache e php, poi continuare con questa guida. Ora una parola ai saggi: usare .htaccess nella directory in cui verrà posizionato phpmyadmin. Se non viene fatto, i motori di ricerca arriveranno e indicizzeranno la pagina cosicchè qualsiasi persona sarà in grado di trovarla tramite google e apportare cambiamenti al database a proprio piacimento, il che NON È COSA BUONA!. Ci sono molte guide sull'argomento, incluso: http://www.csoft.net/docs/micro/htaccess.html.en.

Ora verranno installati i certificati Apache creati in precedenza. Le direttive Apache-SSL che servono per usare tali certificati sono:

  • SSLCertificateFile /path/verso/i/certificati/new.cert.cert
  • SSLCertificateKeyFile /path/verso/i/certificati/new.cert.key

Codice 9.2: Installare i certificati SSL su Apache

# cp /etc/ssl/misc/new.cert.cert /etc/apache2/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache2/ssl/
# cd /etc/apache2/vhosts.d
(Verificare se si possiede già un template ssl-vhost. Copiare quest'ultimo invece del file default_vhost, se è il caso
# cp 00_default_vhost.conf ssl-vhost.conf
# nano -w ssl-vhost.conf

(Cambiare i seguenti parametri)
NameVirtualHost host.domain.name:443

<VirtualHost host.domain.name:443>
  ServerName host.nome.dominio
  ServerAdmin proprio@indirizzo.email

  DocumentRoot "/var/www/localhost/htdocs/phpmyadmin";
  <Directory "/var/www/localhost/htdocs/phpmyadmin">
    ...
  </Directory>

  SSLCertificateFile /etc/apache2/ssl/new.cert.cert
  SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
  SSLEngine on
  ...
</VirtualHost>

# nano -w /etc/conf.d/apache2
(Aggiungere -D SSL -D PHP5 al parametro APACHE2_OPTS)

# /etc/init.d/apache restart

A questo punto configurare phpMyAdmin.

Codice 9.3: Configurare phpMyAdmin

# cd /var/www/localhost/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
# nano -w config.inc.php
(Cambiare i seguenti paramentri)
$cfg['blowfish_secret'] = 'unapassphrasemoltosegreta';

$cfg['Servers'][$i]['host'] = 'localhost';        // MySQL hostname (dove gira il demone mysqld)
$cfg['Servers'][$i]['controluser'] = 'mailsql';   // MySQL control user settings (utente di controllo)
$cfg['Servers'][$i]['controlpass'] = '$password'; // (deve avere diritti di sola lettura sulle tabelle mysql/user e mysql/db)
$cfg['Servers'][$i]['user'] = 'mailsql';          // MySQL user (nome utente)
$cfg['Servers'][$i]['password'] = '$password';    // MySQL password

Aprire la pagina di phpmyadmin e sfogliate le tabelle. A questo punto si potranno aggiungere i propri alias locali, modificare le tabelle utenti per aggiungere un utente di prova, e modificare la tabella trasport per aggiungere informazioni sul proprio dominio. I valori predefiniti forniti con il file di dump dovrebbero essere sufficienti per aiutare ad impostare le variabili al posto giusto. Assicurarsi di inserire nel database informazioni accurate. Per esempio, assicurarsi che le directory home degli utenti locali esistano e che i valori di uid/gid siano corretti. Le directory maildir dovrebbero essere create automaticamente da postfix quando l'utente riceve la prima email. Così, di solito, è una buona idea mandare una mail di "Benvenuto" ad un nuovo utente dopo aver configurato il suo account per assicurarsi che la directory .maildir venga creata.

10.  Configurare l'Autenticazione con MySQL e i vhost

Ora verrà configurata l'autenticazione per usare il database mailsql con courier-imap e postfix. In ognuno degli esempi seguenti, sostituire $password con la password assegnata all'utente mysql denominato mailsql.

Codice 10.1: Configurare l'autenticazione

# nano -w /etc/courier/authlib/authdaemonrc
authmodulelist="authmysql authpam"

# nano -w /etc/courier/authlib/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users
#MYSQL_CRYPT_PWFIELD    crypt
(Assicurarsi di decommentare questa riga, visto che verrà memorizzata in testo semplice.)
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

# /etc/init.d/courier-authlib restart
# /etc/init.d/saslauthd restart

A questo punto configurare il resto dei file di configurazione di postfix necessari per interagire con il database per tutte le necessità di trasporto. Ricordarsi di sostituire ciascun valore con il nome del proprio utente, user id, password, alias, indirizzo email, e così via.

Codice 10.2: /etc/postfix/mysql-aliases.cf

# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = alias
select_field    = destination
where_field     = alias
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.3: /etc/postfix/mysql-relocated.cf

# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = relocated
select_field    = destination
where_field     = email
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.4: /etc/postfix/mysql-transport.cf (opzionale)

# nano -w /etc/postfix/mysql-transport.cf
# mysql-transport.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = transport
select_field    = destination
where_field     = domain
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.5: /etc/postfix/mysql-virtual-gid.cf (opzionale)

# nano -w /etc/postfix/mysql-virtual-gid.cf
# myql-virtual-gid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = gid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.6: /etc/postfix/mysql-virtual-maps.cf

# nano -w /etc/postfix/mysql-virtual-maps.cf
# myql-virtual-maps.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.7: /etc/postfix/mysql-virtual-uid.cf (opzionale)

# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = uid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Codice 10.8: /etc/postfix/mysql-virtual.cf

# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = virtual
select_field    = destination
where_field     = email
hosts           = unix:/var/run/mysqld/mysqld.sock

Come ultima cosa, modificare nuovamente /etc/postfix/main.cf.

Codice 10.9: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf
(Assicurarsi che non ci siano altre definizioni di alias_maps)
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf

local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

virtual_transport = virtual
(I domini elencati da mydestination non dovrebbero essere elencati nel parametro virtual_mailbox_domains)
virtual_mailbox_domains = virt-bar.com, $other-virtual-domain.com

virtual_minimum_uid = 1000
(Sostituire $vmail-gid con il GID del gruppo vmail)
virtual_gid_maps = static: $vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
(Sostituire $vmail-uid con l'UID dell'utente vmail)
virtual_uid_maps = static: $vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =

Per ragioni di sicurezza si dovrebbero cambiare i permessi ai vari file /etc/mail/mysql-*.cf:

Codice 10.10: Cambiare i permessi dei file

# chmod 640 /etc/postfix/mysql-*.cf
# chgrp postfix /etc/postfix/mysql-*.cf

Dalla versione 2.0.x del Postfix, ci sono diversi cambiamenti significativi rispetto alla versione 1.1.x. Le tabelle transport, virtual-gid e virtual-uid non sono più necessarie. Le tabelle, volendole usare, sono ancora incluse.

Nota: Si raccomanda di leggere il file VIRTUAL_README incluso nella documentazione di postfix per ulteriori informazioni.

Codice 10.11: Far ricaricare le tabelle di postfix

# postfix reload

Ora, se tutto è andato bene, si dovrebbe avere un server di posta funzionante. Gli utenti dovrebbero essere in grado di autenticarsi tramite il database sql, usando il loro indirizzo di posta completo, per pop3, imap e smtp. Si suggerisce caldamente di verificare che a questo punto tutto stia funzionando. Se si riscontrano problemi (con tutte le operazioni eseguite in questa configurazione, probabilmente ce ne saranno) controllare la sezione di risoluzione dei problemi in questa guida.

11.  Squirrelmail

Codice 11.1: Installare squirrelmail

# emerge squirrelmail
(Installare squirrelmail in localhost, cosicché vi si possa accedere da http://localhost/mail.) (Sostituire 1.4.3a-r2 con la versione in uso.)
# webapp-config -I -h localhost -d /mail squirrelmail 1.4.3a-r2
# cd /var/www/localhost/htdocs/mail/config
# perl ./conf.pl

(Modificare le impostazioni Organization, Server, e Folder per squirrelmail. Ora
si dovrebbe essere in grado di fare il login in squirrelmail, anche qui - con il
proprio indirizzo email completo, e usare le nuove impostazioni della webmail.)

12.  Mailman

Ultimo passo: mailman. La nuova versione di mailman ha un supporto per i domini virtuali molto interessante, per tale motivo viene utilizzato dall'autore di questo documento, senza dimenticare che è veramente un grande pacchetto. Per installarlo e farlo funzionare correttamente con i domini virtuali c'è bisogno di un po' di modifiche. Si raccomando sempre caldamente di leggere tutta la documentazione di mailman, compreso README.POSTFIX.gz, per capire bene cosa stia succedendo.

Codice 12.1: Installare mailman

# emerge mailman

Codice 12.2: Impostazioni predefinite: Mailman/Defaults.py

#  nano -w /usr/local/mailman/Mailman/Defaults.py
(Cambiare i valori qui sotto per rispecchiare il proprio dominio primario, quelli virtuali saranno configurati in seguito.)
DEFAULT_EMAIL_HOST = 'dominio.com'
DEFAULT_URL_HOST = 'www.dominio.com'

Codice 12.3: configurazione di mailman: mm_cfg.py

# nano -w /usr/local/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
(Questo è necessario al mailman per funzionare con i propri domini virtuali.)

Codice 12.4: E per ultimo, ma non meno importante

(Una volta terminato, aggiungere la propria prima lista.)

# su mailman
# cd ~
# ./bin/newlist --urlhost='www.virt-domain.com' --emailhost='virt-domain.com' test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification...
(Le liste dei domini virtuali possono anche essere specificate con lo stile di nomi lista@dominio.com)
# ./bin/genaliases
(Ora che i propri alias sono stati generati, verificare che siano stati aggiunti con successo.)

# nano -w data/aliases
# STANZA START: test
# CREATED:
test:             "|/usr/local/mailman/mail/mailman post test"
test-admin:       "|/usr/local/mailman/mail/mailman admin test"
test-bounces:     "|/usr/local/mailman/mail/mailman bounces test"
test-confirm:     "|/usr/local/mailman/mail/mailman confirm test"
test-join:        "|/usr/local/mailman/mail/mailman join test"
test-leave:       "|/usr/local/mailman/mail/mailman leave test"
test-owner:       "|/usr/local/mailman/mail/mailman owner test"
test-request:     "|/usr/local/mailman/mail/mailman request test"
test-subscribe:   "|/usr/local/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe test"
# STANZA END: test

(Creare la lista mailman necessaria)
# ./bin/newlist mailman
# ./bin/genaliases

(Ritornare all'utente root)
# exit

# /etc/init.d/mailman start
# rc-update add mailman default
(Per far avviare mailman immediatamente e ad ogni riavvio.)

Codice 12.5: Aggiungere il supporto degli alias di mailman a postfix

# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Leggere README.POSTFIX.gz per ulteriori dettagli su questo.)

alias_maps     =
     hash:/usr/local/mailman/data/aliases,
     mysql:/etc/postfix/mysql-aliases.cf

virtual_alias_maps =
     hash:/usr/local/mailman/data/virtual-mailman,
     mysql:/etc/postfix/mysql-virtual.cf
(Questo aggiunge a postfix il supporto per gli alias del mailman. Ovviamente è possibile
usare le tabelle mysql per fare ciò, ma è scomodo farlo a mano Poi, se non si stanno usando domini
virtuali, aggiungere la mappa degli alias virtuali a postfix può causare problemi.)

Ora si dovrebbe essere in grado di configurare mailing list per ogni dominio sulla propria macchina. Come ultima considerazione riguardo a questo, assicurarsi di lanciare tutti i comandi di mailman (su mailman) o altrimenti i permessi saranno sbagliati e bisognerà risistemarli. Leggere la documentazione di mailman per ulteriori informazioni su come configurare e gestire liste con mailman.

13.  Filtraggio dei contenuti e Anti-Virus

Riguardo al filtraggio dei contenuti e agli antivirus, consultare la Guida al filtraggio della posta elettronica con Gentoo.

14.  Iniziare a lavorare

Ora che tutto è configurato, modificare /etc/postfix/master.cf e togliere la modalità prolissa per un uso di produzione. Probabilmente si vorranno aggiungere dei servizi alle proprie routine di avvio per assicurarsi che tutto riparta ad ogni riavvio. Assicurarsi di aggiungere tutti i servizi in uso - apache, mysql, saslauthd, postfix, courier-imapd, courier-imapd-ssl, courier-pop3d e courier-pop3d-ssl sono tutte le modalità di accesso che si vorranno rendere disponibili ai propri utenti. Generalmente l'autore di questo documento ha tutti i servizi abilitati.

Codice 14.1: Iniziare a lavorare

# postfix reload
# rc-update add $servizio default

Buon divertimento!

15.  Risoluzione dei problemi

Introduzione

Risoluzione dei problemi: Questa è una piccola guida alla risoluzionedei problemi sulla configurazione d'installazione descritta in precedenza. Non è completa, ma è concepita come punto di partenza per capire i problemi. Quando si ha una configurazione complicata come questa, è imperativo scomporre il problema nei componenti più piccoli che non stanno funzionando. In generale si fa questa operazione seguendo determinati passi. Iniziare dalla base del sistema e salire, scartando lungo la strada i componenti che funzionano finchè non si scopre quale componente ha il problema.

Passo 1: Controllare i propri file di configurazione.

Gli errori di battitura sono micidiali, specialmente quando si ha a che fare con sistemi di autenticazione. Controllare le proprie configurazioni e il database mailsql per errori di battitura. È possibile fare tutto il debug desiderato, ma se non vengono passate avanti e indietro le giuste informazioni al proprio sistema di posta, lui non funzionerà. Se si apportano un cambiamento ad un file di configurazione per un servizio, assicurarsi di riavviare quel servizio così da fargli accettare i cambiamenti.

Codice 15.1: Come riavviare un servizio

# /etc/init.d/$servizio restart

Passo 2: Sono in esecuzione tutti i servizi necessari?

Se non sono in esecuzione, avviarli. È estremamente difficile fare il debug di un servizio che non è in esecuzione. Qualche volta un servizio sembrerà avviato ma non sarà funzionante. Qualche volta, quando è usata una configurazione errata o una trasmissione corrotta entra in un componente, il servizio si bloccherà e manterrà la porta occupata ad un altro processo. Qualche volta è possibi le scoprire queste cose con netstat. Oppure riavviare la macchine. Questo toglierà ogni servizio bloccato. Poi si può riprovare.

Codice 15.2: Controllare lo stato di un servizio

# /etc/init.d/$servizio status
# netstat -a | grep $servizio (o $porta)

Passo 3: Tutti i servizi stanno usando configurazioni correnti?

Se recentemente sono stati fatti dei cambiamenti ad un file di configurazione, riavviare quel servizio per assicurarsi che usi la versione corrente. Qualche componente mostrerà la configurazione attuale, come postfix.

Codice 15.3: Alcuni servizi possono cambiare la propria configurazione

# apache2ctl fullstatus (è necessario che sia installato lynx)
# apache2ctl configtest (controlla la correttezza della configurazione)
# postconf -n (dirà esattamente quali parametri sta usando postfix)
# /etc/init.d/$service restart

Passo 4: Controllare i log.

Bisogna avere ben chiaro che i log sono veramente importanti. Qualche volta è utile far fallire un'operazione di nuovo poi controllare i log così che il messaggio d'errore sia giusto in fondo (o in cima a seconda del proprio logger) invece che nascosto in mezzo. Controllare se c'è qualche informazione nei propri log che può aiutare a diagnosticare il problema, o almeno, capire quale componente ha il problema.

Codice 15.4: Controllare i log

# kill -USR1 `ps -C metalog -o pid=`(per disattivare il buffering di metalog)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache2/error_log

Potrebbero tornare utili i parametri debug_peer nel main.cf. Impostarli aumenterà i log di output più della modalità prolissa.

Codice 15.5: Aggiungere il supporto debug_peer

# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.nome.dominio
(Decommentare anche uno dei comandi del debugger suggeriti.)

Passo 5: Parlare ai servizi stessi.

SMTP, IMAP e POP3 rispondono tutti a sessioni telnet, come è stato visto precedentemente quando è stata verificata la configurazione di postfix. Qualche volta è utile aprire una sessione telnet al servizio stesso e vedere cosa succede.

Codice 15.6: Connettersi ad un servizio con telnet

# telnet localhost $port
(SMTP è 25, IMAP è 143, POP3 è 110. Si dovrebbe ricevere almeno una
stringa OK, che permetterè di sapere che il servizio è in esecuzione e pronto a
rispondere alle richieste.)

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.

Passo 6: Qualche volta solo le grandi armi daranno le informazioni necessarie: strace.

Si dovrebbe averlo installato. Questo è uno strumento inestimabile per fare debugging del software. È possibile avviare comandi dalla riga di comando con strace e controllare tutte le chiamate di sistema che fanno. Spesso mostra un'enorme quantità di informazioni, perciò si potrà sia controllarlo in tempo reale ritentando una transazione fallita con il sistema di posta, o scaricare l'output in un file per rileggerlo in seguito.

Codice 15.7: Usare strace

# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`

Passo 7: Ricercare

Una volta che si hanno le informazioni, è possibile diagnosticare e correggere il problema. Altrimenti, probabilmente bisognerà scavare nella rete per informazioni che aiuteranno a sistemarlo. Qui c'è una lista di siti da controllare per cercare riguardo a problemi già risolti. C'è anche una guida veramente buona per impostare l'autenticazione smtp, e che contiene grandi idee di debugging.



Stampa

Aggiornato il 24 luglio 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Questo documento illustra come creare un sistema di mailhosting virtuale basato su postfix, mysql, courier-imap, e cyrus-sasl.

Ken Nowack
Autore

Ezra Gorman
Autore

Zack Gilburd
Redazione

Scygro
Redazione

Sven Vermeulen
Redazione

Joshua Saddler
Redazione

Paolo Gabrielli
Traduzione

Cristiano Chiucchiolo
Traduzione

Davide Cendron
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.