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
Où
--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. 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 ! 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 🙂