Mise en place d'un système de messagerie multidomaine avec postfix
1.
Introduction
Pour la plupart des utilisateurs Gentoo, un client de courrier électronique et
fetchmail feront l'affaire. Cependant, si vous hébergez un nom de domaine sur
votre système, vous aurez besoin d'un MTA (Agent de Transfert du Courrier)
complet. Et si vous hébergez plusieurs domaines, alors vous avez certainement
besoin de quelque chose d'assez robuste pour prendre en charge tous les
courriels de vos utilisateurs. Le système décrit dans cet article propose une
solution élégante à ce problème.
Un système de messagerie multidomaine doit être capable de prendre en charge
les courriels de nombreux utilisateurs répartis sur de nombreux domaines, via
plusieurs interfaces. Nous allons présenter quelques problèmes qui doivent être
résolus. Par exemple, que faire si vous avez deux utilisateurs sur des domaines
différents qui veulent le même nom ? Si vous fournissez un accès IMAP et
SMTP-auth, comment combiner les divers systèmes d'authentification en un
seul ? Comment allez-vous sécuriser les différents composants du
système ? Comment allez-vous tout gérer ?
Il existe de nombreuses façons différentes de mettre en place un système de
messagerie multidomaine. Selon vos besoins, il existe peut-être une meilleure
solution pour vous. Documentez-vous sur http://www.qmail.org/ et
http://www.exim.org/ qui sont des solutions alternatives.
Dans notre configuration, nous utiliserons les paquets suivants : apache,
courier-imap, courier-authlib, postfix, mod_php, phpmyadmin, squirrelmail,
cyrus-sasl, mysql, php et mailman.
Avant d'installer ces paquets, assurez-vous que les options suivantes de USE se
trouvent dans votre fichier /etc/make.conf : USE="mysql
imap libwww maildir sasl ssl". Sinon, vous risquez de devoir recompiler
certains paquets pour activer le support de ces protocoles. Il est également
recommandé de désactiver les autres options liées au courrier et au réseau,
comme ipv6.
Important :
Vous devez avoir un nom de domaine pour pouvoir faire un serveur public de
messagerie, ou, au moins, un enregistrement de type MX pour un domaine. Pour
utiliser pleinement votre serveur multidomaine, vous devrez gérer au moins deux
domaines.
|
Important :
Assurez-vous que le fichier /etc/conf.d/hostname contient bien le
bon nom pour votre serveur de messagerie. Si vous modifez ce fichier, exécutez
la commande /etc/init.d/hostname restart pour appliquer vos changements.
Vérifiez également que votre nom de domaine est réglé correctement avec la
commande hostname. Enfin, assurez-vous que le fichier
/etc/hosts ne contient pas d'entrée pouvant créer des conflits.
|
Note :
Je vous recommande de lire ce document dans son intégralité et de vous
familiariser avec la marche à suivre avant de vous lancer dans l'installation.
Si vous avez des problèmes pendant une étape, consultez la section dépannage à la fin de ce document. Notez
également que tous les paquets ne sont pas requis, cette installation est très
flexible. Par exemple si vous ne voulez pas d'interface Web vous pouvez sauter
la section squirrelmail.
|
2.
Postfix, la base
Exemple de code 2.1 : Installation de postfix |
# emerge postfix
|
Attention :
Assurez-vous de ne pas avoir installé d'autre MTA, comme ssmtp, exim ou
netqmail, car sinon vous vous exposez à de GROS problèmes.
|
Une fois postfix installé, il est temps de le configurer. Changez les options
suivantes dans /etc/postfix/main.cf. Pensez bien à remplacer les
$variables par vos propres noms.
Exemple de code 2.2 : /etc/postfix/main.cf |
myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
|
Ensuite modifiez /etc/postfix/master.cf de la façon suivante. Cela
activera le mode bavard pour faciliter le débogage :
Exemple de code 2.3 : /etc/postfix/master.cf |
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
#
==========================================================================
smtp inet n - n - - smtpd -v
|
Ensuite, éditez /etc/mail/aliases pour ajouter vos alias locaux.
Il devrait au moins y avoir un alias pour root :
root: votre@adresse.ici.
Exemple de code 2.4 : Premier lancement de postfix |
# /usr/bin/newaliases
# /etc/init.d/postfix start
|
Maintenant que postfix tourne, lancez votre client de courrier électronique
préféré et envoyez-vous un courrier. Vérifiez que postfix délivre les courriers
aux utilisateurs système. Une fois cela fait, nous pouvons passer à l'étape
suivante.
Note :
Je vous recommande vivement de vérifier que cette configuration postfix de base
fonctionne correctement avant de continuer.
|
3.
Courier-imap
Exemple de code 3.1 : Installation de courier-imap et de courier-authlib |
# emerge courier-imap courier-authlib
|
Exemple de code 3.2 : Configuration de courier-imap |
# cd /etc/courier-imap
# nano -w pop3d.cnf
# nano -w imapd.cnf
# mkpop3dcert
# mkimapdcert
|
Exemple de code 3.3 : Lancement des services de courrier |
# /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
|
Lancez votre client de courrier électronique favori et vérifiez que tous les
services que vous avez lancés répondent en envoyant et réceptionnant des
courriels. Bien sûr, vous ne pourrez vous identifier à aucun service parce que
l'authentification n'a pas encore été configurée, mais il est sage de vérifier
si les connexions en elles-même fonctionnent.
Maintenant que le système de base fonctionne, nous allons procéder à plusieurs
étapes d'un seul coup pour installer le reste du système. Encore une fois,
soyez certain que ce que nous avons déjà installé fonctionne correctement avant
de continuer.
4.
Cyrus-sasl
Installons à présent cyrus-sasl. Sasl sert à passer vos variables
d'authentification à courier-auth qui va à son tour les passer à mysql pour
vérifier l'authentification des utilisateurs smtp. Dans ce guide, nous ne
testerons pas sasl tant que mysql ne sera pas installé et ne contiendra pas un
utilisateur pour fins de tests. Ce n'est pas grave car, de toute façon, nous
utiliserons mysql pour l'authentification à la fin.
Exemple de code 4.1 : Installer et configurer cyrus-sasl |
# emerge cyrus-sasl
|
Ensuite, éditez /etc/sasl2/smtpd.conf.
Exemple de code 4.2 : Lancement de 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.
Certificats SSL pour Postfix et Apache
Nous allons à présent créer un jeu de certificats pour postfix et apache.
Exemple de code 5.1 : Création des certificats de sécurité |
# cd /etc/ssl/
# nano -w openssl.cnf
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.
# cd misc
# ./CA.pl -newreq-nodes
# ./CA.pl -newca
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newkey.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
# 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
|
6.
Ajouter le support SSL et SASL à Postfix
Maintenant, éditez la configuration de postfix pour l'informer de votre volonté
d'utiliser sasl et ssl. Ajoutez les paramètres suivants à la fin du fichier, là
où ils seront faciles à trouver.
Exemple de code 6.1 : /etc/postfix/main.cf |
# 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 =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
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/newkey.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
# postfix reload
|
Maintenant, vérifions que nos modifications ont été prises en compte par
postfix. Pour cela, nous allons utiliser telnet (fourni par exemple par
net-misc/netkit-telnetd) bien que vous puissiez utiliser nc
(fourni par net-analyzer/netcat) :
Exemple de code 6.2 : Vérification du support sasl et ssl |
# 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
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
^]
telnet> quit
|
Vérifiez que les lignes AUTH et STARTTLS sont maintenant bien présentes. Comme
je l'ai déjà dit, actuellement AUTH ne marchera pas. C'est à cause du fait que
sasl utilise sa base sasldb (que nous n'avons pas encore configurée) au lieu du
fichier de mots de passe du système pour procéder à l'identification, pour une
raison inconnue. Nous allons donc continuer et installer mysql qui contiendra
toutes les informations d'authentification et de domaine virtuel.
7.
L'utilisateur vmail
Avant de paramétrer notre environnement virtuel d'hébergement de courriels,
nous allons créer un utilisateur fonctionnel sous lequel vont tourner les
boîtes aux lettres virtuelles. Pour plus de clarté, nous l'appellerons
vmail :
Exemple de code 7.1 : Ajout de l'utilisateur vmail |
# adduser -d /home/vmail -s /bin/false -m vmail
|
À présent, le compte vmail est configuré. Vous pouvez créer plusieurs comptes
si vous le voulez (pour garder une certaine organisation dans votre ensemble de
comptes virtuels). L'identifiant de l'utilisateur, l'identifiant du groupe et
les répertoires personnels sont référencés dans les tables MySQL.
En dehors du compte utilisateur, nous avons également besoin de créer
l'emplacement réservé aux boîtes aux lettres :
Exemple de code 7.2 : Création des boîtes aux lettres |
# 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
Il est temps d'installer et de configurer MySQL. Vous aurez besoin du fichier
genericmailsql.sql pour
cette étape.
Exemple de code 8.1 : Installation et configuration de MySQL |
# emerge mysql
# /usr/bin/mysql_install_db
# /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
# mysql -u mailsql -p mailsql
|
Votre nouvelle base de données a des valeurs par défaut et des tables
configurées pour deux domaines. Les tables suivantes sont incluses :
- alias - Alias locaux et alias pour mailman.
- relocated - Liste des adresses déplacées.
-
transport - Méthode de transport par défaut pour chaque domaine hébergé.
- users - Les comptes utilisateurs.
- virtual - Liste des alias pour les domaines virtuels.
Exemple de code 8.2 : Exemple de table alias |
id alias destination
1 root foo@bar.com
2 postmaster foo@bar.com
|
Exemple de code 8.3 : Exemple de table user |
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
|
Les valeurs uid et gid de virtid doivent être les uid et gid de
l'utilisateur et du groupe vmail.
Exemple de code 8.4 : Exemple de table transport |
id domain destination
1 bar.com local:
2 virt-domain.com virtual:
|
Exemple de code 8.5 : Exemple de table virtual |
id email destination
3 root@virt-domain.com other@email.address
|
9.
Apache et phpMyAdmin
Nous allons à présent mettre en place apache afin d'installer une interface
pour interagir plus facilement avec la base de données.
Exemple de code 9.1 : Installation d'apache et de phpmyadmin |
# emerge apache phpmyadmin
|
Il existe une ribambelle de guides qui expliquent comment installer apache avec
php, y compris les guides prévenant du projet PHP de
Gentoo. Il y a aussi de nombreux articles sur
http://forums.gentoo.org/ qui détaillent comment résoudre les
problèmes d'installation. Ceci étant dit, je ne vais pas en parler dans ce
guide. Installez apache et php, puis continuez à suivre ce guide. En fait juste
un mot : mettez un .htaccess pour protéger le répertoire où réside
phpmyadmin. Si vous ne le faites pas, les moteurs de recherche vont y accéder
et indexer vos pages, ce qui veux dire que n'importe qui pourra venir modifier
les données de votre base de données, ce qui est à proscrire. Il existe de
nombreux guides sur le sujet, notamment :
http://www.csoft.net/docs/micro/htaccess.html.en.
Nous allons à présent installer les certificats créés auparavant. Voici les
directives Apache-SSL dont vous aurez besoin pour utiliser les
certificats :
- SSLCertificateFile /path/to/certs/new.cert.cert
- SSLCertificateKeyFile /path/to/certs/new.cert.key
Exemple de code 9.2 : Installation des certificats pour Apache SSL |
# 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
# cp 00_default_vhost.conf ssl-vhost.conf
# nano -w ssl-vhost.conf
NameVirtualHost host.domain.name:443
<VirtualHost host.domain.name:443>
ServerName host.domain.name
ServerAdmin your@email.address
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
# /etc/init.d/apache2 restart
|
Ensuite, configurez phpMyAdmin.
Exemple de code 9.3 : Configuration de phpMyAdmin |
# cd /var/www/localhost/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
# nano -w config.inc.php
$cfg['blowfish_secret'] = 'unmotdepassevraimenttrèssecret';
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname
$cfg['Servers'][$i]['controluser'] = 'mailsql'; // MySQL control user settings
// (this user must have read-only
$cfg['Servers'][$i]['controlpass'] = '$password'; // access to the "mysql/user"
// and "mysql/db" tables)
$cfg['Servers'][$i]['user'] = 'mailsql'; // MySQL user
$cfg['Servers'][$i]['password'] = '$password'; // MySQL password
|
Maintenant, entrez sur la page de phpmyadmin et naviguez dans les tables. Vous
devez ajouter vos alias locaux, éditer la table 'user' pour ajouter un
utilisateur de test et modifier la table « transport » pour ajouter
des informations sur vos domaines. Les valeurs fournies par défaut devraient
être suffisantes pour vous guider vers les bonnes valeurs à mettre.
Assurez-vous de mettre des informations correctes dans la base de données. Par
exemple, si vous ajoutez un utilisateur, il faut que son répertoire existe,
ainsi que ses uid/gid. Les répertoires pour le courrier devraient être
automatiquement créés par postfix quand l'utilisateur recevra son premier
courriel. C'est d'ailleurs une bonne idée d'envoyer un courriel de bienvenue à
tous vos utilisateurs pour vous assurer que son .maildir s'est créé
correctement.
10.
Configuration de l'authentification avec MySQL et les domaines virtuels
Nous devons à présent reconfigurer le système d'authentification pour utiliser
la base de données mailsql dans courier-imap et postfix. Dans tous les exemples
ci-dessous, remplacez $password par le mot de passe que vous avez assigné à
l'utilisateur mysql « mailsql ».
Exemple de code 10.1 : Configurer l'authentification |
# 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 (
# )
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
|
On y est presque, je le promets ! Ensuite, réglez le reste de la
configuration pour que postfix puisse interagir avec la base de données. Pensez
à remplacer chaque valeur par le nom, l'UID, le mot de passe, l'alias,
l'adresse email... de votre propre utilisateur.
Exemple de code 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
|
Exemple de code 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
|
Exemple de code 10.4 : /etc/postfix/mysql-transport.cf (facultatif) |
# 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
|
Exemple de code 10.5 : /etc/postfix/mysql-virtual-gid.cf (facultatif) |
# nano -w /etc/postfix/mysql-virtual-gid.cf
# mysql-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
|
Exemple de code 10.6 : /etc/postfix/mysql-virtual-maps.cf |
# nano -w /etc/postfix/mysql-virtual-maps.cf
# mysql-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
|
Exemple de code 10.7 : /etc/postfix/mysql-virtual-uid.cf (facultatif) |
# 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
|
Exemple de code 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
|
Enfin, éditez /etc/postfix/main.cf une fois de plus.
Exemple de code 10.9 : /etc/postfix/main.cf |
# 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-domain.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 =
|
Pour des raisons de sécurité, vous devriez changer les permissions des
fichiers /etc/mail/mysql-*.cf :
Exemple de code 10.10 : Changer les permissions des fichiers |
# chmod 640 /etc/postfix/mysql-*.cf
# chgrp postfix /etc/postfix/mysql-*.cf
|
À partir de Postfix 2.0.x, il y a eu un bon nombre de modifications par rapport
aux versions 1.1.x. Notamment, les tables 'transport', 'virtual-gid' et
'virtual-uid' ne sont plus nécessaires. Les tables sont toujours incluses au
cas où vous voudriez les utiliser.
Note :
Il est recommandé de lire le fichier VIRTUAL_README inclus avec
postfix pour plus d'informations.
|
Exemple de code 10.11 : Recharger postfix |
# postfix reload
|
Maintenant, si tout s'est bien passé, vous devriez avoir un système de
messagerie fonctionnel. Les utilisateurs devraient pouvoir s'identifier en
attaquant la base de données sql et en utilisant leur adresse de courrier
électronique complète avec pop3, imap et smtp. Je vous recommande très
fortement de vérifier que tout fonctionne à présent. Si vous avez un quelconque
problème (avec tout ce qu'on a fait, il est probable que vous en ayez),
consultez la section dépannage de ce guide.
11.
Squirrelmail
Exemple de code 11.1 : Installer squirrelmail |
# emerge squirrelmail
# webapp-config -I -h localhost -d /mail squirrelmail 1.4.3a-r2
|
12.
Mailman
Dernière étape : mailman. La nouvelle version de mailman possède un
excellent support multidomaine, c'est pourquoi je l'utilise. Inutile, donc, de
préciser que c'est un très bon programme. Pour arriver à installer ce paquet et
à le faire marcher correctement avec les domaines virtuels, il va falloir faire
un peu de bidouillage. Je vous recommande vraiment de lire toute la
documentation sur mailman, surtout README.POSTFIX.gz, pour comprendre ce que
nous allons faire.
Exemple de code 12.1 : Installer mailman |
# emerge mailman
|
Exemple de code 12.2 : Réglages de mailman : Mailman/Defaults.py |
# nano -w /usr/local/mailman/Mailman/Defaults.py
DEFAULT_EMAIL_HOST = 'domain.com'
DEFAULT_URL_HOST = 'www.domain.com'
|
Exemple de code 12.3 : Réglages de mailman : 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')
|
Exemple de code 12.4 : Ajouter une liste de diffusion |
# 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...
# ./bin/genaliases
# 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
# ./bin/newlist mailman
# ./bin/genaliases
# exit
# /etc/init.d/mailman start
# rc-update add mailman default
|
Exemple de code 12.5 : Ajout du support des alias mailman à postfix |
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
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
|
Vous devriez maintenant pouvoir installer une liste de diffusion pour n'importe
quel domaine de votre système. Une dernière note : assurez-vous de lancer
les commandes mailman en tant qu'utilisateur mailman (su mailman) car
sinon les permissions seront mauvaises et vous devrez les corriger. Lisez la
documentation de mailman pour plus d'information sur la mise en place et la
gestion des listes mailman.
13.
Filtre de contenu et anti-virus
Le filtrage du contenu et les anti-virus sont détaillés dans notre Guide de configuration d'une passerelle de
filtrage de courrier électronique.
14.
Finalisation
Ok, c'est terminé. Éditez /etc/postfix/master.cf et désactivez le
mode bavard pour un usage en production. Vous voudrez probablement que vos
services soient lancent au prochain redémarrage. Assurez-vous d'ajouter tous
les services que vous voulez utiliser parmi la liste de ceux qu'on a
installés : apache, mysql, saslauthd, postfix, courier-imapd,
courier-imapd-ssl, courier-pop3d et courier-pop3d-ssl. Personnellement, j'ai
tous ces services qui tournent.
Exemple de code 14.1 : Finalisation |
# postfix reload
# rc-update add $service default
|
Amusez-vous bien !
15.
Dépannage
Introduction
Dépannage : voici un petit guide de dépannage pour l'installation que nous
venons de détailler dans ce guide. Il n'est pas exhaustif, mais est là pour
vous aider à trouver la solution à vos problèmes. Avec un système aussi
complexe que celui-ci, il est impératif que vous puissiez cerner la partie
exacte qui ne fonctionne pas. En général, je procède en suivant quelques
étapes. Commencez par la base du système et passez en revue chaque composant
jusqu'à ce que vous découvriez celui qui pose problème.
Étape 1 : Vérifiez vos fichiers de configuration.
Les fautes de frappe ne pardonnent pas, surtout au niveau du système
d'authentification. Cherchez des fautes de frappe dans vos fichiers de
configuration et dans la base de données. Vous pourrez déboguer autant que vous
voulez, si vous n'envoyez pas une information correcte, cela ne marchera
jamais. Si vous faites une modification dans un fichier de configuration pour
un certain service, assurez-vous de relancer le service concerné pour que les
changements puissent être pris en compte.
Exemple de code 15.1 : Relancer un service |
# /etc/init.d/service restart
|
Étape 2 : Est-ce que tous les services requis sont lancés ?
S'il n'est pas lancé, lancez-le. C'est super dur de déboguer un service qui ne
tourne pas. Parfois, un service fera semblant de s'être lancé, mais ne
fonctionnera pas. Parfois, quand une mauvaise configuration est utilisée ou
qu'une mauvaise transmission arrive dans un composant du système de courrier,
le service peut planter et empêcher le port d'être utilisé par un autre
processus. Parfois, vous pouvez le détecter avec netstat. Quelques fois, un
petit redémarrage peut remettre les processus plantés à leur place et résoudre
bien des problèmes.
Exemple de code 15.2 : Vérifier qu'un service est actif |
# /etc/init.d/$service status
# netstat -a | grep $service (or $port)
|
Étape 3 : Est-ce que les services utilisent mes configs ?
Si vous avez récemment modifié un fichier de configuration, relancez le service
pour vous assurez qu'il utilise la bonne version. Certains composants vous
montrent leur configuration actuelle, comme Postfix.
Exemple de code 15.3 : Vérifiez les configurations |
# apache2ctl fullstatus (Requiert lynx.)
# apache2ctl configtest (Vérifie la configuration.)
# postconf -n (Vous dit exactement la configuration qu'utilise postfix.)
# /etc/init.d/$service restart
|
Étape 4 : Vérifiez les journaux système.
Répétez après moi : les journaux système sont mes amis. Mes dépannages
s'arrêtent tout le temps sur la consultation des journaux système. Parfois,
c'est utile de répéter une opération qui a échoué puis de consulter les
journaux système afin de voir si le message d'erreur apparaît bien à la fin (ou
au début, ça dépend de votre système de journalisation). Voyez s'il n'y a pas
une information dans les journaux système qui pourrait vous aider à comprendre
le problème, ou, au moins, à vous indiquer de quel composant l'erreur provient.
Exemple de code 15.4 : Vérifiez les journaux du système |
# kill -USR1 `ps -C metalog -o pid=`(Désactive le cache de metalog.)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache2/error_log
|
Un paramètre de postfix est très utile ; debug_peer permet d'augmenter
le niveau de verbosité dans les journaux système.
Exemple de code 15.5 : Ajout de debug_peer |
# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
|
Étape 5 : Utilisez le service vous-même.
SMTP, IMAP et POP3 répondent aux sessions telnet, comme nous l'avons déjà vu
pour vérifier la configuration de postfix. Cela peut parfois être utile
d'ouvrir une session telnet vers le service lui-même et de voir ce qu'il se
passe.
Exemple de code 15.6 : Se connecter au service en telnet |
# telnet localhost $port
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.
|
Étape 6 : Il faut parfois sortir l'artillerie lourde pour lui faire
cracher le morceau : strace.
Vous auriez de toute façon dû l'installer. C'est un outil hors du commun pour
déboguer les programmes. Vous pouvez lancer des commandes en ligne de commande
avec strace et observer tous les appels système qui arrivent. Il affiche
souvent une énorme quantité d'information ; vous devez donc le regarder en
temps réel quand vous essayez de refaire une transaction qui échoue, ou envoyer
la sortie dans un fichier pour la lire plus calmement.
Exemple de code 15.7 : Déboguer avec strace |
# emerge strace
# strace $commande
# strace -p `ps -C $service -o pid=`
|
Étape 7 : Recherche
Une fois que vous avez l'information, si vous pouvez trouver et réparer le
problème, c'est bien. Sinon, vous devrez probablement fouiller sur le net à la
recherche d'informations qui vous aideront. Voici une liste de sites à visiter
pour voir si votre erreur a déjà été résolue quelque part. Il y a aussi un
guide vraiment bon sur la mise en place de smtp-auth qui contient de bonnes
idées de débogage.
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|