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
Code language: CSS (css)
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]
Code language: CSS (css)
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;
Code language: PHP (php)
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;
<code> 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.</code>
# 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";
<code># 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;</code>
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;
}
}
Code language: PHP (php)
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
Code language: JavaScript (javascript)
Copiez l’URL puis lancez:
wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.9.zip
Code language: JavaScript (javascript)
On dézippe l’archive:
unzip -d ./postfixadmin/ 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;
Code language: HTML, XML (xml)
Et on installe les dépendances avec composer
:
cd postfixadmin
bash install.sh
Code language: CSS (css)
On assigne les bonnes permissions:
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.
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.
Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.