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. |
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. |
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.
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.
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 |
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 :
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 |
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 :
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.
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.) |
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.
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 !
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=` |
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.