Guida al Virtual Mailhosting System con Postfix Ken Nowack Ezra Gorman Zack Gilburd Scygro Paolo Gabrielli Cristiano Chiucchiolo Questo documento illustra come creare un sistema di virtual mailhosting basato su postfix, mysql, courier-imap, e cyrus-sasl. 1.0.25 2006-01-07 Introduzione

Per la maggior parte degli utenti gentoo, un semplice client di posta e fetchmail sono sufficenti. Comunque, se sul vostro sistema ospitate un dominio, avrete bisogno di un MTA (Mail Transfer Agent) completo. E se state ospitando diversi domini, allora sicuramente avrete bisogno di qualcosa di più robusto per gestire tutte le email dei vostri utenti. Il sistema che vi proponiamo è 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 avete due utenti su domini differenti che vogliono lo stesso nome utente? Se fornite accesso imap e autenticazione smtp, come combinare i diversi demoni di autenticazione in un sistema unico? Come fate a fornire sicurezza ai numerosi componenti che comprende il sistema? Come gestite tutto?

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

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

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

Assicuratevi di abilitare le seguenti variabili USE dentro a /etc/make.conf prima di compilare i pacchetti: USE="mysql imap libwww maildir sasl ssl". Altrimenti molto probabilmente dovrete 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.

Questo howto è stato scritto per postfix-2.0.x. Se state usando una versione di postfix < 2 alcune variabili in questo documento saranno diverse. Vi raccomandiamo di aggiornare il vostro postfix. Anche altri pacchetti in questo howto sono sensibili alla versione. Per problemi riguardo questo vi avvertiamo di leggere la documentazione inclusa nei pacchetti. Questo documento usa apache-1.3-x. Apache è stato marcato stabile nel portage. Comunque ci sono ancora delle problematiche sull'integrazione con il php. Fino a quando il supporto php su apache-2.0.x non è marcato stabile, questa guida continuerà ad usare la versione 1.3.x. Avete bisogno di un nome di dominio per far girare un server di posta pubblico o almeno di un MX record per un dominio. Idealmente avrete bisogno di avere il controllo di almeno due domini per avvantaggiarvi delle nuove funzionalità di dominio virtuali. Assicuratevi che il file /etc/hostname sia configurato con il giusto hostname per il vostro server di posta. Verificate che l'hostname sia settato correttamente con il comando hostname. Verificate anche che non ci siano voci che sono in conflitto nel file /etc/hosts. Vi raccomandiamo di leggere per intero questo documento e di familiarizzarvi con tutti i passi prima di provare ad installare. Se avete dei problemi con uno di questi passi, controllate 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 avete bisogno di una interfaccia web, potete saltare la sezione che riguarda squirrelmail.
Le basi del Postfix
# emerge postfix
Verificate di non avere installato nessun altro MTA, come ssmtp, exim o qmail, o avrete sicuramente GRANDI problemi.

Una volta installato postfix, è tempo di configurarlo. Cambiate le seguenti opzioni nel file /etc/postfix/main.cf:

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

Poi cambiate le seguenti opzioni dentro a /etc/postfix/master.cf. Questo attiverà l'output verboso per poter fare debugging:

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

Poi, editate /etc/mail/aliases per aggiungere i vostri alias locali. Ci dovrebbe essere almeno un alias per l'utente root così: root: vostro@indirizzo.email.

# /usr/bin/newaliases 
(Questo installerà i nuovi alias. Dovete fare soltanto questo)
(quando aggiornate o installate gli alias.)

# /etc/init.d/postfix start

Ora che postfix sta girando, avviate il vostro client di posta favorito e mandatevi una mail. Io uso mutt per tutta la posta da console. Verificate che postfix consegni la posta agli utenti locali, e una volta fatto, passiamo al prossimo passo.

Raccomando fortemente che voi verifichiate che questa configurazione di base del postfix sia funzionante prima di andare al prossimo passo dell'howto.
Courier-imap
# emerge courier-imap courier-authlib
# cd /etc/courier-imap 
(Se volete usare le capacità ssl di courier-imap o pop3, avrete bisogno di creare certificati per questo scopo. Questo passo è raccomandato, ma se non volete usare ssl, potete saltarlo.)

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

# mkpop3dcert
# mkimapdcert
# /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

Avviate il vostro client di posta preferito e assicuratevi che tutte le connessioni che avete avviato funzionino per ricevere e mandare posta. Ora che le cose di base funzionano, stiamo per fare diverse cose contemporaneamente per avere il resto del sistema funzionante. Ancora, verificate che funzionino tutte le cose che abbiamo già installato prima di andare avanti.

Cyrus-sasl

Ora stiamo per installare cyrus-sasl. Sasl servirà per passare a pam le vostre variabili di autenticazione, le quali verranno poi passate al mysql per autenticare gli utenti smtp. Per questo howto, non proveremo a verificare che sasl funzioni finchè mysql non sarà configurato e conterrà un utente di prova. Questo è giusto visto che ci autenticheremo tramite mysql alla fine.

# emerge cyrus-sasl

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

# 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
Certificati SSL per Postfix e Apache

Ora andremo a fare un set di certificati ssl per postfix e apache.

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

Cambiate i seguenti valori di default con quelli per il vostro dominio:

countryName_default
stateOrProvinceName_default 
localityName_default
O.organization_default
commonName_default
emailAddress_default.

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

# cd misc
# nano -w CA.pl 
(Dobbiamo aggiungere -nodes al codice # create a certificate (crea un certificato n.d.T.) e #create a certificate request (crea una richiesta di certificato n.d.T.) per avere i nostri nuovi certificati ssl caricati senza una password. Altrimenti, quando farete il reboot i vostri certificati ssl non saranno disponibili.)

# create a certificate (crea un certificato n.d.T.)
system ("$REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS");

# create a certificate request (crea una richiesta di certificato n.d.T.)
system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");

# ./CA.pl -newca
# ./CA.pl -newreq
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newreq.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix 
(Ora faremo 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 lasciamo qui i certificati ottenuti. Li installeremo dopo aver installato Apache.)
Aggiungere il supporto SSL e SASL a Postfix

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

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

smtpd_sasl_auth_enable = yes
smtpd_sasl2_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 trovate 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. Assicuratevi di lasciarlo in bianco o i vostri nomi utente saranno storpiati dal 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_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 potrete riabilitarlo se lo vorrete.)

# postfix reload

Ora che andremo a verificare che le configurazioni che abbiamo aggiunto sono state accettate da postfix.

# 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

Verificate che le righe AUTH e STARTTLS sopra, ora appaiano nella vostra 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 abbiamo configurato. Così andremo avanti e configureremo mysql per contenere tutte le informazioni di autenticazione e dei domini virtuali.

MySQL

Ora stiamo per installare e configurare MySQL. Avrete bisogno del file di dump genericmailsql.sql per questo passo.

# emerge mysql

# /usr/sbin/mysql_install_db 
(Dopo aver eseguito questo comando seguite le indicazioni sullo schermo per aggiungere una password di root con mysql, non mysqladmin, altrimenti il vostro 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 vostro nuovo database ha valori di default e tabelle configurate per due domini. Le seguenti tabelle sono incluse:

  • alias - alias locali e informazioni alias di mailman.
  • relocated - mappe riallocate di indirizzi email di utenti
  • transport - informazioni di default per il trasporto di mail per tutti i domini che ospitate
  • users - informazioni sugli account di tutti gli utenti
  • virtual - mappe degli alias delle mail dei domini virtuali
 id   alias    destination
 1    root     foo@bar.com
 2  postmaster foo@bar.com
 id email            clear     name     uid     gid     homedir     maildir                                quota  postfix
 10 foo@virt-bar.org $password realname virtid  virtid  /home/vmail /home/vmail/virt-bar.org/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.

 id   domain       destination
 1    bar.com      local:
 2    virt-bar.org virtual:
 id   email            destination
 3   root@virt-bar.org other@email.address
Apache e phpMyAdmin

Ora cofigureremo apache e aggiungeremo un'interfaccia per interagire con il database più facilmente.

# emerge apache mod_php phpmyadmin

Ci sono una moltitudine di guide su come configurare apache con il php. Come questa: http://www.linuxguruz.org/z.php?id=31. Ci sono anche numerosi post su http://forums.gentoo.org che dettagliano come risolvere problemi con l'installazione (cercate 'apache php'). Così, come detto, non copriremo qui questo problema. Installate e configurate apache e php, poi continuate con questo howto. Ora una parola ai saggi: usate .htaccess nella directory in cui metterete phpmyadmin. Se non lo fate, i motori di ricerca arriveranno e idicizzeranno la pagina così ogni persona sarà in grado di trovare la vostra pagina phpmyadmin tramite google e saranno in grado di apportare cambiamenti al vostro database come vogliono il che NON E' COSA BUONA!. Ci sono molti howto sull'argomento incluso: http://www.csoft.net/docs/micro/htaccess.html.en.

Ora installeremo i certificati Apache che abbiamo creato prima. 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
# cp /etc/ssl/misc/new.cert.cert /etc/apache/conf/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache/conf/ssl/
# nano -w /etc/apache/conf/vhosts/ssl.default-vhost.conf
(Cambiate i seguenti parametri)

ServerName host.nome.dominio
ServerAdmin vostro@indirizzo.email
SSLCertificateFile /etc/apache/conf/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache/conf/ssl/new.cert.key

# /etc/init.d/apache restart
Se avete una installazione apache preesistente, dovrete fare un reboot per installare i nuovi certificati. Controllate i vostri log per verificare che apache si è riavviato correttamente.

Ora, configuriamo phpMyAdmin.

# nano -w /var/www/localhost/htdocs/phpmyadmin/config.inc.php
(Cambiate i seguenti paramentri)

$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 

Ora aprite la pagina del phpmyadmin e sfogliate le tabelle. Vorrete a questo punto aggiungere i vostri alias locali, editare le vostre tabelle utenti per aggiungere un utente di prova, e modificare la tabella trasport per aggiungere informazioni sul vostro dominio. I valori di default forniti con il file di dump dovrebbero essere sufficenti a guidarvi su cosa vogliono e dove vanno le variabili. Assicuratevi di inserire nel database informazioni accurate. Per esempio, assicuratevi 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 assicurarvi che la directory .maildir venga creata.

L'utente vmail

A questo punto potreste meravigliarvi di quale utente e directory usare per gli utenti di posta virtuali. Configuriamoli.

# adduser -d /home/vmail -s /bin/false vmail
# uid=`cat /etc/passwd | grep vmail | cut -f 3 -d :`
# groupadd -g $uid vmail
# mkdir /home/vmail
# chown vmail: /home/vmail

Ora quando configurerete account di posta virtuale, userete uid, gid, e directory home dell'utente vmail. Quando configurerete account locali, userete uid, gid, e directory home di quelli. Avevamo intenzione di creare una pagina di amministrazione in php per configurare il tutto ma non l'abbiamo ancora fatto visto che il phpmyadmin generalmente funziona bene per noi.

Configurare l'Autenticazione con MySQL e i vhost

Ora riconfigureremo la nostra autenticazione per usare il database mailsql con courier-imap e postfix. In ognuno degli esempi seguenti, sostituite $password con la password che avete dato all'utente mailsql.

# 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 
(Assicuratevi di scommentare questa riga, visto che memorizziamo 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

Abbiamo quasi finito, lo giuro! Ora, configuriamo il resto dei file di configurazione del postfix necessari per interagire con il database per tutte le necessità di trasporto.

# 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
# 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
# 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
# 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
# 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
# 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
# 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, modificate /etc/postfix/main.cf un'altra volta.

# nano -w /etc/postfix/main.cf
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
virtual_mailbox_domains =
virt-bar.com,
$other-virtual-domain.com

virtual_minimum_uid = 1000
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
virtual_uid_maps = static: $vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit = 

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

# 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 sono ancora incluse, se le volete usare.

Vi raccomandiamo di leggere il file VIRTUAL_README incluso nella documentazione di postfix per ulteriori informazioni.
# postfix reload

Ora, se tutto è andato bene, dovreste 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. Suggerisco caldamente che voi verifichiate che tutto stia funzionando a questo punto. Se incorrete in problemi (con tutte le cose che farete con questo setup, probabilmente ne avrete) controllate la sezione di risoluzione dei problemi in questo howto.

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
(Modificate i settaggi Organization, Server, e Folder per squirrelmail. Ora dovreste essere in grado di fare il login in squirrelmail, anche qui - con il vostro indirizzo email completo, e usare i vostri nuovi settaggi della webmail.)
Mailman

Ultimo passo: mailman. L'ultima versione di mailman ha un supporto per i domini virtuali molto interessante, per questo lo uso, senza dimenticare che è un grande pacchetto. Per installarlo e farlo funzionare correttamente con i domini virtuali c'è bisogno di un po' di modifiche. Raccomando sempre caldamente di leggere tutta la documentazione di mailman, compreso README.POSTFIX.gz, per capire bene cosa stia succendendo.

Notate anche che la versione corrente di mailman viene installata in /usr/local/mailman. Se siete come me e volete cambiare la directory dove viene installato, basta che cambiate la variabile INSTALLDIR nel file di ebuild.

# nano -w /usr/portage/net-mail/mailman/mailman-$ver.ebuild
# emerge mailman
(Anche questo pacchetto è mascherato, così dovrete fare l'unmask o fare emerge con un path esplicito all'ebuild. Una volta installato, seguite le istruzioni contenute in README.gentoo.gz, *tranne* aggiungere i vostri aliase in /etc/mail/aliases. Collegheremo invece l'intero db degli alias nel postfix.)

# zless /usr/share/doc/mailman-$ver/README.gentoo.gz
#  nano -w /var/mailman/Mailman/Defaults.py
(Cambiate i valori qui sotto per rispecchiare il vostro dominio primario, quelli virtuali saranno configurati in seguito.)
DEFAULT_EMAIL_HOST = 'dominio.com'
DEFAULT_URL_HOST = 'www.dominio.com'
# nano -w /var/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 vostri domini virtuali.)
(Una volta terminato, aggiungete la vostra prima lista.)

# su mailman
# cd ~
# bin/newlist 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 essere specificate con lo stile di nomi lista@dominio.com)
# bin/genaliases
(Ora che i vostri alias sono stati generati, verificate che siano stati aggiunti con successo.)

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

# /etc/init.d/mailman start
# rc-update add mailman default
(Per far avviare mailman immediatamente e ad ogni riavvio.)
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Leggete README.POSTFIX.gz per ulteriori dettagli su questo.)

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

virtual_alias_maps =
	hash:/var/mailman/data/virtual-mailman,
	mysql:/etc/postfix/mysql-virtual.cf
(Questo aggiunge a postfix il supporto per gli alias del mailman. Ovviamente potete usare le tabelle mysql per fare ciò, ma odio farlo a mano. Poi, se non state usando domini virtuali, aggiungere la mappa degli alias virtuali a postfix può causare problemi, siete avvisati.)

Ora dovreste essere in grado di configurare mailing list per ogni dominio sulla vostra macchina. Ultime considerazione su questo, assicuratevi di lanciare tutti i comandi di mailman (su mailman) o altrimenti i permessi saranno sbagliati e dovrete aggiustarli. Leggete la documentazione di mailman per ulteriori informazioni su come configurare e gestire liste con mailman.

Filtraggio dei contenuti e Anti-Virus

Riguardo al filtraggio dei contenuti e agli antivirus, consultate la nostra Mail Filtering Gateway Guide

Iniziare a lavorare

Ok, avete tutto configurato, modificate /etc/postfix/master.cf e togliete la modalità verbosa per un uso di produzione. Probabilmente vorrete aggiungere dei servizi alle vostre routine di avvio per assicurarvi che tutto riparta ad ogni riavvio. Assicuratevi di aggiungere tutti i servizi che state usando - apache, mysql, saslauthd, postfix, courier-imapd, courier-imapd-ssl, courier-pop3d e courier-pop3d-ssl sono tutte le modalità di accesso che vorrete rendere disponibili ai vostri utenti. Generalmente io ho tutti i servizi abilitati.

# postfix reload
# rc-update add $servizio default

Buon divertimento!

Risoluzione dei problemi
Introduzione

Risoluzione dei problemi: Questa è una piccola guida alla risoluzione dei problemi sulla configurazione d'installazione che abbiamo descritto sopra. Non è completa, ma è concepita come punto di partenza per capire i problemi. Quando si ha una configurazione complicata come questa, è imperativo che voi scomponiate il problema nei componenti più piccoli che non stanno funzionando. In generale faccio in questo modo seguendo qualche passo. Iniziate dalla base del sistema e salite, scartando lungo la strada i componenti che funzionano finchè non scoprite quale componente ha il problema.

Passo 1: Controllate i vostri file di configurazione.

Gli errori di battitura sono micidiali, specialmente quando si ha a che fare con sistemi di autenticazione. Controllate le vostre configurazioni e il database mailsql per errori di battitura. Potete fare tutto il debug che volete, ma se non passate avanti e indietro le giuste informazioni al vostro sistema di posta, lui non funzionerà. Se apportate un cambiamento ad un file di configurazione per un servizio, assicuratevi di riavviare quel servizio così da fargli accettare i cambiamenti.

# /etc/init.d/service restart
Passo 2: Sono in esecuzione tutti i servizi necessari?

Se non sono in esecuzione, avviateli. E' 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 potete scoprire queste cose con netstat. Oppure riavviare la macchine. Questo toglierà ogni servizio bloccato. Poi potete riprovare.

# /etc/init.d/$servizio status
# netstat -a | grep $servizio (o $porta)
Passo 3: Tutti i servizi stanno usando configurazioni correnti?

Se avete recentemente fatto cambiamenti ad un file di configurazione, riavvite quel servizio per assicurarvi che usi la versione corrente. Qualche componente vi mostrerà la configurazione attuale, come postfix.

# apachectl fullstatus (è necessario lynx installato)
# apachectl configtest (controlla la configurazione)
# postconf -n (vi dirà esattamente quali parametri sta usando postfix)
# /etc/init.d/$service restart
Passo 4: Controllare i log.

Ripetete dopo di me, i log sono miei amici. Qualche volta è utile far fallire un'operazione di nuovo poi controllare i log così che il messaggio d'errore è giusto in fondo (o in cima a seconda del vostro logger) invece che nascosto in mezzo. Controllate se c'è qualche informazione nei vostri log che può aiutarvi a diagnosticare il problema, o almeno, capire quale componente ha il problema.

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

Potrete anche trovare utili i parametri debug_peer nel main.cf. Settarli aumenterà i log di output più della modalità verbosa.

# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.nome.dominio
(Scommentate anche uno dei comandi del debugger suggeriti.)
Passo 5: Parlate ai servizi stessi.

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

# telnet localhost $port
(SMTP è 25, IMAP è 143, POP3 è 110. Dovreste ricevere almento una stringa OK, che vi 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 vi daranno le informazioni di cui avete bisogno: strace.

Dovreste averlo installato. Questo è un attrezzo inestimabile per fare debugging del software. Potete avviare comandi dalla riga di comando con strace e controllare tutte le chiamate di sistema che fanno. Spesso vi mostra un'enorme quantità di informazioni, così che potrete sia controllare in tempo reale come ritentate una transazione fallita, o scaricare l'output in un file per rileggerlo in seguito.

# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`
Passo 7: Ricercare

Una volta che avete le informazioni, potete diagnosticare e correggere il problema, grande! Altrimenti, probabilmente dovrete scavare sulla rete per informazioni che vi aiuteranno a sistemarlo. Qui c'è una lista di siti che potete controllare per cercare riguardo problemi già risolti. C'è anche un howto veramente buono sul settare l'autenticazione smtp, e che contiene grandi idee di debugging.

  • http://forums.gentoo.org/ - Grandi forum per gli utenti gentoo
  • http://bugs.gentoo.org/ - Database di bug per gentoo - grande posto per cercare errori specifici
  • http://postfix.state-of-mind.de/ - Howto sull'autenticazione smtp (smtp-auth howto)
  • http://marc.theaimsgroup.com/?l=postfix-users - Mailing list sul Postfix - potete fare ricerche
  • http://sourceforge.net/mailarchive/forum.php?forum_id=6705 - Archivio della mailing list del Courier-imap - non potete fare ricerche
  • http://www.google.com/ - Se tutto fallisce, c'è sempre google, che non ha mai fallito con me
  • Passo anche tanto tempo su irc.freenode.net #gentoo. Irc è un grande posto dove andare per cercare aiuto.