Si vous possédez et gérez votre propre serveur email, il peut être très intéressant de proposer des comptes emails et des alias pour vos utilisateurs.

J’ai écrit il y a quelques années un tutoriel qui faisait cela à la main avec une base SQL et des domaines virtuels mais il y a aujourd’hui beaucoup plus simple avec PostfixAdmin.

PostfixAdmin

PostfixAdmin est une interface web open-source qui permet de gérer des comptes mails, des domaines et des alias sur un serveur mail Postfix.

il s’intègre avec

  • Postfix
  • un server IMAP/POP3 comme Dovecot ou Courier
  • une base de données (sqlite, mysql, postgresql)
  • Fetchmail (optionnel)

Il est très utile pour créer des alias à la volée ou des comptes mail rapidement.

Création du sous-domaine

Je trouve cela plus simple de créer un sous-domaine pour ce type d’application. Dans votre gestionnaire DNS, il suffit d’ajouter un enregistrement de type A:

XXXXX.EXAMPLE.COM IN A xxx.xxxx.xxx.xxx

XXXXX est votre sous-domaine sur EXAMPLE.COM et xxx.xxx.xxx.xxx l’adresse IPv4 de votre serveur.

Création de la base de données

Nous utilisons MySQL/MariaDB pour postfix donc on s’identifie sur la console mysql :

mysql -u root -p 

[MOT DE PASSE ROOT]

Et on lance:

CREATE DATABASE postfix; 
CREATE USER 'mymailadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY '1nyXI7Y)$spmslgz4HhdE4Lc_vm&)Gh!MsZFf64645fek'; 
GRANT ALL PRIVILEGES ON postfix.* TO 'mymailadmin'@'localhost'; 
FLUSH PRIVILEGES; EXIT;

Nous avons donc un nouvel utilisateur et une nouvelle base de données, spécifiques pour PostfixAdmin.

Configuration NginX pour PostfixAdmin

On crée un nouveau server block spécifique à PostfixAdmin:

nano /etc/nginx/sites-available/postfixadmin.conf

Voici notre configuration:

upstream php-handler-pfa {
     server unix:/run/php/php7.4-fpm.sock;
 }
 server {
     listen 80;
     listen [::]:80;
     server_name XXXXX.EXAMPLE.COM;
     # enforce https
     return 301 https://$server_name$request_uri;
 }
 server {
     listen 443 ssl http2;
     listen [::]:443 ssl http2;
     server_name XXXXX.EXAMPLE.COM;
      ssl_certificate         /etc/nginx/ssl/skyminds.net/fullchain.pem;      ssl_certificate_key     /etc/nginx/ssl/skyminds.net/privkey.pem; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first.
 #   add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload;";
     #
     # WARNING: Only add the preload option once you read about
     # the consequences in https://hstspreload.org/. This option
     # will add the domain to a hardcoded list that is shipped
     # in all major browsers and getting removed from this list
     # could take several months.
     add_header X-Content-Type-Options nosniff;
     add_header X-XSS-Protection "1; mode=block";
     add_header X-Robots-Tag none;
     add_header X-Download-Options noopen;
     add_header X-Permitted-Cross-Domain-Policies none;
     add_header Referrer-Policy "strict-origin-when-cross-origin";
 # Remove X-Powered-By, which is an information leak fastcgi_hide_header X-Powered-By; # Path to the root of your installation root /home/www/postfixadmin/public; error_log /var/log/nginx/pfa.log;
 location / {
       try_files $uri $uri/ /index.php?$args;
    }
 location ~ \.php { 
fastcgi_split_path_info ^(.+\.php)(/.*)$; 
set $path_info $fastcgi_path_info; 
try_files $fastcgi_script_name =404;     
include fastcgi_params;     
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;     
fastcgi_param PATH_INFO $fastcgi_path_info;     
fastcgi_param HTTPS on; 
# Avoid sending the security headers twice     
fastcgi_param modHeadersAvailable true;     
fastcgi_param front_controller_active true;     
fastcgi_pass php-handler-pfa;     
fastcgi_intercept_errors on;     
fastcgi_request_buffering off; 
} 

location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {     
try_files $uri /index.php$uri$is_args$args;     
# Optional: Don't log access to other assets     
access_log off; 
}

 }

N’oubliez pas de changer le server_name ainsi que le chemin et nom de vos certificats. On relance ensuite nginx:

nginx -t
service nginx reload

Installer ou mettre à jour PostfixAdmin

On se place dans le répertoire de travail et on renomme le répertoire de l’ancienne version s’il s’agit d’une mise à jour:

cd /home/www/
mv postfixadmin postfixadmin-old

On récupère l’URL de téléchargement de la dernière version de postfixadmin:

curl -s https://github.com/postfixadmin/postfixadmin/releases |  grep -m1 -Eo "archive/refs/tags/[^/]+.zip" | xargs printf "https://github.com/postfixadmin/postfixadmin/%s"

Résultat:

https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.9.zip

Copiez l’URL puis lancez:

wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.9.zip

On dézippe l’archive:

unzip -d ./postfixadmin/ -j postfixadmin-3.3.9.zip

On récupère notre fichier de configuration local, depuis notre ancienne installation:

cp /postfixadmin-old/config.local.php /postfixadmin/config.local.php

S’il n’existe pas, on le crée:

nano /postfixadmin/config.local.php

Et on y ajoute les informations de connexion à notre base de données:

<?php
 $CONF['database_type'] = 'mysqli';
 $CONF['database_user'] = 'mymailadmin'; // à changer selon votre config
 $CONF['database_password'] = '1nyXI7Y)$spmslgz4HhdE4Lc_vm&)Gh!MsZFf64645fek'; // à changer selon votre config
 $CONF['database_name'] = 'postfix'; // à changer selon votre config
 $CONF['configured'] = true;

On assigne les bonnes permissions:

cd postfixadmin
find -type f -print0 | xargs -0 chmod 640
find -type f -print0 | xargs -0 chown root:www-data
mkdir templates_c && chmod 750 templates_c && chown -R www-data templates_c

Il ne vous reste plus qu’à visiter la page setup.php de votre installation PostfixAdmin pour mettre à jour la base de données et le setup_password de l’installation.

A lire :  PHP : configurer un pool PHP pour chaque site

Note: pour vous connecter à PostfixAdmin, vous devez utiliser l’adresse https://xxxxx.example.com/login.php, il n’y a pas de page d’accueil dédiée.

Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée.

Vous souhaitez réaliser un nouveau projet WordPress ou WooCommerce, ajouter de nouvelles fonctionnalités, ou améliorer les performances de votre site?

Parlons de votre projet »

Articles en rapport:

Écrire un commentaire

Spelling error report

The following text will be sent to our editors: