PostfixAdmin est une interface web en php permettant de créer et gérer des domaines de messagerie quand postfix est configuré pour les domaines et utilisateurs virtuels stockés au sein d’une base mysql.
[toc title="Table des Matières" hint="Table des Matières" class="toc-right" style="inline CSS style"]
[toc auto=off]
Installation des paquets de base
On installe les paquets debian dont nous allons avoir besoin c’est à dire au minimun :
- Le serveur MySQL 3.23 ou supérieur.
- Le serveur de messagerie postfix 2.0 ou supèrieur.
- Le serveur web apache 1.3.27 ou supérieur.
- Le module php pour apache 4.1 ou supérieur
- Le serveur pop3
- phpmyadmin (optionnel)
apt-get install mysql-server postfix apache2 libapache2-mod-php5 courier-authlib-mysql phpmyadmin
On accepte les dépendance que apt calcule et on installe le tout. Pour des soucis de sécurité on fixe un mot de passe de connection à la base MySQL pour l’utilisateur local root.
mysqladmin -u root password mysecretpassword
Patch VDA pour postfix afin de gérer les quotas sur les boites e-mail (optionnel)
Si l’on souhaite gérer les quotas sur les boites e-mail, car postfix en natif ne prend pas en compte cette fonctionnalité, il nous faut la prise en compte du patch VDA pour postfix.
Pour cela il faut récupérer les sources du paquet Debian Postfix, lui appliquer le patch VDA, créer un nouveau paquet .deb pour Postfix et l’installer en lieu et place de celui actuellement installé.
Pour construire ce nouveau paquet .deb il va falloir installer quelque paquets Debian supplémentaires :
apt-get install build-essential dpkg-dev binutils make dpatch debhelper lsb-release libdb4.3-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient15-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev
On a maintenant les paquets nécessaire pour construire notre paquet postfix avec patch VDA.
On vérifie que l’on a bien un repository source dans le fichier /etc/apt/sources.list.
cat /etc/apt/sources.list deb http://debian.ens-cachan.fr/ftp/debian/ etch main deb-src http://debian.ens-cachan.fr/ftp/debian/ etch main deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib
C’est ici le cas (ligne en gras), on peux donc commencer à récupérer les sources de postfix et leur appliquer le patch VDA pour construire notre nouveau paquet postfix debian.
cd /usr/src apt-get source postfix wget http://vda.sourceforge.net/VDA/postfix-2.3.8-vda.patch.gz gunzip postfix-2.3.8-vda.patch.gz cd postfix-2.3.8 patch –p1 < ../postfix-2.3.8-vda.patch dpkg-buildpackage
Attendre la fin de la compilation, puis installer les paquets .deb suivants :
cd .. dpkg –i postfix_2.3.8-2_i386.deb dpkg -i postfix-doc_2.3.8-2_all.deb dpkg –i postfix-mysql-2.3.8-1_i386.deb
Vérifier que le support MySQL est bien pris en compte par Postfix
posfconf -m
btree cidr environ hash mysql nis proxy regexp sdbm static tcp unix
La ligne mysql doit apparaître.
Le nouveau paquet Postfix installé prend donc maintenant en compte le support MySQL et les quotas sur les boites e-mail.
Installation et configuration de PostfixAdmin
On récupère les sources de PostfixAdmin
cd /usr/local/share wget http://mesh.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-2.1.0.tgz tar -xzvf postfixadmin-2.1.0.tgz rm postfixadmin-2.1.0.tgz
Comme indiqué dans le INSTALL.TXT on change les permissions des fichiers dans les répertoires suivants :
cd /usr/local/share/postfixadmin-2.1.0 chmod 640 *.php *.css cd /usr/local/share/postfixadmin-2.1.0/admin/ chmod 640 *.php .ht* cd /usr/local/share/postfixadmin-2.1.0/images/ chmod 640 *.png cd /usr/local/share/postfixadmin-2.1.0/languages/ chmod 640 *.lang cd /usr/local/share/postfixadmin-2.1.0/templates/ chmod 640 *.tpl cd /usr/local/share/postfixadmin-2.1.0/users/ chmod 640 *.php
On change le proprietaire et le groupe d’appartenance pour le répertoire et tous ses sous-répertoires.
chown -R www-data:www-data /usr/local/share/postfixadmin-2.1.0
Puis on crée un lien symbolique à la racine de notre serveur apache2
ln -s /usr/local/share/postfixadmin-2.1.0 /var/www/postfixadmin
Par soucis de sécurité et afin de ne pas laisser les mots de passe par défaut, on édite le fichier /usr/local/share/postfixadmin-2.1.0/DATABASE_MYSQL.TXT et l’on modifie les lignes suivantes :
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix')); INSERT INTO user (Host, User, Password) VALUES 'localhost','postfixadmin',password('postfixadmin'));
par
INSERT INTO user (Host, User, Password) VALUES localhost','postfix' \ ,password('mysecretpassword')); INSERT INTO user (Host, User, Password) VALUES localhost','postfixadmin' \ ,password('mysecretpassword'));
On peux maintenant créer les tables SQL de PostfixAdmin
mysql -u root -p < DATABASE_MYSQL.TXT
On renomme le fichier config.inc.php.sample en config.inc.php dans le répertoire /usr/local/share/postfixadmin-2.1.0
cp -p config.inc.php.sample config.inc.php
On modifie les sections suivantes pour notre configuration.
// Postfix Admin Path // Set the location to your Postfix Admin installation here. $CONF['postfix_admin_url'] = 'http://x.x.x.x/postfixadmin/admin'; $CONF['postfix_admin_path'] = '/var/www/postfixadmin/admin'; // Database Config // mysql = MySQL 3.23 and 4.0 // mysqli = MySQL 4.1 // pgsql = PostgreSQL $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = 'mysecretpassword'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ; // Site Admin // Define the Site Admins email address below. // This will be used to send emails from to create mailboxes. $CONF['admin_email'] = 'admin@domain.tld'; // Default Aliases // The default aliases that need to be created for all domains. $CONF['default_aliases'] = array ( 'abuse' => 'abuse@domain.tld'', 'postmaster' => 'admin@domain.tld.local'', ); // Mailboxes // If you want to store the mailboxes per domain set this to 'YES'. // Example: /usr/local/virtual/domain.tld/username@domain.tld $CONF['domain_path'] = 'YES'; // If you don't want to have the domain in your mailbox set this to 'NO'. // Example: /usr/local/virtual/domain.tld/username $CONF['domain_in_mailbox'] = 'NO'; // Quota // When you want to enforce quota for your mailbox users set this to 'YES'. $CONF['quota'] = 'YES'; // You can either use '1024000' or '1048576' $CONF['quota_multiplier'] = '1024000';
Ensuite afin de sécuriser l’ensemble du répertoire admin et ses fichiers php on modifie le fichier .htaccess dans /usr/local/share/postfixadmin-2.1.0/admin/.
< pre>AuthUserFile /var/www/postfixadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName « Postfix Admin »
AuthType Basic
<limit GET POST>
require valid-user
</limit>
On défini le mot de passe grace a la commande suivante :
htpasswd -b /var/www/postfixadmin/admin/.htpasswd admin mysecretpassword
Attention il se peut que malgrés cela la demande de nom d’utilisateur et mot de passe lors de l’accès aux pages web dans le répertoire admin ne fonctionne pas. Cela est dû à la présence des lignes suivantes dans le fichier /etc/apache2/sites-enabled/000-default :
<Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place RedirectMatch ^/$ /apache2-default/ </Directory>
Dans ce cas ajouter les lignes suivantes à ce fichier :
<Directory /var/www/postfixadmin/admin> AuthUserFile /var/www/postfixadmin/admin/.htpasswd AuthGroupFile /dev/null AuthName "Postfix Admin" AuthType Basic <limit GET POST> require valid-user </limit> Allowoverride All </Directory>
Redémarré le serveur Apache et re testé l’accès au pages web du répertoire admin.
/etc/init.d/apache2 restart
Renommez ou supprimez le fichier /var/www/postfixadmin/setup.php afin que personne n’y ai plus accès.
mv /var/www/postfixadmin/setup.php /var/www/postfixadmin/setup.php.bak
Renommez ou supprimez le fichier /var/www/postfixadmin/motd-admin.txt afin de ne plus avoir le motd en plein milieu de la page web d’administration
mv /var/www/postfixadmin/motd-admin.txt /var/www/postfixadmin/motd-admin.txt.bak
Configuration de postfix
On Crée un utilisateur et un groupe appelé vmail avec un UID/GDI fixé à 5000 ne pouvant pas se logger sur le système.
groupadd –g 5000 vmail useradd –g vmail –u 5000 vmail –d /home/vmail –s /bin/false
On crée le répertoire où seront stocké les mails pour les utilisateurs et domaines virtuels.
mkdir -p /var/mail/vmail chown -R 5000:5000 /var/mail/vmail chmod -R 770 /var/mail/vmail
On modifie ensuite la configuration de postfix en lui ajoutant les lignes suivantes (lignes en gras) :
#Ajouter par Debian smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no #Nom FQDN du serveur postfix myhostname = mail.alpha.tld myorigin = alpha.tld #Relais de messagerie a utiliser dans le cas ou le client n'as pas une vraie adresse ip fixe # sinon on laisse vide. relayhost = #Specifie sur quelles interfaces postfix écoute inet_interfaces = all #Reseau ip de confiance, relay des mail autorisé pour les clients faisant parti de ces reseaux. mynetworks = 127.0.0.0/8 192.168.0.0/24 #Les quotas sur les mailbox sont géres via patch VDA et interrogation base MySQL mailbox_size_limit = 0 #Pas de fichier d’alias local ceux-ci sont stockes dans la base MySQL alias_maps = #Limite max pour un e-mail, attention cette valeur doit etre inferieur au quota fixe sur #les boite e-mail. message_size_limit = 5242880 #On utilise l’agent de transport virtual du master.cf virtual_transport = virtual #Fichier de conf pour la recherche des alias virtuels dans la bdd MySQL virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/mysql-virtual_alias.cf #Fichier de conf pour la recherche des domain virtuels dans la bdd MySQL virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/mysql-virtual_domains.cf #Fichier de conf pour la recherche des boites e-mail virtuels dans la bdd MySQL virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/mysql-virtual_mailboxes.cf #Fichier de conf pour la recherche des domaines MX que l'on backup dans la bdd MySQL. relay_domains = proxy:mysql:/etc/postfix/mysql/mysql-virtual_domains_relay.cf #Fichier de conf pour la recherche des quota des boites e-mail dans la bdd MySQL virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql/mysql-virtual_limit_maps.cf #Racine a partir de laquelle seront stocke les boites e-mail virtual_mailbox_base = /var/vmail #Utilisateur a qui appartient les repertoires ou seront deposes les e-mails par l’agent #de transport de postfix virtuel virtual_uid_maps = static:5000 #Groupe a qui appartient les repertoires ou seront deposes les e-mails par l’agent virtuel de #transport de postfix virtual_gid_maps = static:5000 #On autorise la creation des boites e-mail par postfix si elles n’ont pas ete crees sous var/mail/vhost virtual_create_maildirsize = yes #Utilisation des formats de fichier compatibles IMAP. virtual_mailbox_extended = yes #Ajout virtual-mailbox_limit-maps a proxy_read_maps pour autorise l’utilisation de proxymap #qui ameliore les temps de connection a la base MySQL et résoud les pb de chroot. proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps #Pas de gestion de softquota le seuil du quota est inscrit en dur dans la bdd MYSQL. virtual_mailbox_client_limit_override = no #Envoie notification a l’expéditeur que le quota du destinataire est atteint virtual_overquota_bounce = yes #Message retourne a l’utilisateur si la boite email du destinataire a atteint son quota maximum virtual_mailbox_limit_message = "The user your are trying to reach is over quota please try later"
On crée les fichiers de configuration nécessaire à la communication entre Postfix et MySQL et on les renseigne.
mkdir -p /etc/postfix/mysql touch /etc/postfix/mysql/mysql-virtual_alias.cf touch /etc/postfix/mysql/mysql-virtual_domains.cf touch /etc/postfix/mysql/mysql-virtual_mailboxes.cf touch /etc/postfix/mysql/mysql-virtual_domains_relay.cf touch /etc/postfix/mysql/mysql-virtual_limit_maps.cf
mysql-virtual_alias.cf
user = postfix password = mysecretpassword hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
mysql-virtual_domains.cf
user = postfix password = mysecretpassword hosts = localhost dbname = postfix #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'
mysql-virtual_domains_relay.cf
user = postfix password = mysecretpassword hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
mysql-virtual_limit_maps.cf
user = postfix password = mysecretpassword hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s'
mysql-virtual_mailboxes.cf
user = postfix password = mysecretpassword hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
une fois les modification effectué on peux redemarrer les serveur postfix
Testez Postfix et PostfixAdmin
Se connecté a l’interface d’administration de PostfixAdmin à l’adresse http://x.x.x.x/postfixadmin/admin et créer deux domaines alpha.tld et beta.tld, créer également deux utilsateurs dans chaque domaines user1 et user2.
Vérifier dans le répertoire /var/mail/vmail que les répertoires pour les domaines ont bien été crées ai nsi que les répertoires des utilisateurs sous chaque domaine.
Dans chaque répertoires utilisateur doit figurer un mail de bienvenue qui a été envoyé lors de la création de la mailbox par postfixadmin afin de crée la structure maildir.