Debian : Postfix + MySQL + SASL + PostfixAdmin + Courier + VirtualDomain + Serveur de mail SMTP IMAP POP3
Par PlaceOweb le dimanche, septembre 13 2009, 21:30 - Système - Lien permanent
Comment configurer simplement sur serveur de mail multi-domaines avec les droits délégués pour chaque (sous) administrateur ? Sans cherchez de logiciel lourd ou avec une ergonomie en Web2 agréable tel que Roundcube webmail ou Zimbra, vous pouvez opter pour une Debian configurée avec Postfix, MySQL, SASL SMTP, le MTA Courrier IMAP et POP, VirtualDomain, PostfixAdmin et Squirrelmail
Basé sur l'article How-To Debian Sarge: Postfix + SASL + MySQL + PostfixAdmin + Courier + VirtualDomain du William's blog, voici comment faire sur une Debian Lenny 5.0.3
Postfix Admin et MySQL
Postfix Admin est une interface web pour gérer les boîtes aux lettres, les domaines virtuels, les alias. Il dispose également d'une réponse automatique configurable pour absences lors des vacances / ou d'absence du bureau. (vacation/out-of-the-office)
Il nécessite PHP, Postfix et un de MySQL ou PostgreSQL. Testé avec succès avec PHP 5.2.6, MySQL 5.0.51
Téléchargement de postfixadmin_2.3rc7_all.deb
# wget "http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3rc7/postfixadmin_2.3rc7_all.deb/download" # dpkg -i postfixadmin_2.3rc7_all.deb Sélection du paquet postfixadmin précédemment désélectionné. (Lecture de la base de données... 37952 fichiers et répertoires déjà installés.) Dépaquetage de postfixadmin (à partir de postfixadmin_2.3rc7_all.deb) ... dpkg : des problèmes de dépendances empêchent la configuration de postfixadmin : postfixadmin dépend de dbconfig-common ; cependant : Le paquet dbconfig-common n'est pas installé. postfixadmin dépend de wwwconfig-common ; cependant : Le paquet wwwconfig-common n'est pas installé. postfixadmin dépend de php5-imap ; cependant : Le paquet php5-imap n'est pas installé. dpkg : erreur de traitement de postfixadmin (--install) : problèmes de dépendances - laissé non configuré Des erreurs ont été rencontrées pendant l'exécution : postfixadmin # apt-get install php5-imap wwwconfig-common dbconfig-common libc-client2007b mlock +¦ Configuration de postfixadmin +-+ ¦ ¦ ¦ postfixadmin a besoin d'une base de données installée et configurée avant de pouvoir être utilisé. Si vous le souhaitez, dbconfig-common peut prendre cette opération en charge. ¦ ¦ ¦ ¦ Si vous êtes un administrateur de bases de données expérimenté et si vous savez que vous voulez procéder à cette configuration vous-même, ou si votre base de données est déjà installée et configurée, ¦ ¦ vous pouvez refuser cette option. Des précisions sur la procédure se trouvent dans /usr/share/doc/postfixadmin. ¦ ¦ ¦ ¦ Autrement, vous devriez choisir cette option. ¦ ¦ ¦ ¦ Faut-il configurer la base de données de postfixadmin avec dbconfig-common ? ¦ ¦ ¦ ¦ <Oui> <Non> ¦ ¦ ¦ +--+ +-¦ Configuration de postfixadmin +-+ ¦ Le paquet postfixadmin peut être configuré pour utiliser l'un des nombreux types de serveur de bases de données. Ci-dessous vous seront présentés les choix disponibles. ¦ ¦ ¦ ¦ Type de serveur de bases de données à utiliser avec postfixadmin : ¦ ¦ ¦ ¦ mysql ¦ ¦ pgsql ¦ ¦ ¦ ¦ ¦ ¦ <Ok> <Annuler> ¦ ¦ ¦ +---+ +¦ Configuration de postfixadmin ++ ¦ Veuillez indiquer le mot de passe pour le compte propriétaire qui servira à créer la base de données MySQL ainsi que les utilisateurs. ¦ ¦ ¦ ¦ Mot de passe de l'administrateur de la base de données : ¦ ¦ ¦ ¦ ___ ¦ ¦ ¦ ¦ <Ok> <Annuler> ¦ ¦ ¦ +-+ +-¦ Configuration de postfixadmin +-+ ¦ Veuillez indiquer un mot de passe de connexion pour postfixadmin sur le serveur de bases de données. Si vous laissez ce champ vide, un mot de passe aléatoire sera créé. ¦ ¦ ¦ ¦ Mot de passe de connexion MySQL pour postfixadmin : ¦ ¦ ¦ ¦ _ ¦ ¦ ¦ ¦ <Ok> <Annuler> ¦ ¦ ¦ +---+ +-¦ Configuration de postfixadmin +--+ ¦ Une nouvelle version du fichier de configuration /etc/postfixadmin/config.inc.php est disponible mais la version actuellement utilisée a été modifiée localement. ¦ ¦ ¦ ¦ Action souhaitée pour config.inc.php : ¦ ¦ ¦ ¦ Installer la version du responsable du paquet ¦ ¦ Garder la version actuellement installée ¦ ¦ Montrer les différences entre les versions ¦ ¦ Montrer côte à côte les différences entre les versions ¦ ¦ Lancer un shell pour examiner la situation ¦ ¦ ¦ ¦ ¦ ¦ <Ok> ¦ ¦ ¦ ++ dbconfig-common: writing config to /etc/dbconfig-common/postfixadmin.conf *** WARNING: ucf was run from a maintainer script that uses debconf, but the script did not pass --debconf-ok to ucf. The maintainer script should be fixed to not stop debconf before calling ucf, and pass it this parameter. For now, ucf will revert to using old-style, non-debconf prompting. Ugh! Please inform the package maintainer about this problem. granting access to database postfixadmin for postfixadmin@localhost: success. verifying access for postfixadmin@localhost: success. creating database postfixadmin: success. verifying database postfixadmin exists: success. dbconfig-common: flushing administrative password # postfixadmin sera installé dans # /usr/share/postfixadmin/ # Configuration de postfixadmin (MySQL et dossiers) # vim /etc/postfixadmin/config.inc.php // Database Config // mysql = MySQL 3.23 and 4.0, 4.1 or 5 // mysqli = MySQL 4.1+ // pgsql = PostgreSQL $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'xxx'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; // Mailboxes // If you want to store the mailboxes per domain set this to 'YES'. // Examples: // YES: /usr/local/virtual/domain.tld/username@domain.tld // NO: /usr/local/virtual/username@domain.tld //$CONF['domain_path'] = 'NO'; $CONF['domain_path'] = 'YES'; // Quota // When you want to enforce quota for your mailbox users set this to 'YES'. //$CONF['quota'] = 'NO'; $CONF['quota'] = 'YES'; // You can either use '1024000' or '1048576' //$CONF['quota_multiplier'] = '1024000'; $CONF['quota_multiplier'] = '1048576'; # On administre postfixadmin depuis http://ip.de.mon.serveur.fr/postfixadmin/ # On crée la base MySQL mysql> CREATE DATABASE postfix; Query OK, 1 row affected (0.00 sec) # On vérifie sur http://ip.de.mon.serveur.fr/postfixadmin/setup.php Postfix Admin Setup Checker Running software: * PHP version 5.2.6-1+lenny3 * Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch Checking for dependencies: * Warning: Magic Quotes: ON (internal workaround used) * Depends on: presence config.inc.php - OK * Checking $CONF['configured'] - OK * Depends on: MySQL 3.23, 4.0 - OK * Depends on: MySQL 4.1 - OK * Testing database connection - OK - mysqli://postfix:xxxxx@localhost/postfix * Depends on: session - OK * Depends on: pcre - OK * Depends on: multibyte string - OK * Depends on: IMAP functions - OK Everything seems fine... attempting to create/update database structure Updating database: - old version: 0; target version: 667 updating to version 1 (MySQL)... done updating to version 2 (MySQL)... done updating to version 3 (MySQL)... done updating to version 504 (MySQL)... done updating to version 655 (all databases)... done Change setup password Setup password Setup password (again) Since version 2.3 there is no requirement to delete setup.php! Check the config.inc.php file for any other settings that you might need to change! If you want to use the password you entered as setup password, edit config.inc.php and set $CONF['setup_password'] = 'd2841fe038038cc657d959a22d2df8e5:8a0304a1cf64a13cc907291092394304d8fb0f1f';
Installation et configuration de postfix
# apt-get install postfix postfix-mysql
On indiquera lors de la configuration automatique, une configuration « Site Internet ».
On crée d’abord l'utilisateur et le dossier où seront stocké les maildirs :
# groupadd --gid 1001 vmail # useradd --gid 1001 --uid 1001 --home-dir /var/mail/virtual --create-home vmail
On modifie ensuite la configuration de postfix en ajoutant ceci au /etc/postfix/main.cf
# # http://wlallemand.irq6.net/?p=35 # virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf virtual_gid_maps = static:1001 virtual_mailbox_base = /var/mail/virtual virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 1001 virtual_transport = virtual virtual_uid_maps = static:1001 # Additional for quota support virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user.s maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes #smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous # # http://dotclear.placeoweb.com/post/Debian-Postfix-MySQL-SASL-PostfixAdmin-Courier-VirtualDomain-Serveur-mail-SMTP-IMAP-POP # smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client opm.blitzed.org, reject_rbl_client list.dsbl.org, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl-xbl.spamhaus.org # http://codepoets.co.uk/postfixadmin-postgresql-courier-squirrelmail-debian-etch-howto-tutorial # Postfix SMTP Auth Support smtpd_sasl_authenticated_header = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes
On crée le dossier dans lequel sera stocké les maps :
# mkdir /etc/postfix/mysql/ # cd /etc/postfix/mysql/
et on crée ensuite les fichiers :
# vim /etc/postfix/mysql/mysql_virtual_alias_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = alias select_field = goto where_field = address # vim /etc/postfix/mysql/mysql_virtual_domains_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = domain select_field = domain where_field = domain #additional_conditions = and backupmx = '0' and active = '1' # vim /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = maildir where_field = username #additional_conditions = and active = '1' # vim /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = quota where_field = username #additional_conditions = and active = '1'
Les valeurs de l’hosts ont été mises à 127.0.0.1 et non pas à localhost pour contrer un problème dû au chroot !
Par ailleurs, il faut modifier les droits d’accés de l’utilisateur postfix pour ne pas avoir d’erreur !
mysql -u root -p GRANT SELECT , INSERT , UPDATE , DELETE ON `postfix` . * TO ‘postfix’@'localhost’; # chmod -R 755 mysql/ # chown -R root:root mysql/ # /etc/init.d/postfix restart
On devrait à partir de là obtenir un postfix qui fonctionne !
Pour tester : On crée un utilisateur avec postfixadmin, puis on crée une boite mail. Si tout se passe bien, la boite est crée dans /var/mail/virtual … sinon on observe les logs dans /var/log/mail.log
A partir de là nous avons un postfix configuré pour recevoir les mails qui fonctionne.
Installation de Courier-IMAP Courier-POP !
apt-get install courier-authmysql courier-imap courier-pop courier-authdaemon
Nous allons maintenant configurer courier pour l’authentification avec la base MySQL de postfix !
On modifie pour cela le fichier /etc/courier/authdaemonrc
#authmodulelist="authpam" authmodulelist="authmysql"
Puis on édite la configuration de l’identification MySQL :
vim /etc/courier/authmysqlrc MYSQL_SERVER 127.0.0.1 MYSQL_USERNAME postfix MYSQL_PASSWORD postfix MYSQL_OPT 0 #MYSQL_DATABASE mysql MYSQL_DATABASE postfix #MYSQL_USER_TABLE passwd MYSQL_USER_TABLE mailbox #MYSQL_CRYPT_PWFIELD crypt MYSQL_CRYPT_PWFIELD password #MYSQL_UID_FIELD uid MYSQL_UID_FIELD '1001' #MYSQL_GID_FIELD gid MYSQL_GID_FIELD '1001' #MYSQL_LOGIN_FIELD id MYSQL_LOGIN_FIELD username #MYSQL_HOME_FIELD home MYSQL_HOME_FIELD '/var/mail/virtual/' MYSQL_NAME_FIELD name # MYSQL_MAILDIR_FIELD maildir MYSQL_MAILDIR_FIELD maildir
Attention: N’utilisez que des tabulations, les espaces provoquent des erreurs d’identification ! cf /var/log/mail.log
Configuration de saslauthd pour l'envoi authentifié sous SMTP
Il existe plusieurs méthodes d’identification SASL avec postfix, mais notre problème est que nous voulons utiliser les mots de passe cryptés dans la base de donnée, et que nous ne voulons pas patché les packages par soucis de maintenance.
La meilleure solution que j’ai trouvé, est d’utiliser le daemon d’authentification de courier !
Pour cela on procède d’abord à l’installation de SASL2
#apt-get install postfix-tls sasl2-bin libsasl2 libsasl2-modules
Maintenant on configure postfix pour l’authentification SASL, on crée d’abord un fichier /etc/postfix/sasl/smtpd.conf :
# vim /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd saslauthd_path: /var/run/saslauthd/mux log_level: 3 mech_list: PLAIN LOGIN
# apt-get install sasl2-bin # mkdir -p /var/spool/postfix/var/run/saslauthd
Configuration de saslauthd
#vim /etc/default/saslauthd
# # Settings for saslauthd daemon # Please read /usr/share/doc/sasl2-bin/README.Debian for details. # # Should saslauthd run automatically on startup? (default: no) #START=no START=yes # Description of this saslauthd instance. Recommended. # (suggestion: SASL Authentication Daemon) DESC="SASL Authentication Daemon" # Short name of this saslauthd instance. Strongly recommended. # (suggestion: saslauthd) NAME="saslauthd" # Which authentication mechanisms should saslauthd use? (default: pam) # # Available options in this Debian package: # getpwent -- use the getpwent() library function # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use a remote IMAP server # shadow -- use the local shadow password file # sasldb -- use the local sasldb database file # ldap -- use LDAP (configuration is in /etc/saslauthd.conf) # # Only one option may be used at a time. See the saslauthd man page # for more information. # # Example: MECHANISMS="pam" #MECHANISMS="pam" MECHANISMS="rimap" # Additional options for this mechanism. (default: none) # See the saslauthd man page for information about mech-specific options. MECH_OPTIONS="" # How many saslauthd processes should we run? (default: 5) # A value of 0 will fork a new process for each connection. THREADS=5 # Other options (default: -c -m /var/run/saslauthd) # Note: You MUST specify the -m option or saslauthd won't run! # # WARNING: DO NOT SPECIFY THE -d OPTION. # The -d option will cause saslauthd to run in the foreground instead of as # a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish # to run saslauthd in debug mode, please run it by hand to be safe. # # See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information. # See the saslauthd man page and the output of 'saslauthd -h' for general # information about these options. # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-r -c -O localhost -m /var/spool/postfix/var/run/saslauthd" #OPTIONS="-d -r -c -O localhost -m /var/spool/postfix/var/run/saslauthd"
On patch le script de démarrage de postfix pour éviter les erreurs suivantes
postfix/smtpd[21736]: warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory warning: bch66-1-82-242-24-18.fbx.proxad.net[82.242.241.18]: SASL LOGIN authentication failed: generic failure # /etc/init.d/saslauthd restart warning: SASL authentication failure: cannot connect to saslauthd server: Permission denied postfix/smtpd[21905]: warning: bch66-1-82-242-24-18.fbx.proxad.net[82.242.24.18]: SASL LOGIN authentication failed: generic failure # chmod a+rx /var/spool/postfix/var/run/saslauthd warning: bch66-1-82-242-241-8.fbx.proxad.net[82.242.241.18]: SASL LOGIN authentication failed: authentication failure
et finalement obtient une authentification correcte :
saslauthd :get_accept_lock : acquired accept lock saslauthd :rel_accept_lock : released accept lock saslauthd :cache_get_rlock : attempting a read lock on slot: 185 saslauthd :cache_lookup : [login=userdetest@placeoweb.com] [service=placeoweb.com] [realm=smtp]: found with valid passwd saslauthd :cache_un_lock : attempting to release lock on slot: 185 saslauthd :do_auth : auth success (cached): [user=userdetest@placeoweb.com] [service=smtp] [realm=placeoweb.com] saslauthd :do_request : response: OK
le patch
# vim /etc/init.d/postfix case "$1" in start) ..... # Patch pour l'envoi via SMTP chmod a+rx /var/spool/postfix/var/run/saslauthd ;; stop)
On relance ensuite les services désirés :
/etc/init.d/postfix restart /etc/init.d/courier-authdaemon restart /etc/init.d/courier-imap restart /etc/init.d/courier-pop restart
On teste ensuite la récupération et l'envoi des mails, en principe, ça marche.
Ressources
- Postfixadmin / PostgreSQL / Courier / Squirrelmail / SpamAssassin / ClamAV on Debian Etch (Howto/Tutorial)
- Squirrelmail - PostfixAdmin plugin
- warning: SASL authentication failure: cannot connect to saslauthd server: Permission denied
- Documentation de Postfix en français
- distrib:debian:postfix multi-domaine
- How-To Debian Sarge: Postfix + SASL + MySQL + PostfixAdmin + Courier + VirtualDomain il faut installer le patch VDA pour que postfix prenne en compte les quotas. Quand vous tapez « postconf -n » et que vous ne voyez pas les lignes suivantes :
# Additional for quota support virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user’s maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes
C’est que vous n’avez pas le patch Postfix VDA !, Celui-ci est dispo à cette adresse : (Debian VDA : http://debian.home-dn.net/lenny/postfix-vda/)
Au sujet de la vérification des comptes utilisateurs mail, essayez :
# authtest contact@placeoweb.com Authentication succeeded. Authenticated: contact@comsports.fr (uid 1001, gid 1001) Home Directory: /var/mail/virtual/ Maildir: placeoweb.com/contact@placeoweb.com/ Quota: (none) Encrypted Password: $1$ea640739$YETcZQjMlstiaHZ6fkh98/ Cleartext Password: (none) Options: (none)
Attention si vous voulez activer les quotas (Résolu - Postfix et Quota), vérifiez que vous avec une ligne du genre :
Quota: 500000S
Afficher et connaitre la version du Postfix installé
# postconf -d | grep mail_version mail_version = 2.5.5 milter_macro_v = $mail_name $mail_version
Les packages debian postfix installés
# dpkg -l |grep postfix ii postfix 2.5.5-1.1 High-performance mail transport agent ii postfix-mysql 2.5.5-1.1 MySQL map support for Postfix ii postfixadmin 2.3rc7 Virtual mail hosting interface for Postfix