GNU/Linux >> Tutoriels Linux >  >> Cent OS

Partie 3 :PostfixAdmin - Créer des boîtes aux lettres virtuelles sur le serveur de messagerie CentOS 8/RHEL 8

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. Choisissez normal 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. Choisissez normal 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 🙂


Cent OS
  1. Installer le serveur Web Apache CentOS 6 / RHEL 6

  2. Comment installer Puppet sur RHEL 8/CentOS 8

  3. Configurer un serveur de messagerie avec PostfixAdmin et MariaDB sur CentOS 7

  4. Comment configurer un serveur de messagerie avec PostfixAdmin sur CentOS 7

  5. Comment créer une bannière SSH dans le serveur CentOS/RHEL

Configurer le serveur Samba sur CentOS 8/RHEL 8 pour le partage de fichiers

Héberger plusieurs domaines de messagerie dans PostfixAdmin sur CentOS/RHEL

Installer et configurer OpenDKIM sur le serveur de messagerie CentOS 8/RHEL 8

Partie 4 :Configurer SPF et DKIM avec Postfix sur le serveur de messagerie CentOS 8/RHEL 8

Partie 3 :PostfixAdmin - Créer des boîtes aux lettres virtuelles sur le serveur de messagerie Ubuntu 20.04

Comment installer le serveur de messagerie avec PostfixAdmin sur CentOS 7