GNU/Linux >> Tutoriels Linux >  >> Ubuntu

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

Dans les articles précédents, nous avons expliqué comment configurer votre propre serveur de messagerie sur Ubuntu à 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 le serveur IMAP Dovecot, mais jusqu'à présent, nous ne pouvons avoir que des adresses e-mail pour les utilisateurs disposant de comptes Unix locaux. Ce didacticiel va vous montrer comment créer des boîtes aux lettres virtuelles sur le serveur de messagerie Ubuntu 20.04 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 c'est mieux fait dans le webmail Roundcube)
  • 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

Il est nécessaire que vous ayez suivi les parties 1 et 2 de cette série de didacticiels avant de continuer à lire cet article. Si vous avez suivi des tutoriels de serveur de messagerie sur d'autres sites Web, je vous recommande de purger vos configurations (sudo apt purge postfix dovecot-core ) et recommencez avec ma série de tutoriels, afin que vous ne soyez pas dérouté par les différents processus de configuration.

Une fois les conditions ci-dessus remplies, installons et configurons PostfixAdmin.

Étape 1 :Installer le serveur de base de données MariaDB

PostfixAdmin est écrit en PHP et nécessite une base de données (MySQL/MariaDB, PostgreSQL ou SQLite). Cet article utilisera la base de données 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 Ubuntu 20.04.

sudo apt install mariadb-server mariadb-client

Une fois installé, le serveur MariaDB devrait être automatiquement démarré. Utilisez systemctl pour vérifier son état.

systemctl status mariadb

Sortie :

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

S'il ne fonctionne pas, démarrez-le avec cette commande :

sudo systemctl start mariadb

Pour permettre à MariaDB de démarrer automatiquement au démarrage, exécutez

sudo systemctl enable mariadb

Exécutez maintenant le script de sécurité post-installation.

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 Y est en majuscule, ce qui signifie qu'il s'agit de la réponse par défaut. )

Étape 2 :Installez PostfixAdmin sur le serveur Ubuntu 20.04

Connectez-vous à votre serveur de messagerie. Parce que certains lecteurs utilisent le serveur MariaDB, tandis que d'autres utilisent MySQL, ce qui complique les choses, donc avant d'installer PostfixAdmin, nous installons le dbconfig-no-thanks package pour empêcher le postfixadmin package de lancer l'assistant de configuration de la base de données.

sudo apt install dbconfig-no-thanks

Installez ensuite PostfixAdmin à partir du référentiel de logiciels Ubuntu par défaut.

sudo apt install postfixadmin

Remarque :Si vous avez déjà installé mysql-server sur Ubuntu, l'installation de PostfixAdmin supprimera probablement le mysql-server package de votre système. Vous pouvez le réinstaller en exécutant la commande suivante.

sudo apt install mysql-server

Maintenant, nous devons supprimer le dbconfig-no-thanks paquet.

sudo apt remove dbconfig-no-thanks

Lancez ensuite l'assistant de configuration de la base de données pour PostfixAdmin.

sudo dpkg-reconfigure postfixadmin

Lors de l'installation, il vous sera demandé si vous souhaitez réinstaller la base de données pour PostfixAdmin. Cela signifie simplement créer une base de données nommée postfixadmin , cela ne supprimera pas vos bases de données existantes. Appuyez sur la touche Tab pour choisir Oui .

Sélectionnez ensuite le type de base de données par défaut :mysql , si vous utilisez MySQL ou MariaDB.

Choisissez ensuite la méthode de connexion par défaut :Unix socket .

Choisissez ensuite le plugin d'authentification par défaut pour MySQL/MariaDB.

Appuyez sur Entrée pour choisir le nom de base de données par défaut pour PostfixAdmin.

Appuyez sur Entrée pour choisir le nom d'utilisateur par défaut de la base de données pour PostfixAdmin.

Après cela, vous devez définir un mot de passe pour cet utilisateur. Notez que le mot de passe ne doit pas contenir le # caractère, ou vous ne pourrez peut-être pas vous connecter plus tard.


Enfin, choisissez l'administrateur de base de données par défaut.

Une fois PostfixAdmin installé, vous pouvez vous connecter à la console MySQL/MariaDB avec la commande suivante. Vous devrez entrer le mot de passe pour le postfixadmin utilisateur.

mysql -u postfixadmin -p

Et vous pouvez vérifier à quelles bases de données l'utilisateur est autorisé à accéder avec la commande suivante.

SHOW DATABASES;

Sortie :

+--------------------+
| Database           |
+--------------------+
| information_schema |
| postfixadmin       |
+--------------------+
2 rows in set (0.002 sec)

Par défaut, le postfixadmin la base de données ne contient aucune table. Vous pouvez vous déconnecter de la console MySQL/MariaDB avec la commande suivante.

EXIT;

L'installation créera également deux fichiers de configuration :/etc/dbconfig-common/postfixadmin.conf et /etc/postfixadmin/dbconfig.inc.php , qui contiennent tous deux les paramètres d'accès à la base de données, y compris le nom d'utilisateur et le mot de passe de la base de données. Nous devons changer le type de base de données de mysql vers mysqli dans les deux fichiers.

sudo nano /etc/dbconfig-common/postfixadmin.conf

Modifier

dbc_dbtype='mysql'

à

dbc_dbtype='mysqli'

Modifiez ensuite le deuxième fichier.

sudo nano /etc/postfixadmin/dbconfig.inc.php

Modifier

$dbtype='mysql';

à

$dbtype='mysqli';

Les fichiers Web sont installés sous /usr/share/postfixadmin/ répertoire, qui appartient à root. PostfixAdmin nécessite un templates_c répertoire, alors créez-le.

sudo mkdir /usr/share/postfixadmin/templates_c

Nous devons donner www-data l'utilisateur lit, écrit et exécute les autorisations sur ce répertoire avec la commande suivante.

sudo setfacl -R -m u:www-data:rwx /usr/share/postfixadmin/templates_c/

Si votre système ne trouve pas le setfacl commande, vous devez installer le acl paquet.

sudo apt install acl

Étape 3 :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/apache2/sites-available/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 /usr/share/postfixadmin/public

  ErrorLog ${APACHE_LOG_DIR}/postfixadmin_error.log
  CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /usr/share/postfixadmin/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Enregistrez et fermez le fichier. Activez ensuite cet hôte virtuel avec :

sudo a2ensite postfixadmin.conf

Rechargez Apache pour que les modifications prennent effet.

sudo systemctl reload apache2

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/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/php7.4-fpm.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 4 :Installez les modules PHP requis et recommandés

Exécutez la commande suivante pour installer les modules PHP requis ou recommandés par PostfixAdmin.

sudo apt 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émarrez ensuite Apache. (Si vous utilisez Nginx, vous n'avez pas besoin de redémarrer Nginx.)

sudo systemctl restart apache2

Étape 5 :Activer HTTPS

Pour chiffrer le trafic HTTP, nous pouvons activer HTTPS en installant un certificat TLS gratuit émis par Let's Encrypt. Exécutez la commande suivante pour installer le client Let's Encrypt (certbot) sur le serveur Ubuntu 20.04.

sudo apt install certbot

Si vous utilisez Apache, installez le plugin Certbot Apache.

sudo apt install python3-certbot-apache

Et 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, vous devez également installer le plugin Certbot Nginx.

sudo apt install python3-certbot-nginx

Ensuite, 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

  • --nginx  :Utilisez le plug-in nginx.
  • --apache :Utilisez le plug-in Apache.
  • --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.

Le certificat devrait maintenant être obtenu et installé automatiquement, ce qui est indiqué par le message ci-dessous.

Étape 6 :Utiliser un schéma de mot de passe fort dans PostfixAdmin et Dovecot

Par défaut, PostfixAdmin et Dovecot utilisent MD5-CRYPT, qui est un schéma de mot de passe faible. Vous pouvez répertorier les schémas de mot de passe disponibles dans Dovecot avec la commande suivante.

sudo doveadm pw -l

Exemple de sortie :

SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

Argon2 est un schéma de mot de passe assez fort. Pour l'utiliser, nous devons éditer le fichier de configuration de PostfixAdmin, qui par défaut est /usr/share/postfixadmin/config.inc.php , mais nous pouvons créer un fichier séparé (config.local.php ) pour stocker nos modifications, afin qu'elles ne soient pas écrasées lorsqu'une nouvelle version de PostfixAdmin sera installée à l'avenir.

sudo nano /usr/share/postfixadmin/config.local.php

Ajoutez les lignes suivantes dans le fichier pour utiliser le schéma de mot de passe Argon2.

<?php
$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
}

Enregistrez et fermez le fichier. Nous pouvons également créer un lien symbolique dans le /etc/postfixadmin/ répertoire, juste au cas où PostfixAdmin ne trouverait pas le fichier.

sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php

Nous configurerons le schéma de mot de passe pour Dovecot à l'étape 11.

Étape 7 :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.

service stats {
    unix_listener stats-reader {
    user = www-data
    group = www-data
    mode = 0660
}

unix_listener stats-writer {
    user = www-data
    group = www-data
    mode = 0660
  }
}

Enregistrez et fermez le fichier. Ajoutez ensuite le serveur Web au dovecot groupe.

sudo gpasswd -a www-data dovecot

Redémarrez Dovecot.

sudo systemctl restart dovecot

Étape 8 :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, il vérifiera si toutes les dépendances sont installées et créera les tables de la base de données.

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,

sudo mysql -u root

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. Une fois que toutes les conditions sont satisfaites, vous pouvez créer un mot de passe de configuration pour PostfixAdmin.

Après avoir créé le hachage du mot de passe, vous devez ouvrir le /usr/share/postfixadmin/config.local.php fichier et ajoutez le hachage du mot de passe de configuration à la fin du fichier comme ci-dessous. Bien sûr, vous devez utiliser votre propre hachage de mot de passe.

Ensuite, créez 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.

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 le www-data l'utilisateur n'a pas l'autorisation de lire le certificat Let's Encrypt TLS. Pour résoudre ce problème, exécutez la commande suivante pour accorder des autorisations.

sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Une fois le compte superadmin créé, vous pouvez vous connecter à PostfixAdmin sur postfixadmin.example.com/login.php .

Étape 9 :Vérification des tables dans la base de données

Le processus d'installation de PostfixAdmin remplit le postfixadmin base de données avec quelques tables par défaut. Il nous est utile de connaître les noms et la structure des tables. Connectez-vous à la console MySQL/MariaDB.

sudo mysql -u root

Sélectionnez le postfixadmin base de données.

USE postfixadmin;

Lister toutes les tables de cette base de données.

SHOW TABLES;

Sortie :

+------------------------+
| Tables_in_postfixadmin |
+------------------------+
| admin                  |
| alias                  |
| alias_domain           |
| config                 |
| domain                 |
| domain_admins          |
| fetchmail              |
| log                    |
| mailbox                |
| quota                  |
| quota2                 |
| vacation               |
| vacation_notification  |
+------------------------+
13 rows in set (0.001 sec)

Les 3 tables les plus importantes sont :

  • domain  :contient des informations sur les domaines qui utilisent votre serveur de messagerie pour envoyer et recevoir des e-mails.
  • mailbox  :contient des informations sur chaque adresse e-mail, y compris le mot de passe haché et l'emplacement des fichiers de messagerie.
  • alias :contient l'alias de chaque adresse e-mail.

Si vous êtes intéressé, vous pouvez vérifier les colonnes que contient chaque table. Par exemple, la commande suivante nous montrera les colonnes dans le domain tableau.

DESCRIBE domain;

Sortie :

+-------------+--------------+------+-----+---------------------+-------+
| Field       | Type         | Null | Key | Default             | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain      | varchar(255) | NO   | PRI | NULL                |       |
| description | varchar(255) | NO   |     | NULL                |       |
| aliases     | int(10)      | NO   |     | 0                   |       |
| mailboxes   | int(10)      | NO   |     | 0                   |       |
| maxquota    | bigint(20)   | NO   |     | 0                   |       |
| quota       | bigint(20)   | NO   |     | 0                   |       |
| transport   | varchar(255) | NO   |     | NULL                |       |
| backupmx    | tinyint(1)   | NO   |     | 0                   |       |
| created     | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| modified    | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| active      | tinyint(1)   | NO   |     | 1                   |       |
+-------------+--------------+------+-----+---------------------+-------+

Déconnectez-vous de la console MySQL/MariaDB.

EXIT;

Étape 10 : 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 apt 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.

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. Remplacer password avec le mot de passe postfixadmin que vous avez défini à l'étape 2.

user = postfixadmin
password = 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 = 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 = 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 = 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 = 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 = 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 = $myhostname, linuxbabe.com, 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 --group --uid 2000 --disabled-login --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

Étape 11 : 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 apt 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 laisserait tomber 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 de ce fichier, afin que Dovecot puisse interroger les informations utilisateur de la base de données MySQL/MariaDB.

!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/mail.log 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.

Modifiez le dovecot-sql.conf.ext fichier.

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

Voici le contenu que vous devriez avoir dans ce fichier. Par défaut, toutes les lignes de ce fichier sont commentées, vous pouvez donc simplement les copier et les coller en bas. Remplacer password avec le mot de passe postfixadmin que vous avez défini à l'étape 2.

driver = mysql

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

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

Redémarrez Dovecot.

sudo systemctl restart dovecot

Lorsqu'un utilisateur essaie de se connecter, Dovecot utilise l'algorithme Argon2 pour générer un hachage de mot de passe à partir du mot de passe saisi par l'utilisateur, puis le compare avec le hachage de mot de passe stocké dans la base de données.

Étape 12 :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.

Ensuite, vous pouvez ouvrir votre client de messagerie de bureau tel que Mozilla Thunderbird et ajouter un compte 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 ! Notez que vous ne pouvez pas utiliser de comptes Unix locaux pour vous connecter maintenant. Vous devez vous connecter avec l'utilisateur virtuel créé à partir de l'interface Web de PostfixAdmin.

Conseils de dépannage

En règle générale, vous devriez toujours vérifier le journal de messagerie (/var/log/mail.log ) 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/mail.log ), ce qui peut vous donner quelques indices. Si Dovecot ne démarre pas, l'erreur peut ne pas être consignée dans /var/log/mail.log 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 comme port SMTP dans les clients de messagerie (Mozilla Thunberbird, Microsoft Outlook, etc.) pour envoyer les e-mails sortants. Le port 25 doit être utilisé pour les communications de serveur SMTP à serveur SMTP.

Application de messagerie iOS

Si vous utilisez l'application iOS Mail pour vous connecter à votre serveur de messagerie et rencontrez l'erreur suivante.

Vous pouvez essayer de résoudre ce problème en appliquant le cryptage SSL, à la fois pour SMTP et IMAP.

Fait amusant  :Il semble que l'application iOS Mail ait du mal à prendre en charge STARTTLS sur le port IMAP 143, mais elle prend en charge STARTTLS sur le port de soumission 587.

Échec de recherche temporaire

Si votre serveur de messagerie a fonctionné correctement pendant un certain temps, mais que vous trouvez soudainement l'erreur suivante dans le journal de messagerie,

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

Il est probable que votre base de données MariaDB/MySQL se soit arrêtée d'une manière ou d'une autre. Vous pouvez utiliser la commande suivante pour vérifier quand votre serveur de base de données s'est arrêté.

sudo journalctl -eu mariadb

ou

sudo journalctl -eu mysql

Une cause fréquente de cette situation est que votre serveur manque de mémoire. Vérifiez si votre serveur dispose de suffisamment de mémoire.

htop

ou

free -m

Nettoyer automatiquement le dossier indésirable et le dossier corbeille

Pour supprimer les e-mails du dossier Junk pour tous les utilisateurs, vous pouvez exécuter

sudo doveadm expunge -A mailbox Junk all

Pour supprimer des e-mails dans le dossier Corbeille, exécutez

sudo doveadm expunge -A mailbox Trash all

Je pense qu'il est préférable de nettoyer les e-mails qui se trouvent dans le dossier Junk ou Trash depuis plus de 2 semaines, au lieu de nettoyer tous les e-mails.

sudo doveadm expunge -A mailbox Junk savedbefore 2w

Ajoutez ensuite une tâche cron pour automatiser la tâche.

sudo crontab -e

Ajoutez la ligne suivante pour nettoyer le dossier Junk and Trash tous les jours.

@daily doveadm expunge -A mailbox Junk savedbefore 2w;doveadm expunge -A mailbox Trash savedbefore 2w

Pour recevoir un rapport lorsqu'une tâche Cron génère une erreur, vous pouvez ajouter la ligne suivante au-dessus de toutes les tâches Cron.

MAILTO="[email protected]"

Enregistrez et fermez le fichier. Et vous avez terminé.

Modifier le mot de passe utilisateur dans PostfixAdmin

Les utilisateurs peuvent se connecter à PostfixAdmin à https://postfixadmin.example.com/users/login.php , puis modifiez leurs mots de passe.

Restreindre l'accès à Sendmail

Par défaut, n'importe quel utilisateur local peut utiliser le sendmail binaire pour soumettre les e-mails sortants. Maintenant que votre serveur de messagerie utilise des boîtes aux lettres virtuelles, vous souhaiterez peut-être restreindre l'accès à sendmail binaire aux utilisateurs locaux de confiance uniquement, afin qu'un utilisateur malveillant ne puisse pas l'utiliser pour envoyer un grand volume d'e-mails afin de nuire à la réputation de votre serveur de messagerie. Modifiez le fichier de configuration principal de Postfix.

sudo nano /etc/postfix/main.cf

Ajoutez la ligne suivante à la fin de ce fichier, afin que seuls l'utilisateur root et www-data puissent envoyer des e-mails via sendmail. Vous pouvez également ajouter d'autres noms d'utilisateur.

authorized_submit_users = root,www-data

Enregistrez et fermez le fichier. Redémarrez ensuite Postfix.

sudo systemctl restart postfix

Étape suivante

J'espère que ce tutoriel vous a aidé à installer et à utiliser PostfixAdmin sur Ubuntu 20.04 pour créer des boîtes aux lettres virtuelles. Dans la partie 4, je vais vous montrer comment configurer SPF et DKIM avec Postfix pour améliorer la délivrabilité des e-mails et dans un prochain tutoriel, je vais vous montrer comment héberger plusieurs domaines avec PostfixAdmin.

Si vous souhaitez accéder aux e-mails à partir d'un navigateur Web, je vous recommande Roundcube, qui est un client de messagerie Web open source très populaire et riche en fonctionnalités. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite pour obtenir plus de conseils et d'astuces. Prenez soin de vous 🙂


Ubuntu
  1. Comment installer DKIM sur le serveur Ubuntu

  2. Installer le serveur Web Apache sur Ubuntu 12.10

  3. Serveur FTP Ubuntu de base ?

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

  5. Comment installer un serveur de messagerie avec PostfixAdmin sur Ubuntu 20.04

Comment créer un environnement virtuel Python 3 sur Ubuntu 20.04

Comment créer un serveur de messagerie complet sur Ubuntu

Comment installer Postfix Mail Server sur Ubuntu 20.04

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

Comment installer le serveur de messagerie avec PostfixAdmin sur CentOS 7

Comment créer un serveur Minecraft sur Ubuntu 20.04