PostfixAdmin est une interface web en PHP qui permet de gérer facilement le serveur de mail postfix. L’installation décrite ici est postérieure à l’installation et la configuration de postfix avec dovecot (voir ce post). Elle est donc expliquée pour ce cas précis bien que la procédure puisse être adaptée à une installation « classique » dans laquelle PostfixAdmin est installé avant postfix.

PostfixAdmin is a web based administration interface for postfix. This post describes how to install PostfixAdmin after postfix has been installed and configured to work with dovecot (as in this post ce post). Nevertheless, the post is general enough to be usable in a standard installation where PostfixAdmin should be installed before postfix is configured.
I should have written: this post will be general enough… (it is already « general enough » but in French!)

Avant propos : ce tutoriel a été écrit pour un serveur sous Ubuntu server, version 10.04 (LTS).

Installation et configuration de base

Récupérer le fichier .deb de postfixadmin sur le site de sourceforge et l’installer : au préalable, le package php5-imapdoit être installé :

sudo apt-get install php5-imap
sudo dpkg -i postfixadmin_2.3.5-1_all.deb

Lors de l’installation de postfixadmin, la base de données associées peut être créée : il faut renseigner son type (ici, mysql), son nom (ici, postfixadmindb), un nom d’utilisateur (ici, postfixadminuser) et un mot de passe utilisateur (que l’on notera mypasswddans la suite). L’application est rendue accessible sur le serveur web par la création d’un lien symbolique puis on restreint l’accès à l’application :

ln -s /usr/share/postfixadmin /var/www/postfixadmin
chmod -R o-r /usr/share/postfixadmin
chown root:www-data -R /usr/share/postfixadmin

L’application est alors accessible à http://www.domain-name.org/postfixadminwww.domain-name.org est l’adresse habituelle du serveur web. Lancer le script d’installation : http://www.domain-name.org/postfixadmin/setup.php : entrez un mot de passe dans l’espace « setup password » ; en validant, postfixadmin vous indique d’éditer le fichier /etc/postfixadmin/config.inc.phppour y modifier la ligne

$CONF['setup_password'] = 'xxxx';

xxxx est une longue chaîne de caractères correspondant au mot de passe que vous venez de préciser. Entrer alors un administrateur (une adresse email, par exemple postmaster@domain-name.org) et un mot de passe pour cet administrateur. Enfin, les dernières modifications du fichier de configuration /etc/postfixadmin/config.inc.phppeuvent être effectuées :

# Email de l'administrateur
$CONF['admin_email'] = 'postmaster@domain-name.org';
# Configuration de la base de données
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadminuser';
$CONF['database_password'] = 'mypasswd';
$CONF['database_name'] = 'postfixadmindb';
# Alias par défaut
$CONF['default_aliases'] = array ( 'abuse' =>; 'postmaster@nathalievilla.org',
  'hostmaster' =>; 'postmaster@nathalievilla.org',
  'postmaster' =>; 'postmaster@nathalievilla.org',
  'webmaster' =>; 'postmaster@nathalievilla.org' );
# Configuration du service de vacances (ici non)
$CONF['vacation'] = 'NO';
# Configuration des liens
$CONF['user_footer_link'] = "https://www.domain-name.org/postfixadmin/users";
$CONF['footer_text'] = 'Return to nathalievilla.org';
$CONF['footer_link'] = 'https://www.nathalievilla.org';
# Création des chemins pour les boîtes mail, en adéquation avec dovecot
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['create_mailbox_subdirs_prefix']='';
# Configuration de la récupération d'emails avec fetchmail (ici non)
$CONF['fetchmail'] = 'NO';

(re)-Configurer postfix

La première chose à faire, avant de lancer la reconfiguration de postfix, est de redéfinir dans postfixadmin les domaines, utilisateurs et alias qui avaient été définis dans postfix (et ceci afin d’éviter une coupure du serveur mail). Pour cela, dans un navigateur, se connecter à postfixadmin avec l’adresse http://www.domain-name.org/postfixadmin, se loguer avec l’adresse email administrateur définie plus haut postmaster@domain-name.orget entrer le mot de passe correspondant. L’interface est intuitive : on crée noms de domaine, puis alias de noms de domaines puis utilisateurs et alias d’utilisateurs. Dans la suite, on supposera que les données suivantes ont été rentrées :

  • deux domaines (comme dans ce post) : server.domain-name.org et domain-name.org ;
  • un alias de domaine de server.domain-name.org vers domain-name.org ;
  • un utilisateur tuxette@domain-name.org ;
  • un alias utilisateur de postmaster@domain-name.org vers tuxette@domain-name.org.

Des références utiles pour configurer/re-configurer postfix peuvent être trouvées ici (en français) et (en anglais). Dans la suite, on part d’un serveur postfix déjà configuré ; si ce n’est pas le cas, les manipulations sont les mêmes : la seule différence réside dans le fait que les fichiers peuvent être créés directement, sans recours à des versions provisoires (.new) destinées uniquement à ne pas couper le serveur. Dans le répertoire /etc/postfix, créez les fichiers :

  1. main.cf.new:
    cp main.cf main.cf.new

    puis éditer le fichier main.cf.newet modifier les lignes

    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf,
      mysql:/etc/postfix/mysql-virtual-mailbox-alias-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
      mysql:/etc/postfix/mysql-virtual-alias-alias-maps.cf
  2. mysql-virtual-mailbox-domains.cf.new : éditer ce nouveau fichier pour y insérer :
    user = postfixadminuser
    password = mypasswd
    hosts = 127.0.0.1
    dbname = postfixadmindb
    query = SELECT domain FROM domain WHERE domain='%s'

    On peut tester le bon fonctionnement du fichier par la commande

    postmap -q domain-name.org mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf.new

    qui doit répondre domain-name.org ;</li>

  3. mysql-virtual-mailbox-maps.cf.new : éditer ce nouveau fichier pour y insérer :
    user = postfixadminuser
    password = mypasswd
    hosts = 127.0.0.1
    dbname = postfixadmindb
    query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

    On peut tester le bon fonctionnement du fichier par la commande

    postmap -q tuxette@domain-name.org mysql:/etc/postfix/mysql-virtual-mailbox-maps.new

    qui doit répondre domain-name.org/tuxette ;</li>

  4. mysql-virtual-mailbox-alias-maps.cf : éditer ce nouveau fichier pour y insérer :
    user = postfixadminuser
    password = mypasswd
    hosts = 127.0.0.1
    dbname = postfixadmindb
    query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d'
      AND mailbox.username= concat('%u', '@', alias_domain.target_domain ) AND mailbox.active = 1

    On peut tester le bon fonctionnement du fichier par la commande

    postmap -q tuxette@server.domain-name.org
      mysql:/etc/postfix/mysql-virtual-mailbox-alias-maps.cf

    qui doit répondre domain-name.org/tuxette ;</li>

  5. mysql-virtual-alias-maps.cf.new : éditer ce nouveau fichier pour y insérer :
    user = postfixadminuser
    password = mypasswd
    hosts = 127.0.0.1
    dbname = postfixadmindb
    query = SELECT goto FROM alias WHERE address='%s' AND active = 1

    On peut tester le bon fonctionnement du fichier par la commande

    postmap -q postmap -q contact@domain-name.org
      mysql:/etc/postfix/mysql-virtual-alias-maps.cf.new

    qui doit répondre domain-name.org/tuxette ;</li>

  6. mysql-virtual-alias-alias-maps.cf : éditer ce nouveau fichier pour y insérer :
    user = postfixadminuser
    password = mypasswd
    hosts = 127.0.0.1
    dbname = postfixadmindb
    query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' 
      AND alias.address=concat('%u', '@', alias_domain.target_domain) AND alias.active = 1

    On peut tester le bon fonctionnement du fichier par la commande

    postmap -q contact@server.domain-name.org
      mysql:/etc/postfix/mysql-virtual-alias-alias-maps.cf

    qui doit répondre domain-name.org/tuxette.</li> </ol>

    On finalise l’installation en écrasant tous les anciens fichiers avec le nouveaux ainsi créés et en redémarrant postfix :

    cp mysql-virtual-mailbox-domains.cf.new mysql-virtual-mailbox-domains.cf
    cp mysql-virtual-mailbox-maps.cf.new mysql-virtual-mailbox-maps.cf
    cp mysql-virtual-alias-maps.cf.new mysql-virtual-alias-maps.cf
    cp main.cf.new main.cf /etc/init.d/postfix restart

    (re)-Configurer dovecot

    Dans le répertoire /etc/dovecot, se trouve le fichier dovecot-sql.conf. On va le sauver puis le modifier pour qu’il interroge la base de données de postfixadmin et non plus la base de données de postfix.

    sudo cp dovecot-sql.conf dovecot-sql.save
    sudo nano dovecot-sql.conf

    On modifie les lignes suivantes :

    connect = host=127.0.0.1 dbname=postfixadmindb user=postfixadminuser password=mypasswd
    default_pass_scheme = MD5-CRYPT
    password_query = SELECT username as user, password FROM mailbox WHERE username='%u';

    puis on redémarre dovecot pour prendre en compte la modification

    sudo service dovecot restart

    </div>