Configurer postfix – installer et configurer un serveur de messagerie partie 5

Chapitre
- 1- Pré-requis avant installer Postfix
- 2- Installer Postfix et les paquets pour le système
- 3 – Pré-requis avant installer postfixadmin
- 4 – Installer et configurer de PostfixAdmin
- 5-installer postfix
- 6- Installer et configurer Dovecot
- 7- Vérification des ports smtp imap ouvert dans iptables et test d’envoi de mail
Pré-requis pour postfix
Dans un premier temps, avant de commencer la configuration, vous devez renommer le fichier main.cf en main.cf.default.
En effet; en cas d’erreur nous pouvons toujours revenir en arrière.
Puis créer un fichier un nouveau fichier main.cf dans /etc/postfix/
Commencez par créer un dossier mysql
Préparation de mysql
Maintenant nous allons créer 5 fichiers de configuration qui vont permettre d’interagir avec MySQL.
Nous les plaçons dans le dossier que nous avons créé /etc/postfix/mysql/
Attention : Vérifier que les fichiers ont tous un – ou _ car ça peut engendrer des erreurs
- mysql_virtual-domains-maps.cf
- mysql_virtual-alias_domain-maps.cf
- mysql_virtual_alias-domain_catchall-maps.cf
- mysql_virtual-mailbox-maps.cf
- mysql_virtual-alias-domain-mailbox-maps.cf
mysql_virtual_domains_maps.cf
user = postfixadminpassword = Votre mot de passehosts = 127.0.0.1dbname = postfixadminquery = SELECT domain FROM domain WHERE domain=’%s’ AND active = ‘1’
mysql_virtual_alias_domain_maps.cf
user = postfixadminpassword = Votre mot de passehosts = 127.0.0.1dbname = postfixadminquery = 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′
#
mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadminpassword = Votre mot de passehosts = 127.0.0.1dbname = postfixadminquery = 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′
#
mysql_virtual_mailbox_maps.cf
user = postfixadminpassword = Votre mot de passehosts = 127.0.0.1dbname = postfixadminquery = SELECT maildir FROM mailbox WHERE username=’%s’ AND active = ‘1’
#
mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadminpassword = Votre mot de passehosts = 127.0.0.1dbname = postfixadminquery = 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′
Mise à jour du fichier de configuration main.cf
postconf -e “virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf”
postconf -e “virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf”
virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf”
virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
LMTP est un agent de livraison local distribuera les courriels entrants dans les boîtes aux lettres des utilisateurs.
Exécutez la commande suivante pour définir le service LMTP de Dovecot comme transport de livraison de courrier par défaut :
Créer l’échange de clés Diffie-Hellman
Avant de configurer le TLS, vérifier bien que votre domaine est en https avec lets’sencrypt. voir les pré-requis dans la partie 1
L’échange de clés Diffie-Hellman (DH) est une méthode d’échange sécurisé de clés cryptographiques sur un canal de communication non sécurisé.
Générer un nouveau jeu de paramètres DH de 2048 ou 4096 bits pour renforcer la sécurité :
Voici la deuxième commande à lancer.
Organisation du fichier de config
Dans ce fichier, j’ai séparé les bloc pour mieux comprendre.
Les blocs sont les suivant :
- Générale
- TLS ( SMTP Sortie vers client et Entrée vers serveur)
- SMTPD Entrée vers serveur
- SMTP Sortie vers client
- SASL
- VIRTUALS MAPS
- RESTRICTIONS
- OpenDKIM
Paramétrage Général
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)biff = noappend_dot_mydomain = no
SMTPD sortie vers serveur
#############################
# Smtpd ( ENTREE / Serveur ) #
#############################
# TLS parameters
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.mondomaine.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.mondomaine.com/privkey.pem
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_dh1024_param_file = $config_directory/dh2048.pem
smtpd_tls_dh512_param_file = $config_directory/dh512.pem
tls_medium_cipherlist = pour créer aller sur le site de https://ssl-config.mozilla.org/#server=postfix&version=3.4.8&config=intermediate&openssl=1.1.1k&guideline=5.7
smtpd_tls_CAfile = $smtp_tls_CAfile
tls_preempt_cipherlist = no
tls_random_source = dev:/dev/urandom
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
lmtp_tls_session_cache_database = btree:${data_directory}/lmtp_scache
Paramètre SMTP Sortie vers client
Nous allons paramétrer les paramètres de chiffrement TLS pour les sortie vers le client et entrée vers le serveur. Le protocol utilisé est ssl.
#############################
# SMTP ( SORTIE / Client ) #
#############################
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_ciphers = medium
smtp_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, 3DES, RC2, RC4, MD5, PSK, SRP, DSS, AECDH, ADH
smtp_tls_note_starttls_offer = yes
SASL
Nous allons déclaré Dovecot pour identifier les utilisateurs.
## Paremètre SASL ##
#####################
# C’est ici que l’on déclare Dovecot comme une passerelle pour authentifier les utilisateurs.
# Postfix peut s’appuyer sur Dovecot pour identifier les connexions SMTP.
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
RESTRICTIONS
## Paramètre de RESTRICTIONS ##
###############################
# Règles sur les adresses de destination
# permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifié
# reject_non_fqdn_recipient : Refuser les adresses de destinations invalides (non FQDN)#smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, reject_unknown_recipient_domain, >
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
#
# Règles sur l’échange HELO qui survient avant la connexion # reject_invalid_helo_hostname : Refuser les échanges HELO invalides
# reject_non_fqdn_helo_hostname : Refuser les noms d’hôte invalides (non FQDN)
# reject_unknown_helo_hostname : Refuser les noms d’hôte qui n’ont pas de champ DNS A ou MX dans leurs DNS.
#
#smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname reject_>
#smtpd_client_restrictions = permit_mynetworks, permit_inet_interfaces, permit_sasl_authenticated reject_plaintext_session, reject_unauth_pipelining
#
# Règles de connexion des clients
# permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifié
# reject_plaintext_session : Refuser les connexions non sécurisées
# reject_unauth_pipelining : Refuser les défauts lors de la connexion
#smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_sender_login_mismatch
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
VIRTUALS MAPS
Le paramètre virtual_transport est très très important, il permet à Postfix de savoir où envoyer les emails reçus. Dans notre cas, on utilise le protocole LMTP pour les acheminer jusqu’à Dovecot.
##############################
## Paramètre VIRTUALS MAPS ##
##############################
# Gestion et du stockage des emails. Dans la suite de ce tutoriel
#nous allons créer un utilisateur nommé vmail avec UID/GID de 5000
#avec un HOME par défaut pointant sur /var/mail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 5000
virtual_mailbox_base = /var/mail
# Le paramètre virtual_transport est très très important,
# il permet à Postfix de savoir où envoyer les emails reçus. Dans notre cas,
# on utilise le protocole LMTP pour les acheminer jusqu’à Dovecot
#
#
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql-virtual-domains-maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql-virtual-mailbox-maps.cf, mysql:/etc/postfix/mysql/mysql-virtual-alias-domain-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql/mysql-virtual-alias-domain-maps.cf, mysql:/etc/postfix/mysql/mysql-virtual-alias-domain-catchall-maps.cf
D’une part nous allons définir règles de restrictions au niveau du protocole SMTP afin de sécuriser les échanges lors de l’envoie des mails.
DKIM
DKIM est une méthode d’authentification utilisée pour empêcher l’usurpation d’adresses électroniques.
#########################
## Paramètre OpenDKIM ##
#########################
# Indiquer à Postfix comment s’interfacer avec OpenDKIM
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
Installer opendkim
- TrustedHosts
- KeyTable
- SigninTable
KeyTable est la liste des clés privées par sélecteurs.
SigninTable Des clés privées à utiliser en fonction de l’adresse From;
Je vous parle de sélecteur mais c’est quoi ?
Un sélecteur est un mot qui sert aux client de trouver le sous-domainee de l’enregistrement TXT qui contient la clé publique de DKIM du domaine.
Generer une clé DKIM
# External Hosts that OpenDKIM will Trust
# liste des domaines
mondomaine1.com
mondomaine2.com
mondomaine3.com
EOF
mondomaine.com
mondomaine1.com
mondomaine2.com
mondomaine3.com
SOCKET="inet:8891:localhost"
for domain in mondomaine1.com mondomaine2.com mondomaine3.com
do
mkdir -p /etc/opendkim/keys/$domain
cd /etc/opendkim/keys/$domain
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
done
for domain in mondomaine1.com mondomaine2.com mondomaine3.com
do
echo “default._domainkey.$domain $domain:default:/etc/opendkim/keys/$domain/default.private” >> /etc/opendkim/KeyTable
done
do
echo “$domain default._domainkey.$domain” >> /etc/opendkim/SigningTable
done
Refaire cet
Configuration de opendkim.conf
Syslog yes
SyslogSuccess yes
LogWhy yes
Socket inet:8891@localhost
ReportAddress root@momdomaine.com
SendReports yes
UserID milter
PidFile /run/opendkim/opendkim.pid
Mode s
Canonicalizatio relaxed/simple
Statistics /var/lib/opendkim/stats.dat
Domain mail.mondomaine.com
OversignHeaders From
UserID opendkim
UMask 007
Socket local:/run/opendkim/opendkim.sock
TrustAnchorFile /usr/share/dns/root.key
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigninTable
ExternalIgnoreList file:/etc/opendkim/TrustedHostlist
InternalHosts file:/etc/opendkim/TrustedHostlist
Gestion et du stockage des mails
Ici c’est le chemin ou nous allons stocker les mail. J’ai choisi le dossier /var/mail/vhosts/.
Chaque domaine est bien séparé.
Nous allons créer un utilisateur virtuel nommé vmail avec comme UID/GID de 5000, avec un HOME par défaut pointant sur /var/mail.
Paramètrage des port 465 et 587
Nous devrons également éditer le fichier de configuration master.cf dans /etc/postfix/ de Postfix
Activer le port de soumission (587) et le port smtps (465).
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATINGsmtps inet n – y – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Retrouver toute les information sur le site officiel https://www.postfix.org/
Nous avons terminé de configurer postfix. Maintenant, nous allons configurer Dovecote.
Rétroliens/Pings