Serveur de messagerie multi domaines avec Postfix

Transcription

Serveur de messagerie multi domaines avec Postfix
Serveur de messagerie multi domaines avec Postfix,
OpenLDAP et Courier
Ce document décrit la mise en place d'un serveur de messagerie multi-domaine utilisant LDAP sous
Debian GNU/Linux grâce aux logiciels Postfix, Openldap, Courier et Squirrelmail.
Objectif
L'objectif de ce document est de présenter en détail l'installation et la configuration d'un serveur de
messagerie avec le support LDAP sous Debian GNU/Linux. Le serveur de messagerie
communiquera avec un annuaire LDAP dans lequel seront stockées les informations sur les
utilisateurs du système ainsi que sur les domaines à prendre en charge. Nous verrons donc
l'installation et la configuration de l'annuaire LDAP, du serveur SMTP, du serveur POP3/IMAP et
du webmail.
Prérequis
Le document décrit la marche à suivre sur un système Debian GNU/Linux Sarge. Nous supposerons
donc qu'un système Debian Sarge est installé et fonctionnel. De plus, pour l'installation des
logiciels, le logiciel APT doit être fonctionnel. Concernant les noms de domaines, ils devront exister
et être correctement configurés sur le serveur DNS.
Sommaire
1.
2.
3.
4.
5.
Présentation des logiciels choisis
OpenLDAP
Postfix
Courier
Squirrelmail
Présentation des logiciels choisis
L'installation de logiciel sous Debian GNU/Linux se fait très facilement grâce à l'outil APT. Dans le
cadre de ce document, nous n'utiliserons que des logiciels libres disponibles via APT.
OpenLDAP
Pour l'annuaire, nous utiliserons OpenLDAP. OpenLDAP est un serveur LDAP (Lightweight
Directory Access Protocol) Opensource qui implémente le protocole LDAP v3 (rfc 3377) et la
gestion des fichiers LDIF (rfc 2849).
Postfix
Postfix est le serveur SMTP que nous utiliserons. Facile à configurer, il intègre aussi un connecteur
vers LDAP.
Courier
Nous utiliserons les logiciels Courier pour les services POP3 et IMAP. Comme Postfix, Courier
propose un connecteur LDAP en standard.
Squirrelmail
Le webmail sera Squirrelmail. Squirrelmail est un webmail simple et efficace, il supporte les
protocoles IMAP et SMTP. Entièrement en PHP4, il génère des pages html sans aucune fioriture
pour une plus grande compatibilité avec les navigateurs.
Versions
Voici la liste des packages utilisés et leur version :
•
•
•
•
•
•
•
•
•
•
•
•
•
•
courier-authdaemon/0.47-4sarge4
courier-base/0.47-4sarge4
courier-imap/3.0.8-4sarge4
courier-ldap/0.47-4sarge4
courier-pop/0.47-4sarge4
fam/2.7.0-6sarge1
ldap-utils/2.2.23-8
phpldapadmin/0.9.5-3sarge2
postfix/2.1.5-9
postfix-ldap/2.1.5-9
postfix-pcre/2.1.5-9
slapd/2.2.23-8
squirrelmail/1.4.4-8
squirrelmail-locales/1.4.4-20050308
La prochaine étape sera l'installation de l'annuaire, source d'informations pour les serveurs
SMTP/POP3/IMAP.
OpenLDAP
Pour installer OpenLDAP, utilisez la commande suivante:
# apt-get install slapd
Pour terminer l'installation, il suffit de répondre aux questions posées par le système.
Dans le cadre de ce document, nous utiliserons le suffixe dc=masociete, dc=com pour l'annuaire.
Il nous faut ensuite saisir un nom d'organisation; celui-ci ne servira pas. Mettez ce que vous voulez.
Lorsque vous y êtes invité, saisissez le mot de passe pour l'administrateur de l'annuaire.
Confirmez le mot de passe.
Nous choisirons, pour terminer, de ne pas autoriser le protocole LDAPv2.
Pour démarrer, arrêter ou redémarrer le serveur LDAP, utilisez la commande suivante :
# /etc/init.d/slapd start|stop|restart
Pour pouvoir manipuler l'annuaire et les fichiers LDIF dans la console, nous allons installer ldaputils. Pour cela, utilisez la commande suivante :
# apt-get install ldap-utils
La configuration de OpenLDAP se fait ensuite grâce au fichier /etc/ldap/slapd.conf. Pour
répondre à nos besoins, nous allons devoir apporter deux modifications à ce fichier. Premièrement,
pour augmenter le niveau de sécurité, nous allons interdire l'accès anonyme à l'annuaire. Pour ce
faire, il faut remplacer la directive suivante :
access to *
by dn="cn=admin,dc=masociete,dc=com" write
by * read
par :
access to *
by dn="cn=admin,dc=masociete,dc=com" write
by * none
Ensuite, nous allons indiquer à OpenLDAP le chemin du schéma que nous souhaitons utiliser. En
effet, il est possible de définir notre propre schéma mais, dans un souci de simplicité et de
portabilité, nous utiliserons le schéma proposé par courier. Pour cela, il nous faut installer courierldap grâce à la commande suivante :
# apt-get install courier-ldap
Une fois courier-ldap installé, nous trouvons dans le répertoire /usr/share/doc/courierldap/ un fichier nommé authldap.schema. Nous allons ensuite modifier la configuration
d'OpenLDAP pour qu'il utilise ce schéma. Pour cela, nous allons copier authldap.schema dans
le répertoire des schémas d'OpenLDAP :
# cp /usr/share/doc/courier-ldap/authldap.schema /etc/ldap/schema/
puis modifier le fichier slapd.conf en lui ajoutant cette ligne :
include /etc/ldap/schema/authldap.schema
Votre annuaire est désormais prêt. Il ne vous reste plus qu'à redémarrer le serveur slapd. Pour cela,
tapez la commande suivante :
# /etc/init.d/slapd restart
Si une erreur se produit, vérifiez bien la configuration du fichier slapd.conf et allez voir dans
les fichiers de log s'il n'y a pas une information concernant la source de l'erreur.
Votre annuaire s'est lancé correctement, nous allons maintenant y entrer les informations concernant
les comptes et les domaines à gérer. Dans le cadre de ce document, nous utiliserons la structure
suivante :
Notre serveur sera donc capable de gérer le courrier pour les domaines fr.masaciete.com et
us.masociete.com. Pour ajouter des données à l'annuaire, nous allons utiliser un fichier au format
LDIF.
exemple.ldif
dn:o=france,dc=masociete,dc=com
o: france
objectClass: top
objectClass: organization
objectClass: CourierDomainAlias
virtualdomain: fr.masociete.com
virtualdomainuser: fr.masociete.com/
dn:cn=infos,o=france,dc=masociete,dc=com
cn: infos
mail: [email protected]
maildrop: [email protected]
sn: Informations
objectClass: top
objectClass: inetOrgPerson
objectClass: CourierMailAlias
dn:cn=nicolas,o=france,dc=masociete,dc=com
cn: nicolas
gidNumber: 0
mail: [email protected]
sn: Nicolas
uidNumber: 0
mailbox: fr.masociete.com/nicolas/
objectClass: top
objectClass: inetOrgPerson
objectClass: CourierMailAccount
userPassword: {CRYPT}g0RdfmDF654PCJcc
homeDirectory: /home/vmail/
dn:cn=support,o=france,dc=masociete,dc=com
cn: support
gidNumber: 0
mail: [email protected]
sn: Support
uidNumber: 0
mailbox: fr.masociete.com/support/
objectClass: top
objectClass: inetOrgPerson
objectClass: CourierMailAccount
userPassword: {CRYPT}ggU25mfmDFaz2c58
homeDirectory: /home/vmail/
Note 1: Pour définir un catchall, ajoutez un utilisateur dont l'adresse email est de la forme
@domaine.tld. Ainsi, tout le courrier à destination d'une adresse inexistante ira sur cette boîte.
A utiliser avec précaution, cette boîte peut devenir très volumineuse très rapidement.
Note 2: Les noms de domaines que vous souhaitez prendre en charge doivent être configurés
correctement, c'est à dire que votre serveur doit être désigné comme étant le MX primaire pour
chaque domaine sur les serveurs DNS autoritaires. Plus d'informations sur le site
CommentCaMarche.
Une fois le fichier créé, utilisez la commande ldapadd pour insérer vos données :
# ldapadd -x -f exemple.ldif -D "cn=admin,dc=masociete,dc=com" -w
<pass_admin>
Pour cet exemple, j'ai choisi les classes inetOrgPerson, CourierDomainAlias, CourierMailAlias et
CourierMailAccount. Vous êtes libre d'utiliser d'autres classes, l'important est d'avoir à disposition
les informations suivantes :
•
•
•
•
•
•
nom canonique,
adresse email,
chemin de la boîte aux lettres et du répertoire d'accueil pour les comptes,
adresse email de destination pour les redirections,
mot de passe,
nom du domaine.
Le schéma proposé par Courier permet d'utiliser bien d'autres attributs. Je me suis limité aux
attributs obligatoires.
Voici la structure des classes proposées par Courier. On peut voir quels sont les attributs obligatoires
(MUST) et optionnels (MAY).
objectclass ( 1.3.6.1.4.1.10018.1.2.1 NAME 'CourierMailAccount' SUP top
AUXILIARY
DESC 'Mail account object as used by the Courier mail server'
MUST ( mail $ homeDirectory $ uidNumber $ gidNumber )
MAY ( mailbox $ uid $ cn $ gecos $ description $ loginShell $ quota $
userPassword $ clearPassword $ defaultdelivery) )
objectclass ( 1.3.6.1.4.1.10018.1.2.2 NAME 'CourierMailAlias' SUP top AUXILIARY
DESC 'Mail aliasing/forwarding entry'
MUST ( mail $ maildrop )
MAY ( mailsource $ description ) )
objectclass ( 1.3.6.1.4.1.10018.1.2.3 NAME 'CourierDomainAlias' SUP top
AUXILIARY
DESC 'Domain mail aliasing/forwarding entry'
MUST ( virtualdomain $ virtualdomainuser )
MAY ( mailsource $ description ) )
La classe inetOrgPerson permet aussi de nombreux attributs supplémentaires, pour plus
d'informations, vous pouvez consulter les fichiers, qui définissent le schéma, dans
/etc/ldap/schema/ ou aller sur le site LDAP Schema Viewer.
Si vous avez un serveur web configuré sur votre serveur, je vous conseille d'utiliser phpldapadmin.
Phpldapadmin est une interface d'administration en PHP qui vous permettra de manipuler
facilement votre annuaire (ajout/suppression/modification/import/export/recherche/...). Pour
l'installer, tapez la commande suivante :
# apt-get install phpldapadmin
Il ne vous reste plus qu'à créer un lien à la racine de votre site :
# ln -s /usr/share/phpldapadmin/ /var/www/ldap
Une fois le serveur d'annuaire en place, nous allons pouvoir nous lancer dans l'installation et la
configuration du serveur SMTP Postfix.
Postfix
L'installation de Postfix sous Debian GNU/Linux est d'une simplicité enfantine. Il suffit de taper la
commande suivante :
# apt-get install postfix postfix-ldap postfix-pcre
Vous avez désormais un serveur SMTP fonctionnel sans avoir quoi que ce soit à modifier. Facile,
isn't it ?
Pour configurer le serveur correctement, nous suivrons entre autres les recommandations du
VIRTUAL_README, du LDAP_README et de LDAP_TABLE(5). Une partie de la
documentation traduite en français est disponible sur le site de Xavier Guimard.
Avant d'aller plus loin, nous devons créer l'utilisateur, le groupe et le répertoire qui seront utilisés
par Postfix pour manipuler les messages.
# groupadd -g 5000 vmail
# useradd -u 5000 -g 5000 -d /home/vmail -s /bin/false -m vmail
La configuration de Postfix se fera uniquement dans le fichier main.cf, situé dans
/etc/postfix/. Avec l'éditeur de votre choix, modifier le fichier main.cf comme présenté cidessous :
main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
myhostname = debian.masociete.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = debian.masociete.com, localhost.masociete.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_command =
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
luser_relay =
#la directive suivante correspond à la liste des domaines pris en charge.
virtual_mailbox_domains = ldap:/etc/postfix/ldap-domains.cf
# le répertoire /home/vmail stockera les boites mail des utilisateurs
virtual_mailbox_base = /home/vmail
#la directive suivante correspond à la liste des utilisateurs déclarés.
virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf
virtual_minimum_uid = 100
virtual_gid_maps = static:5000
virtual_uid_maps = static:5000
#la directive suivante correspond à la liste des alias (redirections).
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
unknown_local_recipient_reject_code = 450
Il nous reste à créer les fichiers ldap-domains.cf, ldap-accounts.cf et ldapaliases.cf qui définissent les paramètres pour accéder à l'annuaire. Comme vous le constatez
dans le fichier main.cf, ces fichiers seront créés dans le répertoire /etc/postfix/. Avec
votre éditeur favori, créez les fichiers suivants :
ldap-domains.cf
server_host = localhost
server_port = 389
search_base = dc=masociete, dc=com
query_filter = (&(objectClass=CourierDomainAlias)(virtualdomain=%s))
result_attribute = virtualdomain
bind = yes
bind_dn = cn=admin, dc=masociete, dc=com
bind_pw = <pass_admin>
version = 3
ldap-accounts.cf
server_host = localhost
server_port = 389
search_base = dc=masociete, dc=com
query_filter = (& (objectClass=CourierMailAccount)(mail=%s))
result_attribute = mailbox
bind = yes
bind_dn = cn=admin, dc=masociete, dc=com
bind_pw = <pass_admin>
version = 3
ldap-aliases.cf
server_host = localhost
search_base = dc=masociete, dc=com
query_filter = (&(objectClass=CourierMailAlias) (mail=%s))
result_attribute = maildrop
bind = yes
bind_dn = cn=admin, dc=masociete, dc=com
bind_pw = <pass_admin>
version = 3
Note : Pour des raisons de sécurité, assurez-vous que les fichiers contenant le mot de passe de
l'administrateur LDAP ont des droits suffisamment restrictifs.
Pour vérifier qu'il n'y a aucune erreur de syntaxe dans les fichiers de configuration de Postfix,
utilisez la commande postfix :
# postfix check
Elle ne doit renvoyer aucun message.
De plus, n'oubliez pas de recharger Postfix après chaque modification de sa configuration. Pour
cela, utilisez la commande postfix :
# postfix reload
Pour vérifier que Postfix communique bien avec le serveur OpenLDAP, utilisez l'utilitaire postmap.
Exemple :
# postmap -q [email protected] ldap:/etc/postfix/ldapaccount.cf
fr.masociete.com/nicolas/
Votre serveur est désormais configuré pour envoyer et recevoir les emails. Pour tester son bon
fonctionnement, envoyez vous des emails vers les alias et les comptes. Le test est concluant si des
fichiers se créent dans le répertoire /home/vmail/. Nous allons pouvoir passer à la configuration
de Courier.
Courier
L'installation de Courier se fait encore une fois par le biais de APT :
# apt-get install courier-base courier-authdaemon courier-imap
courier-pop courier-ldap fam
Note : courier-base, courier-ldap et courier-authdaemon ont normalement été
installés lors de l'installation/configuration de OpenLDAP.
La configuration de Courier se limite à la configuration de Courier-authdaemon. Nous allons donc
modifier les fichiers /etc/courier/authldaprc et /etc/courier/authdaemonrc. Le
contenu du fichier authldaprc est simple et commenté. Morceaux choisis :
LDAP_SERVER
LDAP_PORT
localhost
389
LDAP_PROTOCOL_VERSION
3
LDAP_BASEDN
dc=masociete, dc=com
LDAP_BINDDN
LDAP_BINDPW
cn=admin, dc=masociete, dc=com
<pass_admin>
LDAP_MAIL
mail
##NAME: LDAP_FILTER:0
#
# This LDAP filter will be ANDed with the query for the field defined above
# in LDAP_MAIL. So if you are querying for mail, and you have LDAP_FILTER
# defined to be "(objectClass=CourierMailAccount)" the query that is performed
# will be "(&(objectClass=CourierMailAccount)(mail=<someAccount>))"
#
LDAP_FILTER
(objectClass=CourierMailAccount)
LDAP_GLOB_UID
LDAP_GLOB_GID
vmail
vmail
#LDAP_HOMEDIR est OBLIGATOIRE.
LDAP_HOMEDIR
homeDirectory
LDAP_MAILDIR
mailbox
LDAP_DEFAULTDELIVERY
defaultDelivery
LDAP_FULLNAME
cn
#LDAP_CLEARPW
LDAP_CRYPTPW
userPassword
userPassword
Note : Attention aux espaces dans le fichier authldaprc. Une variable précédée d'un espace ne
sera pas prise en compte.
Dans le fichier /etc/courier/authdaemonrc, nous allons remplacer :
authmodulelist="authpam"
par :
authmodulelist="authldap"
Une fois la configuration de Courier-authdaemon terminée, n'oubliez pas de le redémarrer.
# /etc/init.d/courier-authdaemon restart
Pour vérifier le bon fonctionnement de Courier-authdaemon, utilisez l'outil courierauthtest :
# courierauthtest [email protected]
Trying authdaemon...
Authenticated: module authdaemon
Home directory: /home/vmail
UID/GID: 5000/5000
Maildir: fr.masociete.com/nicolas/
[email protected]
AUTHFULLNAME=nicolas
OPTIONS=<none>
Une fois Courier-authdaemon configuré, les serveurs POP3 et IMAP sont opérationnels. Il ne vous
reste plus qu'à installer le webmail.
Squirrelmail
Pour installer Squirrelmail, utilisez la commande suivante :
# apt-get install squirrelmail
Ensuite, créez un lien vers Squirrelmail à la racine de votre site web :
# ln -s /usr/share/squirrelmail/ /var/www/webmail
Squirrelmail ne nécessite aucune configuration particulière pour fonctionner. Néanmoins, vous
pouvez paramétrer Squirrelmail en modifiant le fichier /etc/squirrelmail/config.php
ou en utilisant la commande squirrelmail-configure.
squirrelmail-configure
SquirrelMail Configuration : Read: config.php (1.4.0)
Main Menu -1. Organization Preferences
2.
3.
4.
5.
6.
7.
8.
9.
10.
Server Settings
Folder Defaults
General Options
Themes
Address Books
Message of the Day (MOTD)
Plugins
Database
Languages
D.
Set pre-defined settings for specific IMAP servers
C
S
Q
Turn color on
Save data
Quit
Command >>
Conclusion