Table des matières

Partie 3 : Postfixadmin

Postfixadmin est une interface web qui permet de gérer les comptes, les domaines et les alias sur un serveur de messagerie électronique Postfix.

Installation

Allez dans le répertoire /var/www et lancez la commande suivante pour télécharger Postfixadmin :

sudo -u www-data wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz

Extrayez l'archive :

sudo -u www-data tar xzfv postfixadmin-3.3.11.tar.gz

Puis renommez le répertoire postfixadmin-postfixadmin-3.3.11 en postfixadmin :

sudo -u www-data mv postfixadmin-postfixadmin-3.3.11/ postfixadmin

Créez le répertoire /var/www/postfixadmin/templates_c avec l'utilisateur www-data :

sudo -u www-data mkdir /var/www/postfixadmin/templates_c

Base de données

On a besoin de créer manuellement la base de données pour Postfixadmin.

Lancez mysql :

sudo mysql

Créez la base de données :

CREATE DATABASE postfixadmin;

Créez l'utilisateur postfixadmin et donnez-lui tous les droits sur la base (changez “motdepasse” par le mot de passe de votre choix) :

GRANT ALL privileges ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'motdepasse';

Rechargez les droits :

FLUSH privileges;

Sortez :

exit;

Configuration Dovecot

Ouvrez le fichier dovecot-sql.conf.ext pour configurer l'accès à la base de domaine pour Dovecot (qui gère l'authentification dans notre configuration) :

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Ajoutez ces lignes à la fin (remplacez “motdepasse” par le mot de passe que vous avez choisi précédemment) :

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=motdepasse

default_pass_scheme = ARGON2I

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

iterate_query = SELECT username AS user FROM mailbox

Passons à la configuration de Postfixadmin pour accéder à la base.

Configuration Postfixadmin

Créez le fichier config.local.php dans le répertoire de Postfixadmin :

sudo -u www-data nano /var/www/postfixadmin/config.local.php

Ajoutez les lignes suivantes (remplacez le mot de passe) :

<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'motdepasse';
$CONF['database_name'] = 'postfixadmin';
$CONF['encrypt'] = 'dovecot:ARGON2I';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5";
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171
    $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian
}

Maintenant, créez le dossier /etc/postfix/sql/ Créez le fichier /etc/postfix/sql/mysql_virtual_domains_maps.cf et ajoutez les lignes suivantes :

user = postfixadmin
password = motdepassesqlpostfixadmin
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#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'
#expansion_limit = 100

Ensuite, on configure Postfix.

Configuration Postfix

On va créer l'utilisateur vmail avec l'ID 2000 et le groupe ID 2000 :

sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home

Créez le répertoire /var/vmail :

sudo mkdir /var/vmail/

Changer le propriétaire du répertoire :

sudo chown vmail:vmail /var/vmail/ -R

Ouvrez le fichier main.cf :

sudo nano /etc/postfix/main.cf

Ajoutez les lignes suivantes pour la gestion des adresses et domaines avec Postfixadmin via la base de données précédemment créé :

# Noms de domaine des boites de courriel
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
# Adresses des courriels (adresses réelles et alias)
virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
# Redirection des courriels à destination d'une adresse vers une autre adresse
virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

# UID et GID de l'utilisateur vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

On va maintenant créer tous les fichiers .cf que l'on a ajouté dans le fichier main.cf. Remplacez le “motdepasse” par le mot de passe que vous avez choisi lors de la création de la base de données.

Créez le fichier mysql_virtual_mailbox_maps.cf :

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Ajoutez les lignes suivantes :

user = postfixadmin
password = motdepasses
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100

Créez le fichier mysql_virtual_alias_domain_mailbox_maps.cf :

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Ajoutez les lignes suivantes :

user = postfixadmin
password = motdepasse
hosts = localhost
dbname = postfixadmin
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 AND alias_domain.active='1'

Créez le fichier mysql_virtual_alias_maps.cf

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

Ajoutez les lignes suivantes :

user = postfixadmin
password = motdepasse
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

Créez le fichier mysql_virtual_alias_domain_maps.cf :

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

Ajoutez les lignes suivantes :

user = postfixadmin
password = motdepasse
hosts = localhost
dbname = postfixadmin
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 AND alias_domain.active='1'

Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf :

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Ajoutez les lignes suivantes :

# handles catch-all settings of target-domain
user = postfixadmin
password = motdepasse
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

On va protéger ces fichiers contenant le mot de passe d'accès à la base afin que seul l'utilisateur root et postfix y ait accès :

sudo chmod 0640 -R /etc/postfix/sql/
sudo chown root:postfix -R /etc/postfix/sql/
sudo chmod 755 /etc/postfix/sql/

Configuration Apache2

Postfixadmin étant une interface web, il va nous falloir configurer Apache2 pour pouvoir y accéder.

Créez le fichier de configuration postfixadmin.domaine.fr.conf (remplacez domaine.fr par votre nom de domaine) :

sudo nano /etc/apache2/sites-available/postfixadmin.domaine.fr.conf

Ajoutez les lignes suivantes (remplacez domaine.fr par votre domaine) :

<VirtualHost *:80>  
 
        DocumentRoot /var/www/postfixadmin/public
 
        ServerName postfixadmin.domaine.fr
 
        Redirect / https://postfix.domaine.fr/
 
</VirtualHost>
 
<VirtualHost *:443>
 
        DocumentRoot /var/www/postfixadmin/public
 
        ServerName postfixadmin.domaine.fr
 
        CustomLog ${APACHE_LOG_DIR}/postfixadmin.access.log combined
        ErrorLog ${APACHE_LOG_DIR}/postfixadmin.error.log
        LogLevel warn
 
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem
 
        Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self'; media-src 'self';  child-src 'self'; object src 'self'; form-action 'self'; img-src 'self' data:"
 
        <Directory /var/www/postfixadmin/>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>                                                                                     

Activez le fichier de configuration :

sudo a2ensite postfix.domaine.fr

Installez les modules PHP nécessaires :

sudo aptitude install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp

Redémarrer Apache2 :

sudo systemctl restart apache2.service

Ajouter l'utilisateur www-data au groupe dovecot pour qu'il ait accès aux fichier Dovecot :

sudo adduser www-data dovecot

Afin que l'utilisateur www-data est accès aux stats de Dovecot lancez le commandes suivantes :

sudo chown root:dovecot /var/run/dovecot/stats-*
sudo chmod 660 /var/run/dovecot/stats-*

Allez à l'adresse https://postfixadmin.domaine.fr/setup.php afin de lancer l'installation de Postfixadmin

Générez le setup_password et rajoutez la ligne $CONF['setup_password'] au fichier de config de Postfixadmin comme indiqué puis rafraîchissez la page. Rentrez le setup_password que vous avez utilisé précédemment puis créez l'utilisateur admin. Dans le champ Administrateur il faut entrer une adresse mail et non un nom d'utilisateur.

Connectez-vous sur postfixadmin.domaine.fr pour pouvoir configurer votre serveur de messagerie électronique.

Dovecot et Postfix sont installés, Postfixadmin configuré. Il est temps de faire connaissance avec SPF, DMARC et DKIM

Source : https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp