Dans les articles précédents, nous avons expliqué comment configurer votre propre serveur de messagerie sur CentOS 8/RHEL 8 à partir de zéro. Dans les parties 1 et 2 de cette série de didacticiels, nous avons appris à configurer le serveur SMTP Postfix et serveur Dovecot IMAP , mais jusqu'à présent, nous ne pouvons avoir que des adresses e-mail pour les utilisateurs disposant d'un compte Unix local. Ce tutoriel va vous montrer comment créer des boîtes aux lettres virtuelles sur le serveur de messagerie CentOS 8/RHEL 8 avec PostfixAdmin , qui est une interface Web open source permettant de configurer et de gérer un serveur de messagerie basé sur Postfix pour de nombreux domaines et utilisateurs.
Avec les boîtes aux lettres virtuelles , nous n'avons pas besoin de créer un compte Unix local pour chaque adresse e-mail. Si vous envisagez de configurer un serveur de messagerie pour une entreprise ou une organisation, il est toujours préférable de disposer d'un moyen simple de créer des boîtes aux lettres virtuelles dans une interface Web, qui permet également aux utilisateurs de modifier leurs mots de passe. C'est là qu'intervient PostfixAdmin.
Fonctionnalités d'administration de Postfix
- gérer les boîtes aux lettres, les domaines virtuels et les alias
- messages de vacances/d'absence du bureau (personnellement, je pense que cette fonctionnalité est mieux réalisée dans Roundcube Webmail.)
- domaines alias (transfert d'un domaine à un autre avec validation du destinataire)
- les utilisateurs peuvent gérer leur propre boîte aux lettres (changer d'alias, de mot de passe et de message d'absence)
- prise en charge des quotas pour les boîtes aux lettres uniques et quota total d'un domaine
- Intégration fetchmail :vous pouvez récupérer les e-mails de votre adresse e-mail d'origine vers votre nouvelle adresse e-mail.
- client en ligne de commande postfixadmin-cli pour ceux qui ne veulent pas cliquer dans une interface Web 😉
Remarque :Une fois que vous avez terminé la partie 3, vous ne pouvez plus utiliser les comptes Unix locaux comme adresses e-mail. Vous devez créer des adresses e-mail depuis l'interface Web de PostfixAdmin.
Prérequis
Je suppose que vous avez suivi la partie 1 et la partie 2 de cette série de tutoriels. Si vous avez suivi des didacticiels de serveur de messagerie sur d'autres sites Web, je vous recommande de purger vos configurations et de recommencer avec ma série de didacticiels, afin que vous ne soyez pas confus par différents processus de configuration.
Une fois les conditions ci-dessus remplies, installons et configurons PostfixAdmin.
Étape 1 :Installez le serveur de base de données MariaDB sur CentOS 8/RHEL 8
PostfixAdmin est écrit en PHP et nécessite une base de données (MySQL/MariaDB, PostgreSQL ou SQLite). Cet article utilisera MariaDB, qui remplace MySQL. Il est développé par d'anciens membres de l'équipe MySQL qui craignent qu'Oracle ne transforme MySQL en un produit à source fermée. Entrez la commande suivante pour installer MariaDB sur CentOS 8/RHEL 8.
sudo dnf install mariadb-server mariadb -y
Une fois installé, nous devons le démarrer.
sudo systemctl start mariadb
Activez le démarrage automatique au démarrage du système.
sudo systemctl enable mariadb
Vérifier l'état :
systemctl status mariadb
sortie :
● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 18608 (mysqld) Status: "Taking your SQL requests now..." Tasks: 30 (limit: 5092) Memory: 77.0M CGroup: /system.slice/mariadb.service └─18608 /usr/libexec/mysqld --basedir=/usr
"Activé ” indique que le démarrage automatique au démarrage est activé et nous pouvons voir que le serveur MariaDB est en cours d'exécution. Nous devons maintenant exécuter le script de sécurité.
sudo mysql_secure_installation
Lorsqu'il vous demande d'entrer le mot de passe root MariaDB, appuyez sur la touche Entrée car le mot de passe root n'est pas encore défini. Saisissez ensuite y
pour définir le mot de passe root pour le serveur MariaDB.
Ensuite, vous pouvez appuyer sur Entrée pour répondre à toutes les questions restantes, ce qui supprimera l'utilisateur anonyme, désactivera la connexion root à distance et supprimera la base de données de test. Cette étape est une exigence de base pour la sécurité de la base de données MariaDB. (Notez que la lettre Y
est en majuscule, ce qui signifie que c'est la réponse par défaut.)
Étape 2 :Téléchargez PostfixAdmin sur le serveur CentOS 8/RHEL 8
Connectez-vous à votre serveur de messagerie, puis téléchargez le fichier d'installation de PostfixAdmin sur votre serveur. Allez sur la page PostfixAdmin Gitbub pour télécharger la dernière version. Vous pouvez utiliser le wget
outil pour le télécharger à partir de la ligne de commande. Le lien de téléchargement est toujours disponible dans le format ci-dessous. Si une nouvelle version sort, remplacez simplement 3.3.8 par le nouveau numéro de version.
sudo dnf install wget wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz
Une fois téléchargé, extrayez l'archive.
Si vous utilisez Apache, extrayez-le dans /var/www/
répertoire et renommez-le en postfixadmin
.
sudo dnf install tar sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/ sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin
Si vous utilisez Nginx, extrayez-le dans /usr/share/nginx/
répertoire et renommez-le en postfixadmin
.
sudo dnf install tar sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/ sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin
Étape 3 :Configurer les autorisations
PostfixAdmin nécessite un templates_c
répertoire, et le serveur Web a besoin d'un accès en lecture et en écriture à ce répertoire. Nous devons également modifier le contexte SELinux pour le rendre accessible en écriture. Exécutez donc les commandes suivantes.
Apache
sudo mkdir /var/www/postfixadmin/templates_c sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/ sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R
Nginx
sudo mkdir /usr/share/nginx/postfixadmin/templates_c sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/ sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R
Par défaut, SELinux interdit à Apache/Nginx de faire des requêtes réseau à d'autres serveurs, mais plus tard, Apache/Nginx doit demander l'état du certificat TLS au serveur Let's Encrypt CA pour l'agrafage OCSP, nous devons donc dire à SELinux d'autoriser Apache/Nginx avec ce qui suit commande.
sudo setsebool -P httpd_can_network_connect 1
Si vous utilisez Nginx, vous devez également exécuter la commande suivante pour donner à l'utilisateur nginx des autorisations de lecture et d'écriture sur 3 répertoires.
sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/
Redémarrez Apache/Nginx.
sudo systemctl restart httpd sudo systemctl restart nginx
À partir de Dovecot 2.3.11, l'utilisateur du serveur Web a besoin d'une autorisation pour lire le certificat Let's Encrypt TLS afin de hacher le mot de passe. Exécutez les deux commandes suivantes pour accorder des autorisations.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Étape 4 :Créer une base de données et un utilisateur pour PostfixAdmin
Connectez-vous au shell MySQL/MariaDB en tant que root avec la commande suivante. Vous devrez entrer le mot de passe root MySQL/MariaDB.
mysql -u root -p
Une fois connecté, créez une base de données pour PostfixAdmin à l'aide de la commande suivante. Je l'ai nommé postfixadmin
, mais vous pouvez utiliser le nom de votre choix. (N'oubliez pas le point-virgule.)
create database postfixadmin;
Entrez ensuite la commande ci-dessous pour créer un utilisateur de base de données pour PostfixAdmin. Cette commande accorde également tous les privilèges de la base de données postfixadmin à l'utilisateur. Remplacez postfixadmin_password
avec votre mot de passe préféré. Notez que le mot de passe ne doit pas contenir le #
caractère, ou vous ne pourrez peut-être pas vous connecter plus tard.
grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';
Videz la table des privilèges pour que les modifications prennent effet, puis sortez du shell MariaDB.
flush privileges; exit;
Étape 5 :Configurer PostfixAdmin
Le fichier de configuration par défaut de PostfixAdmin est config.inc.php
. Nous devons créer un config.local.php
fichier et ajouter des configurations personnalisées.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Ajoutez les lignes suivantes dans le fichier, afin que PostfixAdmin puisse se connecter à la base de données MySQL/MariaDB. Remplacez postfixadmin_password
avec le vrai mot de passe PostfixAdmin créé à l'étape 4.
<?php $CONF['configured'] = true; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_port'] = '3306'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = 'postfixadmin_password'; $CONF['database_name'] = 'postfixadmin'; $CONF['encrypt'] = 'dovecot:BLF-CRYPT'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";
Enregistrez et fermez le fichier. Notez que nous utiliserons le schéma de mot de passe BLF-CRYPT.
Étape 6 :Créer un hôte virtuel Apache ou un fichier de configuration Nginx pour PostfixAdmin
Apache
Si vous utilisez le serveur Web Apache, créez un hôte virtuel pour PostfixAdmin.
sudo nano /etc/httpd/conf.d/postfixadmin.conf
Mettez le texte suivant dans le fichier. Remplacez postfixadmin.example.com
avec votre vrai nom de domaine et n'oubliez pas de définir un enregistrement DNS A pour celui-ci.
<VirtualHost *:80> ServerName postfixadmin.example.com DocumentRoot /var/www/postfixadmin/public/ ErrorLog /var/log/httpd/postfixadmin_error.log CustomLog /var/log/httpd/postfixadmin_access.log combined <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/postfixadmin/public/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Enregistrez et fermez le fichier. Rechargez Apache pour que les modifications prennent effet.
sudo systemctl reload httpd
Vous devriez maintenant voir l'assistant d'installation Web de PostfixAdmin sur http://postfixadmin.example.com/setup.php
.
Nginx
Si vous utilisez le serveur Web Nginx, créez un hôte virtuel pour PostfixAdmin.
sudo nano /etc/nginx/conf.d/postfixadmin.conf
Mettez le texte suivant dans le fichier. Remplacez postfixadmin.example.com
avec votre vrai nom de domaine et n'oubliez pas de définir un enregistrement DNS A pour celui-ci.
server { listen 80; listen [::]:80; server_name postfixadmin.example.com; root /usr/share/nginx/postfixadmin/public/; index index.php index.html; access_log /var/log/nginx/postfixadmin_access.log; error_log /var/log/nginx/postfixadmin_error.log; location / { try_files $uri $uri/ /index.php; } location ~ ^/(.+\.php)$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
Enregistrez et fermez le fichier. Testez ensuite la configuration de Nginx.
sudo nginx -t
Si le test réussit, rechargez Nginx pour que les modifications prennent effet.
sudo systemctl reload nginx
Vous devriez maintenant voir l'assistant d'installation Web de PostfixAdmin sur http://postfixadmin.example.com/setup.php
.
Étape 7 :Installez les modules PHP requis et recommandés
PostfixAdmin nécessite le php-imap
module pour créer des sous-dossiers dans les boîtes aux lettres, mais php-imap
n'est pas inclus dans le référentiel CentOS 8/RHEL 8 par défaut, nous devons donc utiliser le référentiel Remi pour installer ce module PHP.
Installez le Remi Repo.
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Réinitialisez ensuite les flux du module PHP.
sudo dnf module reset php
Activez le php:remi-7.4
flux de modules.
sudo dnf module enable php:remi-7.4 -y
Ensuite, vous pouvez exécuter la commande suivante pour installer les modules PHP requis ou recommandés par PostfixAdmin.
sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp
Nous devons exécuter la commande suivante pour indiquer à SELinux d'autoriser Apache pour exécuter du code PHP via PHP-FPM.
sudo setsebool -P httpd_execmem 1
Si vous utilisez Nginx , modifiez le fichier de configuration PHP-FPM :
nano /etc/php-fpm.d/www.conf
Par défaut, PHP-FPM s'exécute en tant que apache
utilisateur. Puisque vous utilisez le serveur Web Nginx, nous devons le changer. Trouvez les deux lignes suivantes.
user = apache group = apache
Changez-les en
user = nginx group = nginx
Enregistrez et fermez le fichier. Lancez ensuite PHP-FPM.
sudo systemctl start php-fpm
Activez le démarrage automatique au démarrage du système.
sudo systemctl enable php-fpm
Redémarrez Apache ou Nginx.
sudo systemctl restart httpd sudo systemctl restart nginx
Étape 8 :Activer HTTPS
Pour chiffrer le trafic HTTP, nous pouvons activer HTTPS en installant un certificat TLS gratuit émis par Let's Encrypt.
Si vous utilisez Apache, exécutez cette commande pour obtenir et installer le certificat TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
Si vous utilisez Nginx, exécutez la commande suivante pour obtenir et installer le certificat TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
Où :
--apache
:Utilisez le plug-in Apache.--nginx
:Utilisez le plug-in nginx.--agree-tos
:acceptez les conditions d'utilisation.--redirect
:Forcer HTTPS par redirection 301.--hsts
: ajoutez l'en-tête Strict-Transport-Security à chaque réponse HTTP. Forcer le navigateur à toujours utiliser TLS pour le domaine. Protège contre le SSL/TLS Stripping.--staple-ocsp
: Active l'agrafage OCSP. Une réponse OCSP valide est agrafée au certificat que le serveur propose pendant TLS.--email
:E-mail utilisé pour l'enregistrement et le contact de récupération.-d
flag est suivi d'une liste de noms de domaine, séparés par une virgule. Vous pouvez ajouter jusqu'à 100 noms de domaine.
Le certificat devrait maintenant être obtenu et installé automatiquement, ce qui est indiqué par les messages ci-dessous.
Étape 9 :Générer une stratégie SELinux personnalisée pour le serveur Web
Lors de l'installation, PostfixAdmin doit lire les fichiers de configuration de Dovecot afin de créer un mot de passe. Par défaut, SELinux n'autorise pas le serveur Web à lire les fichiers de configuration de Dovecot. Nous devons créer une politique SELinux personnalisée pour autoriser cette action.
Installez les packages requis.
sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel
Générez une stratégie personnalisée pour httpd. (Si vous utilisez Nginx, remplacez httpd
avec nginx
.)
sudo sepolicy generate --init /usr/sbin/httpd
Modifiez le fichier d'application de type.
sudo nano httpd.te
Ajoutez la ligne suivante à la fin de ce fichier, afin qu'Apache/Nginx puisse lire les fichiers de configuration de Dovecot.
dovecot_read_config(httpd_t)
Enregistrez et fermez le fichier. Installez ensuite la nouvelle politique SELinux.
sudo ./httpd.sh
Apache/Nginx devrait maintenant pouvoir lire les fichiers de configuration de Dovecot.
Si vous ne savez pas quoi ajouter au httpd.te
fichier, exécutez la commande suivante après un refus SELinux.
sudo ausearch -m AVC -ts recent | audit2allow -R
audit2allow
proposera des modifications.
Étape 10 :Activer les statistiques dans Dovecot
PostfixAdmin doit lire les statistiques de Dovecot. Modifiez le fichier de configuration Dovecot.
sudo nano /etc/dovecot/conf.d/10-master.conf
Ajoutez les lignes suivantes à la fin de ce fichier. Si vous utilisez Nginx, changez apache
en nginx
.
service stats { unix_listener stats-reader { user = apache group = apache mode = 0660 } unix_listener stats-writer { user = apache group = apache mode = 0660 } }
Enregistrez et fermez le fichier. Ajoutez ensuite le serveur Web au dovecot
groupe.
Apache
sudo gpasswd -a apache dovecot
NGinx
sudo gpasswd -a nginx dovecot
Redémarrez Dovecot.
sudo systemctl restart dovecot
Étape 11 :terminer l'installation dans le navigateur Web
Accédez à postfixadmin.example.com/setup.php
pour exécuter l'assistant de configuration Web. Tout d'abord, vous devez créer un mot de passe de configuration pour PostfixAdmin.
Après avoir créé le hachage du mot de passe, PostfixAdmin affichera une ligne comme ci-dessous.
$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';
Vous devez ouvrir le config.local.php
fichier.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Ajoutez l'affichage de la ligne sur la page de configuration de PostfixAdmin à la fin du fichier comme ci-dessous.
Après avoir enregistré le fichier, vous devez actualiser la page de configuration de PostfixAdmin et saisir à nouveau le mot de passe de configuration, puis créer le compte administrateur. Veuillez ne pas utiliser une adresse e-mail Gmail, Yahoo Mail ou Microsoft pour le compte administrateur, sinon vous ne pourrez peut-être pas vous connecter ultérieurement. Utilisez une adresse e-mail sur votre propre domaine. Vous pouvez créer l'adresse e-mail plus tard dans PostfixAdmin.
Une fois le compte superadmin créé, vous pouvez vous connecter à PostfixAdmin à l'adresse postfixadmin.example.com/login.php
.
Si vous voyez l'erreur suivante lorsque vous essayez de créer un compte superadmin,
can’t encrypt password with dovecotpw, see error log for details
C'est parce que l'utilisateur du serveur Web n'a pas l'autorisation de lire le certificat Let's Encrypt TLS. Pour résoudre ce problème, exécutez les deux commandes suivantes pour accorder des autorisations.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ sudo setfacl -R -m u:apache:rx /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/archive/
Si vous voyez l'erreur suivante,
Invalid query: Specified key was too long; max key length is 1000 bytes
Ensuite, vous devez vous connecter au serveur de base de données MySQL/MariaDB en tant que root à partir de la ligne de commande,
mysql -u root -p
et changez le classement par défaut de utf8mb4_general_ci
à utf8_general_ci
.
MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';
Quittez la console MySQL/MariaDB et rechargez la page setup.php.
Étape 12 : Configurer Postfix pour utiliser la base de données MySQL/MariaDB
Par défaut, Postfix n'envoie des e-mails qu'aux utilisateurs disposant d'un compte Unix local. Pour lui faire livrer des e-mails aux utilisateurs virtuels dont les informations sont stockées dans la base de données, nous devons configurer Postfix pour qu'il utilise des domaines de boîtes aux lettres virtuelles.
Tout d'abord, nous devons ajouter le support de carte MySQL pour Postfix en installant le postfix-mysql
paquet.
sudo dnf install postfix-mysql
Modifiez ensuite le fichier de configuration principal de Postfix.
sudo nano /etc/postfix/main.cf
Ajoutez les lignes suivantes à la fin de ce fichier. (Dans l'éditeur de texte Nano, vous pouvez appuyer sur Ctrl+W
, puis Ctrl+V
pour sauter à la fin d'un fichier.)
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf 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 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
Où :
virtual_mailbox_domains
pointe vers un fichier qui indiquera à Postfix comment rechercher les informations de domaine dans la base de données.virtual_mailbox_maps
pointe vers des fichiers qui indiqueront à Postfix comment rechercher des adresses e-mail dans la base de données.virtual_alias_maps
pointe vers des fichiers qui indiqueront à Postfix comment rechercher des alias dans la base de données.
Nous voulons utiliser dovecot pour livrer les e-mails entrants au magasin de messages des utilisateurs virtuels, alors ajoutez également la ligne suivante à la fin de ce fichier.
virtual_transport = lmtp:unix:private/dovecot-lmtp
Enregistrez et fermez le fichier. Ensuite, nous devons créer le .cf
fichiers un par un. Créez le répertoire sql.
sudo mkdir /etc/postfix/sql/
Créez le fichier mysql_virtual_domains_maps.cf fichier.
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
Ajoutez le contenu suivant. Remplacez postfixadmin_password
avec le mot de passe postfixadmin que vous avez défini à l'étape 4.
user = postfixadmin password = postfixadmin_password 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
Créez le fichier mysql_virtual_mailbox_maps.cf fichier.
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
Ajoutez le contenu suivant.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100
Créez le mysql_virtual_alias_domain_mailbox_maps.cf fichier.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Ajoutez le contenu suivant.
user = postfixadmin password = postfixadmin_password 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 fichier.
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
Ajoutez le contenu suivant.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1' #expansion_limit = 100
Créez le mysql_virtual_alias_domain_maps.cf
fichier.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
Ajoutez le contenu suivant.
user = postfixadmin password = postfixadmin_password 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 les mysql_virtual_alias_domain_catchall_maps
fichier.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Ajoutez le contenu suivant.
# handles catch-all settings of target-domain user = postfixadmin password = postfixadmin_password 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'
Étant donné que les mots de passe de la base de données sont stockés en texte brut, ils ne doivent donc être lisibles que par les utilisateurs postfix et root, ce qui se fait en exécutant les deux commandes suivantes.
sudo chmod 0640 /etc/postfix/sql/* sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/
Ensuite, nous devons changer la valeur de mydestination
paramètre dans Postfix. Afficher la valeur actuelle :
postconf mydestination
Exemple de sortie :
mydestination = linuxbabe.com, $myhostname, localhost.$mydomain, localhost
Le mydestination
Le paramètre contient une liste de noms de domaine qui recevront les e-mails envoyés aux comptes Unix locaux. Dans la partie 1, nous avons ajouté le nom de domaine apex (comme linuxbabe.com) à mydestination
. Puisque nous allons utiliser une boîte aux lettres virtuelle, nous devons supprimer le nom de domaine apex de la liste en exécutant la commande suivante.
sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"
Ouvrons maintenant à nouveau le fichier de configuration principal de Postfix.
sudo nano /etc/postfix/main.cf
Ajoutez les lignes suivantes à la fin de ce fichier.
virtual_mailbox_base = /var/vmail virtual_minimum_uid = 2000 virtual_uid_maps = static:2000 virtual_gid_maps = static:2000
La première ligne définit l'emplacement de base des fichiers courrier. Les 3 lignes restantes définissent l'ID utilisateur et l'ID de groupe que Postfix utilisera lors de la livraison des e-mails entrants dans la boîte aux lettres. Nous utilisons l'ID utilisateur 2000 et l'ID de groupe 2000.
Enregistrez et fermez le fichier. Redémarrez Postfix pour que les modifications prennent effet.
sudo systemctl restart postfix
Ensuite, nous devons créer un utilisateur nommé vmail
avec ID 2000 et un groupe avec ID 2000.
sudo adduser vmail --system --uid 2000 --user-group --no-create-home
Créez l'emplacement de la base de messagerie.
sudo mkdir /var/vmail/
Créer vmail
en tant que propriétaire.
sudo chown vmail:vmail /var/vmail/ -R
Nous devons également modifier le contexte SELinux pour le rendre accessible en écriture.
sudo chcon -t mail_spool_t /var/vmail/ -R
Étape 13 : Configurer Dovecot pour utiliser la base de données MySQL/MariaDB
Nous devons également configurer le serveur Dovecot IMAP pour interroger les informations utilisateur de la base de données. Tout d'abord, exécutez la commande suivante pour ajouter la prise en charge de MySQL pour Dovecot.
sudo dnf install dovecot-mysql
Modifiez ensuite le 10-mail.conf fichier.
sudo nano /etc/dovecot/conf.d/10-mail.conf
Dans la partie 2, nous avons utilisé le mail_location
suivant . Les e-mails sont stockés sous le Maildir
sous le répertoire personnel de chaque utilisateur.
mail_location = maildir:~/Maildir
Puisque nous utilisons maintenant le domaine de la boîte aux lettres virtuelle, nous devons activer mail_home
pour les utilisateurs virtuels en ajoutant la ligne suivante dans le fichier, car les utilisateurs virtuels n'ont pas de répertoires personnels par défaut.
mail_home = /var/vmail/%d/%n
Enregistrez et fermez le fichier. Modifiez ensuite le 10-auth.conf fichier.
sudo nano /etc/dovecot/conf.d/10-auth.conf
Dans la partie 2, nous avons utilisé la valeur suivante pour auth_username_format
.
auth_username_format = %n
Le %n
abandonnerait le domaine s'il était donné. Parce que dans la partie 2, nous utilisions un compte Unix local pour le nom d'utilisateur de chaque adresse e-mail, nous devons utiliser %n
pour supprimer le domaine, afin que les utilisateurs puissent se connecter avec l'adresse e-mail complète.
Maintenant, nous utilisons des domaines de boîtes aux lettres virtuelles, ce qui signifie que le nom d'utilisateur de chaque adresse e-mail inclut la partie domaine, nous devons donc modifier le auth_username_format
comme suit. %u
ne supprimera pas le domaine. Cela permet aux utilisateurs de se connecter avec l'adresse e-mail complète.
auth_username_format = %u
Décommentez la ligne suivante à la fin du fichier, afin que Dovecot puisse interroger les informations utilisateur de la base de données.
!include auth-sql.conf.ext
Maintenant, vous ne voulez probablement pas que les utilisateurs locaux d'Unix envoient des e-mails sans enregistrer les adresses e-mail dans PostfixAdmin, puis commentez la ligne suivante en ajoutant le caractère # au début, afin que Dovecot n'interroge pas le local /etc/passwd
ou /etc/shadow
fichier.
#!include auth-system.conf.ext
Il peut être utile d'ajouter les deux lignes suivantes dans ce fichier pour déboguer les problèmes de connexion. Les erreurs de connexion seraient enregistrées dans /var/log/maillog
dossier. (Une fois que les utilisateurs peuvent se connecter sans problème, vous pouvez commenter les deux lignes suivantes.)
auth_debug = yes auth_debug_passwords = yes
Enregistrez et fermez le fichier.
Créez le dovecot-sql.conf.ext
fichier.
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Voici le contenu que vous devriez avoir. Remplacez postfixadmin_password
avec le mot de passe postfixadmin que vous avez défini à l'étape 4.
driver = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password default_pass_scheme = BLF-CRYPT 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
Enregistrez et fermez le fichier. Et redémarrez Dovecot.
sudo systemctl restart dovecot
Lorsqu'un utilisateur essaie de se connecter, Dovecot génère un hachage BLF-CRYPT à partir du mot de passe saisi par l'utilisateur, puis le compare avec le hachage du mot de passe stocké dans la base de données.
Étape 14 :Ajouter un domaine et des boîtes aux lettres dans PostfixAdmin
Connectez-vous à l'interface Web de PostfixAdmin en tant qu'administrateur. Cliquez sur la Domain List
et sélectionnez New Domain
pour ajouter un domaine. Vous pouvez choisir le nombre d'alias et de boîtes aux lettres autorisés pour ce domaine.
Cliquez ensuite sur Virtual List
et sélectionnez Add Mailbox
pour ajouter une nouvelle adresse e-mail pour votre domaine.
Lancez maintenant votre client de messagerie de bureau tel que Mozilla Thunderbird et ajoutez un compte de messagerie. Si Thunderbird a trouvé la configuration de votre serveur de messagerie comme ci-dessous, cliquez simplement sur Terminé et vous pourrez lire et envoyer des e-mails.
Si Thunderbird n'a pas trouvé la configuration de votre serveur de messagerie, cliquez sur Configuration manuelle pour entrer les détails de votre serveur de messagerie.
- Dans la section serveur entrant, sélectionnez le protocole IMAP, saisissez
mail.your-domain.com
comme nom de serveur, choisissez le port 143 et STARTTLS. Choisisseznormal password
comme méthode d'authentification. - Dans la section sortant, sélectionnez le protocole SMTP, saisissez
mail.your-domain.com
comme nom de serveur, choisissez le port 587 et STARTTLS. Choisisseznormal password
comme méthode d'authentification.
Astuce :Vous pouvez également utiliser le port 993 avec le cryptage SSL/TLS pour IMAP et le port 465 avec le cryptage SSL/TLS pour SMTP. Vous ne devriez pas utilisez le port 25 comme port SMTP dans les clients de messagerie pour envoyer les e-mails sortants.
Vous devriez maintenant pouvoir vous connecter à votre propre serveur de messagerie et également envoyer et recevoir des e-mails avec votre client de messagerie de bureau !
Conseils de dépannage
En règle générale, vous devriez toujours vérifier le journal de messagerie (/var/log/maillog
) sur votre serveur de messagerie lorsqu'une erreur se produit. Vous trouverez ci-dessous une liste d'erreurs spécifiques et des conseils de dépannage.
Impossible de se connecter à partir des clients de messagerie
Si vous ne pouvez pas vous connecter à votre serveur de messagerie à partir d'un client de messagerie de bureau, analysez votre serveur de messagerie pour déterminer si les ports sont ouverts. Notez que vous devez exécuter la commande suivante à partir d'un autre ordinateur ou serveur Linux. Si vous l'exécutez sur votre serveur de messagerie, les ports apparaîtront toujours ouverts.
sudo nmap mail.your-domain.com
Et vérifiez si Dovecot est en cours d'exécution.
systemctl status dovecot
Vous pouvez également consulter le journal des e-mails (/var/log/maillog
), ce qui peut vous donner quelques indices. Si Dovecot ne démarre pas, l'erreur peut ne pas être consignée dans le /var/log/maillog
fichier, vous pouvez exécuter la commande suivante pour voir ce qui ne va pas.
sudo journalctl -eu dovecot
Si vous voyez l'erreur suivante dans le journal de messagerie, il est probable que vous n'ayez pas défini un mot de passe correct dans le .cf
fichiers sous /etc/postfix/sql/
répertoire.
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure
Si vous voyez l'erreur suivante dans le journal de messagerie, c'est parce que vous avez oublié d'ajouter mail_location = maildir:~/Maildir
dans le /etc/dovecot/conf.d/10-mail.conf
fichier.
open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775
DNS Cloudflare
Comme je l'ai dit dans la partie 1, si vous utilisez le service DNS Cloudflare, vous ne devez pas activer la fonction CDN (proxy) lors de la création d'un enregistrement DNS A et d'un enregistrement AAAA pour le nom d'hôte de votre serveur de messagerie. Cloudflare ne prend pas en charge les proxy SMTP ou IMAP.
Accès relais refusé
Si vous voyez le message "accès relais refusé ” lorsque vous essayez d'envoyer des e-mails à partir d'un client de messagerie, il est fort probable que vous utilisiez le port 25 comme port SMTP dans votre client de messagerie. Comme je l'ai dit il y a quelque temps, vous devez utiliser le port 587 ou 465 as the SMTP port in mail clients (Mozilla Thunberbird, Microsoft Outlook, etc) to submit outgoing emails. Port 25 should be used for SMTP server to SMTP server communications.
iOS Mail App
If you use the iOS Mail app to log into your mail server and encounter the following error.
You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.
Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.
Temporary Lookup Failure
If your mail server was working fine for some time, but suddenly you find the following error in the mail log,
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure; proto=ESMTP Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure
It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.
sudo journalctl -eu mariadb
ou
sudo journalctl -eu mysql
A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.
htop
ou
free -m
Change User Password in PostfixAdmin
Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php
, then change their passwords.
Automatically Clean the Junk Folder and Trash Folder
To delete emails in Junk folder for all users, you can run
sudo doveadm expunge -u *@example.com mailbox Junk all
To delete emails in Trash folder for all users, run
sudo doveadm expunge -u *@example.com mailbox Trash all
I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.
sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w
Then add a cron job to automate the job.
sudo crontab -e
Add the following line to clean Junk and Trash folder every day
@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w
Restricting Access to Sendmail
By default, any local user can use the sendmail
binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail
binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.
sudo nano /etc/postfix/main.cf
Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.
authorized_submit_users = root,www-data
Enregistrez et fermez le fichier. Redémarrez ensuite Postfix.
sudo systemctl restart postfix
Étape suivante
I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.
If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful, subscribe to our free newsletter to get more tips and tricks. Prenez soin de vous 🙂