fbpx

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.

mv /etc/postfix/main.cf /etc/postfix/main.cf.default

Puis créer un fichier un nouveau fichier main.cf dans /etc/postfix/

touch /etc/postfix/config.cf

Commencez par créer un dossier  mysql

mkdir -p /etc/postfix/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

#/etc/postfix/sql/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

#/etc/postfix/sql/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

#/etc/postfix/sql/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

#/etc/postfix/sql/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

#/etc/postfix/sql/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

 
Une fois les fichiers de configuration SQL sont créés, mettez à jour le fichier de configuration postfix pour y inclure les informations relatives aux domaines virtuels, aux utilisateurs et aux alias stockés dans la base de données MySQL.
 
Vous tapez les commandes suivante pour les inserer dans le dosier /etc/postfix/mysql/
 
postconf -e “virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.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”

Vérifier dans le fichier /etc/postfix/main.cf que nous avons bien les ligne ajoutés :
 
# nano /etc/postfix/main.cf

 

virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_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 :

postconf -e “virtual_transport = lmtp:unix:private/dovecot-lmtp”

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é :

openssl dhparam -out /etc/ssl/certs/dhparam4096.pem 4096

Voici la deuxième commande à lancer.

openssl dhparam -out /etc/ssl/certs/dhparam512.pem 512
 

 

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

######################### GENERALS #########################

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)biff = noappend_dot_mydomain = no

readme_directory = no
delay_warning_time = 4h
mailbox_command = procmail -a “$EXTENSION”
recipient_delimiter = +
disable_vrfy_command = yes
inet_protocols = ipv4
inet_interfaces = all
myhostname = diane.davenet.frmyorigin = /etc/mailnamemydestination = $myhostname, mail.mondomaine.com, elisa.mondomaine.com, localhost.mondomaine.com, localhostmynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128relayhost = alias_maps = hash:/etc/aliasesalias_database = hash:/etc/aliasesmailbox_size_limit = 0 recipient_delimiter = +

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

Pour installer DKIM, vous devez ajouter ces paquets sur votre serveur :
 
root@elise# apt install opendkim
 
Nous devons créer le dossier opendkim
 
Attention : /etc/opendkim et les fichiers dans /etc/opendkim doivent appartenir à l’utilisateur et au groupe o.pendkim
 
mkdir -p /etc/opendkim
 
Nous devons créer plusieurs fichiers :
  • 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

Créer des clé multi-serveur
 
Voici un exemple de contenu pour notre domaine.
 
Vous gérer plusieurs domaines, vous devez créer un fichier hôtes /etc/opendkim/TrustedHosts
auxquels DKIM doit faire confiance un par ligne.
 
Les commentaires sont autorisés par un #.
 
Voici le 1er script
 
#!/bin/bash
cat > /etc/opendkim/TrustedHosts << EOF
# External Hosts that OpenDKIM will Trust
# liste des domaines
mondomaine1.com
mondomaine2.com
mondomaine3.com
EOF
 
Rendre exécutable le fichier
 
chmod +x /etc/opendkim/TrustedHosts
 
 
Lancer la commande
 
 
./TrustdHosts
 
 
Voici le fichier /etc/opendkim/TrustedHosts
 
# External Hosts that OpenDKIM will Trust
# liste des domaines
mondomaine.com
mondomaine1.com
mondomaine2.com
mondomaine3.com
 
Nous devons definir le port d’écoute dans /etc/default/opendkim
 
root@elise# vi /etc/default/opendkim
 
SOCKET="inet:8891:localhost"
Nous générons des clés par domaines.
Pour cela nous créons un script shell.
 
 
#! /bin/bash
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
 
Nous définissons le domaine DKIM pour chaque domaine.
Le sélecteur est donc default.
 
#!/bin/bash
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
Déclarer les domaines validés avec le même nom default
 
for domain in mondomaine1.com mondomaine2.com mondomaine3.com
do
echo “$domain default._domainkey.$domain” >> /etc/opendkim/SigningTable
done
 
Pour finir vous pouvez aller chez votre registar pour chaque domaine puis ajouter la clé DKIM.
 
 
Créer un fchier txt
 
 
default._domainkey.mondomaine.com.     IN    DKIM « v=DKIM1; g=*; k=rsa; p=contenu_cle_publique »

Refaire cet

 

 

 

 

Configuration de opendkim.conf

Dans le fichier de configuration /etc/opendkim.conf, vous devez mettre ces informations

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é.

mkdir -p /var/mail/vhosts/domain.com

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.

# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /var/vmail/ -m
chown -R vmail:vmail /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).

 
submission inet n            –             y                   –             –              smtpd
-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.

dovecot – installer et configurer partie

%d blogueurs aiment cette page :