Gentoo Logo

Mise en place d'un système de messagerie multidomaine avec postfix

Table des matières :

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

(Ajoutez juste le -v après smtpd dans la ligne ci-dessus.)

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

(Reconstruit la base des alias. À ne faire qu'en cas de mise à jour des alias.)
# /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
(Si vous voulez utiliser ssl avec courier-imap ou pop3, vous devez créer des)
(certificats. Cette étape est recommandée. Si vous ne voulez pas utiliser ssl,)
(passez cette étape.)

(Modifiez les paramètres C, ST, L, CN et email)
(pour qu'ils correspondent à votre serveur.)
# 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

(Il est important de désactiver les méthodes d'authentification que nous)
(n'utilisons pas. Elles peuvent poser problème avec certains clients de courrier électronique.)
# 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

(Modifiez les valeurs par défaut suivantes pour votre domaine :)
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.

(Si les variables n'existent pas, créez-les.)


# 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
(À présent, faire de même pour 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
(Laissez les certificats ici pour le moment. Nous les installerons)
(une fois Apache lui-même installé.)

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 =

(L'option broken_sasl_auth_clients et la méthode d'authentification de connexion sont)
(pour outlook et outlook express uniquement et ne sont pas documentées. N'est-ce)
(pas super de devoir trafiquer un bon logiciel pour pallier la stupidité de ceux)
(de Micromou ? smtpd_sasl_local_domain ajoute un nom de domaine aux clients)
(qui utilisent smtp-auth. Soyez sûr que c'est vide ou sinon vos utilisateurs se)
(feront virer par postfix et ne pourrons pas s'identifier.)

smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  reject_unauth_destination

(Les 3 lignes suivantes permettent l'encryption lors de l'envoi.)
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

(smtpd_tls_auth_only est commenté pour faciliter le test du système.)
(Vous pourrez l'activer plus tard si vous le désirez.)

# 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
(Après avoir lancé cette commande, suivez les instructions affichées à l'écran)
(pour ajouter un mot de passe root à mysql, sinon votre base de données sera)
(grande ouverte.)

# /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
(Assurez-vous que l'utilisateur mailsql puisse se connecter au serveur mysql.)

# 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

(Lignes coupées pour améliorer la lisibilité.)
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
(Regardez si vous n'avez pas déjà un modèle d'hôte virtuel ssl. Si
c'est le cas, copiez-le à la place du default_vhost)
# cp 00_default_vhost.conf ssl-vhost.conf
# nano -w ssl-vhost.conf

 (Changez les paramètres suivants)
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
(Ajoutez -D SSL -D PHP5 à APACHE2_OPTS)

# /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
(Modifiez les paramètres suivants :)
$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 (Celle-ci doit être commentée car les
#                              mots de passes ne sont pas cryptés.)
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
(Assurez-vous qu'il n'y a pas d'autres définitions d'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
(Les domaines listés par les mydestination ne doivent pas être listés
dans les paramètres virtual_mailbox_domains)
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com

virtual_minimum_uid = 1000
(Remplacez $vmail-gid par le GID de votre groupe 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
(Remplacez $vmail-uid par le UID de votre utilisateur vmail)
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

(Installez squirrelmail dans localhost pour qu'il soit accessible sur http://localhost/mail).
Remplacez 1.4.3a-r2 par le numéro de la version que vous utilisez.)
# webapp-config -I -h localhost -d /mail squirrelmail 1.4.3a-r2

(Modifiez vos « Organization », « Server » et « Folder settings » pour squirrelmail.
Vous devriez maintenant pouvoir vous connecter sur squirrelmail (avec votre
adresse de courrier complète) et utiliser votre nouvelle interface webmail.)

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
(Modifiez les valeurs ci-dessous pour qu'elles correspondent à votre domaine)
(principal. Les domaines virtuels seront listés plus tard.)
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')
(C'est obligatoire pour que mailman fonctionne avec vos domaines virtuels.)

Exemple de code 12.4 : Ajouter une liste de diffusion

(Une fois que c'est fait, ajoutez votre première 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...
(Les listes qui utilisent un domaine virtuel peuvent être spécifiées en)
(utilisant le style liste@domaine.com.)
# ./bin/genaliases
(Maintenant que vos alias ont été générés, vérifiez qu'ils ont été)
(correctement ajoutés.)

# 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

(Créez la liste mailman)
# ./bin/newlist mailman
# ./bin/genaliases

(Retournez en super-administrateur)
# exit

# /etc/init.d/mailman start
# rc-update add mailman default
(Pour lancer mailman manuellement et à chaque démarrage.)

Exemple de code 12.5 : Ajout du support des alias mailman à postfix

# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Lisez README.POSTFIX.gz pour plus de détails.)

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
(Postfix supporte maintenant le fichier d'alias de mailman.)
(Vous pouvez bien sûr utiliser les tables mysql pour cela,)
(mais j'ai horreur de le faire à la main. Aussi, si vous n'utilisez)
(pas les domaines virtuels, l'ajout d'une liste d'alias virtuels à)
(postfix peut poser des problèmes. Vous êtes prévenu.)

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
(Décommentez une des commandes suggérées.)

É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
(Pour SMTP, c'est 25, IMAP, c'est 143, et POP3, c'est 110. Vous devriez au moins)
(recevoir une chaîne OK qui vous informe que le service fonctionne et est prêt)
(à répondre à une requête.)

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.



Imprimer

Dernière mise à jour le 28 septembre 2008

La version originale de cette traduction n'est plus maintenue

Résumé : Ce document décrit en détails comment créer un système de messagerie en se basant sur postfix, mysql, courier-imap et cyrus-sasl.

Ken Nowack
Auteur

Ezra Gorman
Auteur

Scygro
Correcteur

Sven Vermeulen
Correcteur

Camille Huot
Traducteur

Marion Agé
Traducteur

Donate to support our development efforts.

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