Configurez Kodi IPTV m3u en moins de 2 minutes et regardez des chaînes illimitées

Postfix dovecot mysql

E-mail avec Postfix, Dovecot et MySQL + SSL

Vues : 1100

Dans ce guide, vous apprendrez à configurer un serveur de messagerie utilisateur virtuel sécurisé avec Postfix, Dovecot et MySQL sur Debian ou Ubuntu. Nous expliquerons comment créer de nouvelles boîtes aux lettres d’utilisateurs et envoyer ou recevoir des courriers électroniques depuis et vers des domaines configurés.

Pour une autre distribution Linux ou un serveur de messagerie différent, consultez nos tutoriels sur les courriers électroniques .

Avant de commencer

  1. Vérifiez que le pare-feu iptables ne bloque aucun des ports de messagerie standard ( 25 , 465 , 587 , 110 , 995 , 143 et 993 ). Si vous utilisez un type de pare-feu différent, vérifiez qu’il ne bloque aucun des ports nécessaires.
  2. Passez en revue les concepts du guide Exécution d’un serveur de messagerie .

Configurer le DNS

Lorsque vous êtes prêt à mettre à jour le DNS et à commencer à envoyer des messages au serveur, modifiez l’enregistrement MX du domaine afin qu’il pointe vers le domaine ou l’adresse IP du serveur, comme dans l’exemple ci-dessous:

Domain TTL Type Priority Target
example.com 86400 A 10 203.0.113.0
example.com MX 10 example.com
mail.example.com MX 10 example.com

Assurez-vous que l’enregistrement MX est modifié pour tous les domaines et sous-domaines susceptibles de recevoir un courrier électronique. Si vous configurez un nouveau domaine, vous pouvez effectuer ces étapes avant de configurer le serveur de messagerie.

Lorsque vous utilisez le gestionnaire DNS , créez un enregistrement MX qui pointe vers le domaine ou sous-domaine souhaité, puis créez un enregistrement A pour ce domaine ou sous-domaine, qui pointe vers l’adresse IP correcte.

Mise à jour du fichier ‘hosts’

Vérifiez que le fichier hosts contient une ligne pour l’adresse IP publique du serveur est associée au nom de domaine complet (FQDN). Dans l’exemple ci-dessous, 192.0.2.0 est l’adresse IP publique, hostname est le nom d’hôte local et hostname.example.com est le nom de domaine complet.

127.0.0.1  localhost.localdomain  localhost 
192.0.2.0  hostname.example.com    hostname

Installer le certificat SSL Totalement GRATUIT

Vous devrez installer un certificat SSL sur votre serveur de messagerie avant de suivre les étapes de configuration de Dovecot . Le certificat SSL authentifiera l’identité du serveur de messagerie auprès des utilisateurs et cryptera les données transmises entre le client de messagerie de l’utilisateur et le serveur de messagerie. Suivez notre guide pour installer un certificat SSL avec Certbot

Nous Supposons que vous avez déjà votre nom de domaine, par exemple exemple.com, et que les enregistrements MX de votre configuration DNS pointent vers votre serveur.

Vous pouvez vérifier cela rapidement en utilisant dig:

dig +short MX example.com

Génération de certificats SSL Gratuit

La meilleure solution pour générer des certificats SSL consiste à utiliser Let’s Encrypt. Installez le par:

sudo apt-get install certbot python-certbot-nginx

Demandez un certificat pour votre serveur de messagerie en:

certbot certonly --standalone -d mail.example.com

Remplacement de mail.example.com par le nom de domaine complet (FQDN) de votre serveur.

Les certificats émis par Let’s Encrypt expirent après 90 jours, mais seront automatiquement renouvelés tous les 60 jours par un travail Cron (installé par défaut dans la distribution Debian).

Prenez note du certificat et des emplacements de clé sur le VPS. Vous aurez besoin du chemin d’accès à chacun lors des étapes de configuration de Dovecot .

Installer les paquets

Connectez-vous à votre VPS via SSH. Remplacez 192.0.2.0 par votre adresse IP: ssh nom_utilisateur@192.0.2.0

Installez les packages nécessaires:

sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server

Vous ne serez pas invité à entrer un mot de passe pour l’utilisateur racine MySQL pour les versions récentes de MySQL.

En effet, sous Debian et Ubuntu, MySQL utilise maintenant par défaut le plug-in unix_socket ou auth_socket. Ce schéma d’autorisation vous permet de vous connecter à l’utilisateur racine de la base de données tant que vous vous connectez à partir de cet utilisateur root sur localhost. Lorsque vous y êtes invité, sélectionnez Site Internet comme type de serveur de messagerie que le programme d’installation de Postfix doit configurer.

Le nom de messagerie du système doit être le nom de domaine complet.

Postfix dovecot mysql
Postfix dovecot mysql

Versions

Ce guide utilise les versions de package suivantes:

  • Postfix 3.3.0
  • Dovecot 2.2.33.2
  • MySQL 14.14

MySQL

Les utilisateurs virtuels et les mots de passe du serveur de messagerie sont stockés dans une base de données MySQL. Dovecot et Postfix ont besoin de ces données. Suivez les étapes ci-dessous pour créer les tables de base de données pour les utilisateurs virtuels, les domaines et les alias:

Utilisez l’outil mysql_secure_installation pour configurer des options de sécurité supplémentaires. Cet outil vous demandera si vous voulez définir un nouveau mot de passe pour l’utilisateur root MySQL, mais vous pouvez ignorer cette étape:

 

sudo mysql_secure_installation

Répondez par “Y” aux questions suivantes:

 Remove anonymous users?  Y
 Disallow root login remotely?  Y 
 Remove test database and access to it?  Y 
 Reload privilege tables now?  Y 

Créer une nouvelle base de données:

sudo mysqladmin -u root -p create mailserver

Connectez-vous à MySQL:

sudo mysql -u root -p

Créez l’utilisateur MySQL et accordez au nouvel utilisateur des autorisations sur la base de données. Remplacez mailuserpass par un mot de passe sécurisé:

GRANT SELECT ON mailserver. * TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass';

Videz les privilèges MySQL pour appliquer le changement:

FLUSH PRIVILEGES;

Basculez vers la nouvelle base de données mailsever:

USE mailserver;

Créez une table pour les domaines qui recevront du courrier sur le serveur:

CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Créez une table pour toutes les adresses électroniques et mots de passe:

CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Créez une table pour les alias de messagerie:

 CREATE TABLE `virtual_aliases` (
   `id` int(11) NOT NULL auto_increment,
   `domain_id` int(11) NOT NULL,
   `source` varchar(100) NOT NULL,
   `destination` varchar(100) NOT NULL,
   PRIMARY KEY (`id`),
   FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE
 CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

AJOUTER DES DONNÉES

Maintenant que la base de données et les tables ont été créées, ajoutez des données à  MySQL.   *   Ajoutez les domaines à la table virtual_domains. Remplacer les valeurs pour  exemple.com et nom d’hôte avec vos propres paramètres:

 INSERT INTO `mailserver`.`virtual_domains`
   (`id` ,`name`)
 VALUES
   ('1', 'example.com'),
   ('2', 'hostname.example.com'),
   ('3', 'hostname'),
   ('4', 'localhost.example.com'); 

REMARQUE  Notez quel id correspond à quel domaine, la valeur id est nécessaire pour les deux prochaines étapes.

Ajoutez des adresses électroniques à la table virtual_users. La valeur domain_id  fait référence à l’id de la table virtual_domain. Remplacer l’email  adresse valeurs avec les adresses que vous souhaitez configurer sur le  serveur de courrier. Remplacez les valeurs de mot de passe par des mots de passe forts.

 INSERT INTO `mailserver`.`virtual_users`
   (`id`, `domain_id`, `password` , `email`)
 VALUES
   ('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()),
 -16))), 'email1@example.com'),
   ('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()),
 -16))), 'email2@example.com'); 

Un alias de courrier électronique transférera tous les messages d’une adresse de messagerie à une autre.  Pour configurer un alias de courrier électronique, ajoutez-le à la table virtual_aliases:

 INSERT INTO `mailserver`.`virtual_aliases`
   (`id`, `domain_id`, `source`, `destination`)
 VALUES
   ('1', '1', 'alias@example.com', 'email1@example.com'); 

l’ essai

Dans la section précédente, les données ont été ajoutées au serveur de messagerie MySQL.  base de données. Les étapes ci-dessous permettront de vérifier que les données ont été stockées et  peut être récupéré.

Connectez-vous à MySQL:

 sudo mysql -u root 

Vérifiez le contenu de la table virtual_domains:

 SELECT * FROM mailserver.virtual_domains; 

Vérifiez que vous voyez la sortie suivante:

 
 +----+-----------------------+
 | id | name                  |
 +----+-----------------------+
 |  1 | example.com           |
 |  2 | hostname.example.com  |
 |  3 | hostname              |
 |  4 | localhost.example.com |
 +----+-----------------------+
 4 rows in set (0.00 sec)
 

Vérifiez la table virtual_users:

 SELECT * FROM mailserver.virtual_users; 

Vérifiez la sortie suivante, les mots de passe hachés sont plus longs qu’ils ne le sont  apparaissent ci-dessous:

 
 +----+-----------+-------------------------------------+--------------------+
 | id | domain_id | password                            | email              |
 +----+-----------+-------------------------------------+--------------------+
 |  1 |         1 | $6$574ef443973a5529c20616ab7c6828f7 |email1@example.com  |
 |  2 |         1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 |email2@example.com  |
 +----+-----------+-------------------------------------+--------------------+
  2 rows in set (0.01 sec) 

Vérifiez la table virtual_aliases:

 SELECT * FROM mailserver.virtual_aliases; 

Vérifiez le résultat suivant:

 +----+-----------+-------------------+--------------------+
 | id | domain_id | source            | destination        |
 +----+-----------+-------------------+--------------------+
 |  1 |         1 | alias@example.com | email1@example.com |
 +----+-----------+-------------------+--------------------+
 1 row in set (0.00 sec) 

Si tout se passe comme prévu, quittez MySQL:

exit

POSTFIX

Postfix est un agent de transfert de courrier (MTA) qui relaie le courrier entre  votre VPS et Internet. Il est hautement configurable, permettant une grande  la flexibilité. Ce guide conserve de nombreuses configurations par défaut de Posfix  valeurs.

PARAMETRAGE DES FICHIERS DE CONFIGURATIONS

Le fichier main.cf est le principal fichier de configuration utilisé par Postfix.   Faites une copie du fichier de configuration par défaut de Postfix au cas où vous en auriez besoin.  pour revenir à la configuration par défaut:  

 sudo cp /etc/postfix/main.cf  /etc/postfix/main.cf.orig. 

Editez le fichier /etc/postfix/main.cf pour qu’il corresponde aux exemples de configuration.  Remplacez les occurrences de example.com par votre nom de domaine:  /etc/postfix/main.cf

Voir /usr/share/doc/postfix/TLS_README.gz dans le paquet postfix-doc pour plus de détails.# Voir /usr/share/postfix/main.cf.dist pour une version commentée et plus complète

# Spécifique à Debian: Spécifier un nom de fichier provoquera la première

# ligne de ce fichier à utiliser comme nom. Le défaut Debian est /etc/mailname.

# myorigin = / etc / mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# Ajouter .domain est le travail de la MUA.
append_dot_mydomain = no

# Décommentez la ligne suivante pour générer des avertissements de ‘courrier retardé’
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

# Authentication
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Voir /usr/share/doc/postfix/TLS_README.gz dans le paquet postfix-doc pour plus de détails.
# informations sur l’activation de SSL dans le client smtp.

# Restrictions
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unlisted_recipient,
reject_unauth_destination
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_relay_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination

# Voir /usr/share/doc/postfix/TLS_README.gz dans le paquet postfix-doc pour plus de détails.
# informations sur l’activation de SSL dans le client smtp.

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydomain = example.com
myorigin = $mydomain
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# Remettre la livraison locale au LMTP de Dovecot et lui dire où stocker le courrier
virtual_transport = lmtp:unix:private/dovecot-lmtp

# Domaines virtuels, utilisateurs et alias
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
mysql:/etc/postfix/mysql-virtual-email2email.cf

# Encore plus de restrictions et de paramètres MTA
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
#smtpd_etrn_restrictions = reject
#smtpd_reject_unlisted_sender = yes
#smtpd_reject_unlisted_recipient = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
#smtpd_hard_error_limit = 1
smtpd_timeout = 30s
smtp_helo_timeout = 15s
smtp_rcpt_timeout = 15s
smtpd_recipient_limit = 40
minimal_backoff_time = 180s
maximal_backoff_time = 3h

# Codes de rejet de réponse
invalid_hostname_reject_code = 550
non_fqdn_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unverified_recipient_reject_code = 550
unverified_sender_reject_code = 550

Le fichier main.cf déclare l’emplacement des fichiers virtual_mailbox_domains, virtual_mailbox_maps et virtual_alias_maps. Ces fichiers contiennent les informations de connexion pour les tables de recherche MySQL créées dans la section MySQL de ce guide.

Postfix utilisera ces données pour identifier tous les domaines, les boîtes aux lettres correspondantes et les utilisateurs valides.

Créez le fichier pour virtual_mailbox_domains. Remplacez la valeur du mot de passe par le mot de passe de votre utilisateur de base de données. Si vous avez utilisé un nom différent pour votre utilisateur de base de données et nom_bdd, remplacez-les par vos propres valeurs:

/etc/postfix/mysql-virtual-mailbox-domains.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name=”%s”

Créez le fichier /etc/postfix/mysql-virtual-mailbox-maps.cf et entrez les valeurs suivantes. Utilisez le mot de passe de l’utilisateur de la base de données et apportez les autres modifications nécessaires:

/etc/postfix/mysql-virtual-mailbox-maps.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email=”%s”

Créez le fichier /etc/postfix/mysql-virtual-alias-maps.cf et entrez les valeurs suivantes. Utilisez le mot de passe de l’utilisateur de la base de données et apportez les autres modifications nécessaires:

/etc/postfix/mysql-virtual-alias-maps.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source=”%s”

Créez le fichier /etc/postfix/mysql-virtual-email2email.cf et entrez les valeurs suivantes. Utilisez le mot de passe de l’utilisateur de la base de données et apportez les autres modifications nécessaires:

/etc/postfix/mysql-virtual-email2email.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email=”%s”

 

Redémarrez Postfix:

sudo systemctl restart postfix

La commande postmap crée ou interroge les tables de recherche de Postfix, ou met à jour une table existante. Entrez la commande suivante pour vous assurer que Postfix peut interroger la table virtual_domains. Remplacez example.com par la valeur du premier name. La commande doit renvoyer 1 si elle réussit:

sudo postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Testez Postfix pour vérifier qu’il peut interroger la table virtual_aliases. Remplacez alias@example.com par la première valeur source créée dans la table. La commande doit renvoyer la valeur de destination pour la ligne:

sudo postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Paramètres du programme “master”

Le programme master de Postfix démarre et surveille l’ensemble des processus de Postfix.

Le fichier de configuration master.cf répertorie tous les programmes et les informations sur la manière dont ils doivent être démarrés.

Faites une copie du fichier /etc/postfix/master.cf:

sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.orig

Modifiez /etc/postfix/master.cf pour qu’il contienne les valeurs de l’exemple extrait. Le reste du fichier peut rester inchangé:

master.cf

#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: “man 5 master” or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute “postfix reload” after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n – n – – smtpd
#smtp inet n – – – 1 postscreen
#smtpd pass – – – – – smtpd
#dnsblog unix – – – – 0 dnsblog
#tlsproxy unix – – – – 0 tlsproxy
submission inet n – y – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n – – – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

 Modifiez les autorisations du répertoire / etc / postfix pour limiter les autorisations afin d’autoriser uniquement son propriétaire et le groupe correspondant:

sudo chmod -R o-rwx /etc/postfix 

Redémarrez Postfix:

sudo systemctl postfix restart

Dovecot

Dovecot est l’agent de distribution de courrier (MDA) qui reçoit les messages de Postfix et les distribue dans une boîte aux lettres virtuelle. Dans cette section, configurez Dovecot pour obliger les utilisateurs à utiliser SSL lorsqu’ils se connectent afin que leurs mots de passe ne soient jamais envoyés au serveur en texte brut.

Copiez tous les fichiers de configuration afin de pouvoir y revenir facilement si nécessaire:

sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig 
sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig 
sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig 
sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig 
sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Editez le fichier /etc/dovecot/dovecot.conf. Ajoutez protocoles = imap pop3 lmtp à la section du fichier correspondant aux protocoles installés:   dovecot.conf

## Dovecot configuration file

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp

postmaster_address=postmaster at example.com

Editez le fichier /etc/dovecot/conf.d/10-mail.conf. Ce fichier contrôle l’interaction de Dovecot avec le système de fichiers du serveur pour stocker et récupérer les messages:

Modifiez les variables suivantes dans le fichier de configuration:

10-mail.conf


mail_location = maildir:/var/mail/vhosts/%d/%n/

mail_privileged_group = mail

Créez le répertoire /var/mail/vhosts/ et un sous-répertoire pour votre domaine. Remplacez example.com par votre nom de domaine:

sudo mkdir -p /var/mail/vhosts/example.com

Ce répertoire servira de stockage pour le courrier envoyé à votre domaine. Créez le groupe vmail avec l’ID 5000.

Ajoutez un nouvel utilisateur vmail au groupe vmail. Cet utilisateur système lira le courrier du serveur.

sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail -d /var/mail

Changez le propriétaire du dossier /var/mail/ et son contenu pour qu’il appartienne à vmail:

sudo chown -R vmail:vmail /var/mail 

Editez le fichier d’authentification de l’utilisateur, situé dans /etc/dovecot/conf.d/10-auth.conf. Décommentez les variables suivantes et remplacez-les par les valeurs d’exemple de l’extrait de fichier:

10-auth.conf


disable_plaintext_auth = yes

auth_mechanisms = plain login

!include auth-system.conf.ext

!include auth-sql.conf.ext

Remarque  Pour référence, voir un fichier complet 10-auth.conf.

 Editez le fichier /etc/dovecot/conf.d/auth-sql.conf.ext avec les informations d’authentification et de stockage.

Assurez-vous que votre fichier contient les lignes suivantes.

Assurez-vous que la section passdb n’est pas commentée, que la section userdb qui utilise le pilote statique est décommentée, mettez à jour avec le bon argument et mettez en commentaire la section userdb qui utilise le pilote SQL:

auth-sql.conf.ext

…
 passdb {
   driver = sql
   args = /etc/dovecot/dovecot-sql.conf.ext
 }
 …
 userdb {
 driver = sql
 args = /etc/dovecot/dovecot-sql.conf.ext
 }
 …
 userdb {
   driver = static
   args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
 }
 …

Mettez à jour le fichier /etc/dovecot/dovecot-sql.conf.ext avec vos informations de connexion MySQL. Décommentez les variables suivantes et remplacez les valeurs par l’exemple extrait. Remplacez nombase, utilisateur et mot de passe par vos propres valeurs de base de données MySQL: ovecot-sql.conf.ext

..
driver = mysql

connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass

default_pass_scheme = SHA512-CRYPT

password_query = SELECT email as user, password FROM virtual_users WHERE email=’%u’;

La variable password_query utilise les adresses électroniques répertoriées dans la table virtual_users en tant qu’informations d’identification de nom d’utilisateur pour un compte de messagerie.

Pour utiliser un alias comme nom d’utilisateur: Ajoutez l’alias comme adresse électronique source et de destination à la table virtual_aliases.

Modifiez la valeur password_query du fichier /etc/dovecot/dovecot-sql.conf.ext en :

password_query  = SELECT email as user, password FROM virtual_users WHERE email=(SELECT  destination FROM virtual_aliases WHERE source = '%u'); 

Remarque Pour référence, affichez un fichier complet de dovecot-sql.conf.ext.

Changez le propriétaire et le groupe du répertoire /etc/dovecot/ en vmail et dovecot :

sudo chown -R vmail:dovecot /etc/dovecot

Modifier les autorisations sur le répertoire /etc/dovecot/ pour qu’elles soient lues, écrites et exécutées de manière récursive pour le propriétaire du répertoire

sudo chmod -R o-rwx /etc/dovecot 

Editez le fichier de paramètres de service /etc/dovecot/conf.d/10-master.conf:

Remarque : Lorsque vous modifiez le fichier, veillez à ne pas supprimer d’accolades d’ouverture ou de fermeture. En cas d’erreur de syntaxe, Dovecot se plantera silencieusement.Vous pouvez vérifier /var/log/upstart/dovecot.log pour corriger l’erreur.

Voici un exemple de fichier complet 10-master.conf.

Désactivez les protocoles IMAP et POP3 non chiffrés en définissant les ports du protocole sur 0. Décommentez les variables port et ssl:

10-master.conf

...
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
...
}
...
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
...
 

Recherchez la section service lmtp du fichier et utilisez la configuration ci-dessous:

10-master.conf

...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
#mode = 0666i
mode = 0600
user = postfix
group = postfix
}
...
}

Recherchez l’authentification du service et configurez-la comme indiqué ci-dessous:

10-master.conf

...
service auth {
...
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
...
user = dovecot
}
...

Dans la section service auth-worker, supprimez la mise en commentaire de la ligne utilisateur et définissez-la sur vmail:

10-master.conf

service auth-worker {
...
user = vmail
}
...

Enregistrez les modifications dans le fichier /etc/dovecot/conf.d/10-master.conf. Modifiez le fichier /etc/dovecot/conf.d/10-ssl.conf afin d’exiger l’utilisation de SSL et d’ajouter l’emplacement du certificat SSL et de la clé de votre domaine.

Remplacez example.com par votre domaine:

10-ssl.conf

...
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = required
...
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem

Redémarrez Dovecot pour activer toutes les configurations:

 sudo systemctl restart dovecot 

Test e-mail avec mailutils

  1. Pour envoyer et recevoir des e-mails de test sur votre serveur de messagerie, installez le paquet Mailutils:

    sudo apt-get install mailutils
    
  2. Envoyez un e-mail de test à une adresse e-mail située en dehors de votre serveur de messagerie, telle qu’un compte Gmail. Remplacez email1example.com par une adresse électronique de votre serveur de messagerie:

    echo "Email body text" | sudo mail -s "Email subject line" recipient@gmail.com -aFrom:email1@example.com
    
  3. Connectez-vous au compte de messagerie de test et vérifiez que vous avez bien reçu le courrier de l’adresse électronique du serveur de messagerie spécifiée.

Envoyez un e-mail de test à votre serveur de messagerie à partir d’une adresse électronique externe. Reconnectez-vous à votre Serveur et vérifiez que le courrier électronique a bien été reçu. remplacez par le nom d’utilisateur et le domaine auxquels vous avez envoyé le courrier:

sudo mail -f /var/mail/vhosts/example.com/email1

Lorsque vous y êtes invité, entrez le numéro correspondant au courrier électronique que vous souhaitez afficher:

"/var/mail/vhosts/example.com/": 9 messages 5 new 4 unread
U 1 John Doe Wed Jun 27 16:00 57/2788 Test email 1
U 2 John Doe Wed Jun 27 16:02 56/2761 Test email 2
U 3 John Doe Wed Jun 27 16:35 15/594 Test email 3
U 4 John Doe Wed Jun 27 16:42 71/3535 Test email 4
>N 5 John Doe Mon Jul 2 10:55 13/599 Subject of the Email?

L’en-tête et le corps du message électronique doivent s’afficher. Envisagez d’ajouter un filtre anti-spam et anti-virus et un client de messagerie Web.

 

Sabrina

Sabrina

Développeur informatique, (All-PHP's, JAVA, PERL, C, C++, Visual-Basic, Pascal, SPSS, SQL). Administrateur de réseaux informatiques, (Debian, Ubuntu) (Proxmox, Cpanel, Webmin, DNS), et Webmaster (Apache) ( Wordpress, PrestaShop, WooCommerce, Webmail Serveur et Client) 1990 -> 2017, Retraité depuis 2018... Contact: webmaster@milbako.com

Voir tous les articles de Sabrina →

4 réflexions sur « E-mail avec Postfix, Dovecot et MySQL + SSL »

  1. Nom: Mathéo Tichy, Adresse de contact: matheo.tichy@gmail.com

    Bonjour,

    J’ai suivi à la lettre votre tutoriel pour créer un Email avec Postfix.
    Mon VPS tourne sous Debian 10.
    Mais malheureusement lorsque je m’envoie un mail, rien ne rentre dans le dossier.
    Quels sont les éléments que je peux vérifier ?

    Et sinon, j’ai trouvé quelques erreurs dans le tutoriel.
    – Lors de la création de la base de donnée, il faut remplacer “mailservr” par “mailserver”
    => sudo mysqladmin -u root -p create mailservr

    – Lorsque vous faites configurer les fichiers de config de postfix, dans les lignes SQL, au niveau du % il faut mettre des guillemets doubles à la place de : `
    Dans mon cas le code ne fonctionnait pas (query impossible à exécuter)

    Merci d’avance pour votre réponse !

    1. vérifier les ports 587,993,143 avec la commande :

      $ sudo netstat -anlp | grep :

      pour voir si les serveurs postfix et dovecot sont fonctionnels et écoutent sur les ports adéquat.

      en suite essayer cette commande pour voir s’il y-a un problème avec postfix ou dovecote:

      $ sudo systemctl postfix status
      $ sudo systemctl dovecot status   
      

Laisser un commentaire

Traduire