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