Postfix Admin est une interface en PHP qui permet principalement de gérer une base de données qui contiendra toutes les informations nécessaires à la maintenance de comptes virtuels. Postfix Admin n'impose pas de serveur POP/IMAP spécifique. Dovecot ou Courier-imap Pourront être utilisés, nous continuerons avec Dovecot.
Postfix Admin semble activement maintenu. La version utilisée ici est la 2.2.0 d'avril 2008. Bien que ne faisant à ce jour (17 juiller 2008) pas partie des distributions Debian, il existe sur le site officiel du projet un paquet Debian que nous allons utiliser. Les dépendances sont minimes : Dépend: apache2, libapache2-mod-php5 ou php5-cgi ou php5, Mysql-server. Autant de composants dont nous aurons besoin par ailleurs.
Suivant les règles Debian, le logiciel s'installe dans /usr/share/postfixadmin
, installe dans /etc/apache2/conf.d
un fichier nommé postfixadmin
réduit à sa plus simple expression :
# BEGIN FOR POSTFIXADMIN Alias /postfixadmin /usr/share/postfixadmin # END FOR POSTFIXADMIN
Et dans /etc/postfixadmin
le fichier config.inc.php
qu'il conviendra de modifier manuellement, mais avant tout, il faut lire /usr/share/doc/postfixadmin/INSTALL.TXT
…
Nous allons commencer par créer la base de données et l'utilisateur qui va avec :
CREATE DATABASE vmail; CREATE USER 'vmail'@'localhost' IDENTIFIED BY 'epikoi'; GRANT ALL PRIVILEGES ON `vmail` . * TO 'vmail'@'localhost';
Le fichier /etc/postfixadmin/config.inc.php
est assez long, bien documenté et il faut le lire jusqu'au bout…
Voici pour fixer les idées, une version débarrassée de ses commentaires. Ce qui est surligné est particulièrement important, mais encore une fois, prenez le temps de lire (et éventuellement modifier) ce fichier jusqu'au bout.
<?php if (ereg ("config.inc.php", $_SERVER['PHP_SELF'])) { header ("Location: login.php"); exit; } $CONF['configured'] = true; $CONF['postfix_admin_url'] = 'http://cyrus.nain-t.net/postfixadmin'; $CONF['postfix_admin_path'] = '/usr/share/postfixadmin'; $CONF['default_language'] = 'fr'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'vmail'; $CONF['database_password'] = 'epikoi'; $CONF['database_name'] = 'vmail'; $CONF['database_prefix'] = ''; $CONF['database_tables'] = array ( 'admin' => 'admin', 'alias' => 'alias', 'config' => 'config', 'domain' => 'domain', 'domain_admins' => 'domain_admins', 'log' => 'log', 'mailbox' => 'mailbox', 'vacation' => 'vacation', 'vacation_notification' => 'vacation_notification', ); $CONF['admin_email'] = 'sysop@nain-t.net'; $CONF['smtp_server'] = 'localhost'; $CONF['smtp_port'] = '25'; $CONF['encrypt'] = 'md5crypt'; $CONF['min_password_length'] = 5; $CONF['generate_password'] = 'NO'; $CONF['show_password'] = 'yes'; $CONF['page_size'] = '10'; $CONF['default_aliases'] = array ( 'abuse' => 'sysop@nain-t.net', 'hostmaster' => 'sysop@nain-t.net', 'postmaster' => 'sysop@nain-t.net', 'webmaster' => 'sysop@nain-t.net' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; $CONF['aliases'] = '0'; $CONF['mailboxes'] = '0'; $CONF['maxquota'] = '2000'; $CONF['quota'] = 'NO'; $CONF['quota_multiplier'] = '1024000'; $CONF['transport'] = 'NO'; $CONF['transport_options'] = array ( 'virtual', // for virtual accounts 'local', // for system accounts 'relay' // for backup mx ); $CONF['transport_default'] = 'virtual'; $CONF['vacation'] = 'NO'; $CONF['vacation_domain'] = 'autoreply.nain-t.net'; $CONF['vacation_control'] ='YES'; $CONF['vacation_control_admin'] = 'YES'; $CONF['alias_control'] = 'NO'; $CONF['alias_control_admin'] = 'NO'; $CONF['special_alias_control'] = 'NO'; $CONF['alias_goto_limit'] = '0'; $CONF['backup'] = 'YES'; $CONF['sendmail'] = 'YES'; $CONF['logging'] = 'YES'; $CONF['fetchmail'] = 'YES'; $CONF['fetchmail_extra_options'] = 'NO'; $CONF['show_header_text'] = 'NO'; $CONF['header_text'] = ':: Postfix Admin ::'; $CONF['user_footer_link'] = "http://cyrus.nain-t.net/postfixadmin"; $CONF['show_footer_text'] = 'YES'; $CONF['footer_text'] = 'Return to nain-t.net'; $CONF['footer_link'] = 'http://nain-t.net'; $CONF['welcome_text'] = <<Notez les alias qui pointent tous vers
sysop@nain-t.net
qui est un compte qu'il nous faudra créer et qui sera celui du super-administrateur du site.
Il faut maintenant, après avoir demandé à l'Apache de relire sa configuration, ce que le script « postinstall » du paquet postfixadmin n'a pas fait, d'aller sur l'URL de votre installation. Ici :
http://cyrus.nain-t.net/postfixadmin/setup.php
De corriger les éventuels erreurs constatées, de créer le compte du « super administrateur » et enfin de renommer ou détruire le fichier /usr/share/postfixadmin/setup.php
.
Postfixadmin devrait être en état de fonctionner, hormis l'envoi de messages puisque nous n'avons pas encore configuré Postfix en fonction.
La base de données a été construite lors du « setup ». Elle contient les tables admin, alias, config, domain, domain_admins, fetchmail, log, mailbox, vacation et vacation_notification.
Créons le domaine nain-t.net et le compte sysop@nain-t.net et regardons un peu :
mysql> select * from alias; +-----------------------+------------------+------------+---------------------+---------------------+--------+ | address | goto | domain | created | modified | active | +-----------------------+------------------+------------+---------------------+---------------------+--------+ | abuse@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 | | hostmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 | | postmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 | | webmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 | | sysop@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15 16:16:01 | 2008-07-15 16:16:01 | 1 | +-----------------------+------------------+------------+---------------------+---------------------+--------+
Dans la table alias
nous retrouvons les alias définis dans la configuration, et sysop@nain-t.net
qui pointe sur lui-même.
mysql> select * from mailbox; +------------------+------------------------------------+------------------+-------------------+-------+------------+---------------------+---------------------+--------+ | username | password | name | maildir | quota | domain | created | modified | active | +------------------+------------------------------------+------------------+-------------------+-------+------------+---------------------+---------------------+--------+ | sysop@nain-t.net | $1$b05611fa$K.98vXKRWNG5Xr97dlkcp1 | sysop | nain-t.net/sysop/ | 0 | nain-t.net | 2008-07-15 16:16:01 | 2008-07-15 16:16:01 | 1 | +------------------+------------------------------------+------------------+-------------------+-------+------------+---------------------+---------------------+--------+
Dans la table mailbox
nous trouvons pas mal de choses :
username
contient l'adresse du compte ;name
contient la partie gauche de l'adresse ;domain
contient le nom du domaine virtuel (partie droite de l'adresse) ;password
contient le mot de passe chiffré en MD5-CRYPT
;maildir
contient le chemin relatif du répertoire Maildir
de l'utilisateur.mysql> select * from domain; +------------+----------------+---------+-----------+----------+-------+-----------+----------+---------------------+---------------------+--------+ | domain | description | aliases | mailboxes | maxquota | quota | transport | backupmx | created | modified | active | +------------+----------------+---------+-----------+----------+-------+-----------+----------+---------------------+---------------------+--------+ | ALL | | 0 | 0 | 0 | 0 | NULL | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 1 | | nain-t.net | Domaine public | 0 | 0 | 0 | 0 | virtual | 0 | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 | +------------+----------------+---------+-----------+----------+-------+-----------+----------+---------------------+---------------------+--------+ La table ''domain'' contient essentiellement la liste des domaines virtuels créés.