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

# 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