Installer Postfix en local pour un poste de travail

Pour une correspondance entre vos utilisateurs d'un poste de travail et avec les applications locales de la machine, il est important d'installer un serveur de courrier MTA. Pour plus d'informations sur la messagerie lire Comment fonctionne le courriel sous Linux ?, et sur les principes du serveur Postfix lire Comment configurer sa distribution de courriels systèmes MTA avec Postfix ?

Installez les paquets du serveur de messagerie postfix. Choisir «pas de configuration» si l'installation demande de paramétrer le serveur de messagerie.

Installer le client Mutt de messagerie MUA mutt (les clients MUA de mailutils et de bsd-mailx ne supportent que le format mbox pour la gestion locale, vous pouvez aussi utiliser Neomutt avec plus de fonctionnalités en remplacement de Mutt Neomutt).

Vous devez définir qui va avoir la supervision de la messagerie. Donc si l'utilisateur root est le superviseur de la messagerie, ou si c'est un utilisateur du système (serveur ou desktop Linux). Le fichier /etc/aliases (kate /etc/aliases) est à paramétrer comme suit.

Avec l'utilisateur directement gestionnaire de messagerie :

postmaster:    utilisateur

Avec l'utilisateur gestionnaire de la machine Linux (relais postmater à l'utilisateur root) :

postmaster:    root
root:    utilisateur
Pour valider dans Postfix la configuration après modification (en ayant créer une première configuration du serveur de messagerie avec l'étape de configuration ci-après) :
sudo postalias /etc/aliases
Par défaut, lors de la configuration du serveur de messagerie, celui-ci sera positionné avec l'utilisateur root

Vérifiez votre nom d'ordinateur :

hostname

retourne

ma-machine

Vérifiez votre DNS :

hostname -d

Puis vérifiez avec netsat que les requêtes DNS sont accessibles sur le port 53 :

sudo netstat -alnp | grep -i :53

retourne

tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      780/systemd-resolve 
udp        0      0 127.0.0.53:53           0.0.0.0:*                           780/systemd-resolve 
udp        0      0 224.0.0.251:5353        0.0.0.0:*                           6721/chrome --passw 
udp        0      0 224.0.0.251:5353        0.0.0.0:*                           6861/chrome --type= 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           816/avahi-daemon: r 
udp6       0      0 :::5353                 :::*                                816/avahi-daemon: r
Tapez pour installer netstat :
sudo apt install net-tools

Vérifier la résolution DNS :

ma-machine est le nom d'ordinateur, et local.fr le domaine DNS.

dig ma-machine.local.fr +short

retourne l'adresse ip de votre machine

xxx.xxx.xxx.xxx

Vérifiez l'accès externe de la résolution DNS :

dig google.com +short

retourne l'adresse ip du serveur google

216.58.xxx.xxx

Si vous n'avez pas un serveur DNS dédié à votre ordinateur

Pour en créer un :

sudo hostnamectl set-hostname ma-machine.local.fr --static

Remplacez local.fr par le non DNS que vous voulez, et ma-machine avec le non d'ordinateur.

Vérifiez que le DNS fonctionne bien :

hostname

retourne le nom d'ordinateur

ma-machine.local.fr
hostname -d

retourne le domaine DNS de l'ordinateur

local.fr
Si vous voulez ouvrir la résolution DNS sur le réseau local avec le parefeu UFW :
sudo ufw allow from xxx.xxx.xxx.0/16 to any port 53 proto udp

Remplacez xxx.xxx.xxx par le début de votre adresse ip de réseau local pour votre machine.

Vous pouvez maintenant configurer le serveur de messagerie Postfix.

Si votre application est déjà installée, tapez :

sudo dpkg-reconfigure postfix

Entrez les détails suivants Touche tabulation pour basculer sur OK, et touche Entrée pour valider le message d'information.


Choisissez le type de configuration automatique Postfix de serveur de messagerie que vous voulez faire. Ici c'est Local Uniquement


Ici on va fixer le non de domaine de messagerie (par exemple @local.fr). Donc saisissez le nom du domaine de messagerie que vous voulez pour vos courriels locaux des utilisateurs de la machine.

La variable du fichier Ubuntu /etc/mailname et le paramètre Postfix myorigin sont donc paramétrés ici.


Ici on fixe le gestionnaire de messagerie.

Si vous n'avez pas précisé en amont de cette configuration le gestionnaire de messagerie, le configurateur du serveur de messagerie remplacera le nom d'utilisateur que vous avez saisie par root dans le fichier /etc/aliases (postmaster: root)

Ici on fixe les domaines de messagerie à accepter comme courriels au départ. Par exemple pour des adresses @Ma-Machine (résultat de la commande bash hostname) ajouter Ma-Machine, pour des courriels @local.fr ajouter local.fr, etc.

Donc dans notre cas :

Ma-Machine, Ma-Machine.local.fr, localhost.localdomain, localhost, local.fr

C'est la variable mydestination du fichier /etc/postfix/main.cf qui est modifiée.



Définit sur quel réseau distribuer les courriels.

127.0.0.1/32 [::1]/128

C'est la variable mynetworks du fichier /etc/postfix/main.cf qui est modifiée.


Fixe un taille limite pour les boites aux lettres des comptes utilisateur du système.

C'est la variable mailbox_size_limit du fichier /etc/postfix/main.cf qui est modifiée.


Définit une extension pour des sous domaines de messagerie.

C'est la variable recipient_delimiter du fichier /etc/postfix/main.cf qui est modifiée.


Définit les protocoles du réseaux de transport qui doivent être utiliser.

C'est la variable inet_protocols du fichier /etc/postfix/main.cf qui est modifiée.

Nous remarquons que le «configurateur» de Postfix ne demande pas de préciser où les boîtes aux lettres des utilisateurs sont situées.

La commande de la file d'attente :

postconf queue_directory

renvoie

queue_directory = /var/spool/postfix

La commande de boîtes postales :

postconf mail_spool_directory

renvoie

mail_spool_directory = /var/mail

Si on passe la commande de boîtes aux lettres utilisateurs :

postconf home_mailbox

Nous avons :

home_mailbox =

Nous voyons alors que les boîtes aux lettres des utilisateurs sont des boîtes postales et se situent dans /var/mail/utilisateur.

Il nous faudra donc éditer le fichier /etc/postfix/main.cf (kate /etc/postfix/main.cf) et ajouter la variable home_mailbox pour vos utilisateurs.

Par exemple :

# au format maildir
home_mailbox = .local/share/courriels/arrivées/

ou passer la commande dans un terminal :

sudo postconf -e home_mailbox=.local/share/courriels/arrivées/

afin que le courriel soit directement distribué dans la boîte aux lettres locale de l'utilisateur.

Pour valider la configuration dans Postfix, tapez :

systemctl restart postfix

Testez la lecture de la boîte aux lettres :

mutt

Si vous avez un message du genre :

/home/utidisateur/Mail n'existe pas. Le créer ? ([oui]/non):

C'est que votre client mail est mal configuré.

Tapez :

n

puis pour quitter Mutt

q

Éditer le fichier .muttrc dans votre dossier /home/utilisateur (kate ~/.muttrc) Et ajouter ou modifier ces lignes :

# Configuration de base
set realname="{Prénom NOM}"
set header_cache=~/.mutt/cache/headers
set certificate_file=~/.mutt/certificates
set message_cachedir=~/.mutt/cache/bodies
set beep
set use_from = yes

# Boite de réception
set spoolfile=~/.local/share/courriels/arrivées/
# Boite aux lettres de Mutt
set folder=~/.local/share/courriels

# Autres dossiers
set postponed=+brouillons
set record=+envoyés

# Encodage à utiliser
set charset=utf-8
set send_charset=utf-8
# Format de la date à afficher avant les citations lors d'une réponse
set date_format="%A %d %B %Y à %I:%M:%S%p"
set index_format="%4C %Z %{%b %d} %-15.15F (%4l) %s"
set fast_reply
set include=yes

# Configuration SMTP
set sendmail="/usr/sbin/sendmail"

Bloquer le port 25 SMTP standard

Test de la connexion sur le port 25

Déjà testons que le port 25 est ouvert. Pour cela tapez la commande :

telnet localhost 25

Ce qui affiche

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP Postfix (Ubuntu)

Tapez :

HELO Ma-Machine

retourne

250 Ma-Machine

Puis saisissez l'identifiant d'un compte local :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Saisissez le destinataire :

RCPT TO: utilisateur@localhost

retourne

250 2.1.5 Ok

Saisissez :

DATA

retourne

354 End data with <CR><LF>.<CR><LF>

Et enfin vous pouvez saisir votre courriel :

From: utilisateur
To: utilisateur
Subject: Test de message sur port 25
Ceci est un test d'envoie sur port 25
Merci de votre coopération
.

retourne

250 2.0.0 Ok: queued as 9E77AA02321

Pour quitter tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Vous avez expédié un courriels :-)

Blocage du port 25

Modifier le fichier master.cf (kate /etc/postfix/master.cf)

Changer

smtp      inet  n       -       y       -       -       smtpd

en

587     inet    n       -       y       -       -       smtpd
      -o content_filter=dksign:[127.0.0.1]:12028

Redémarrage de Postfix pour valider les changements :

systemctl restart postfix

Test du verrouillage du port 25

Pour cela taper :

telnet localhost 25

retourne

Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Test de l'accès sur le port 587

Pour cela taper :

telnet localhost 587

retourne

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP Postfix (Ubuntu)

Tapez :

HELO Ma-Machine

retourne

250 Ma-Machine

Puis saisissez l'identifiant d'un compte local :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Tapez pour quitter :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Renforcer la sécurité

Vous pouvez modifier la directive

smtpd_banner = $myhostname ESMTP (Courriels)

dans le fichier main.cf si vous voulez plus de sécurité. Cela retournera lors de la connexion telnet sur le port 587 :

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP (Courriels)

Mettre en place la connexion TLS

Pour valider le transport TLS il faut modifier le fichier main.cf (kate /etc/postfix/main.cf) comme suit :

# TLS pour le serveur smtpd de Postfix
# Utilise le générateur de nombres aléatoires de Linux
tls_random_source = dev:/dev/urandom
# Active le protocole de cryptage TLS
smtpd_use_tls = yes
# N'autorise que les connections TLS
smtpd_tls_auth_only = yes
# Niveau de sécurité dans la négociation du protocole
smtpd_tls_security_level = may
# Les clefs du cryptage
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

# TLS pour le client
# Active le protocole de cryptage TLS
smtp_use_tls = yes
# Niveau de sécurité dans la négociation du protocole
smtp_tls_security_level = may
# Les clefs du cryptage
smtp_tls_CApath = /etc/ssl/certs
# Répertoire de cache pour la communication
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Tester le fonctionnement de TLS

Connexion normale Tapez :

telnet localhost 587

retourne

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP (Courriels)

Tapez :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Tapez :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Pour vous connecter en TLS :

openssl s_client -starttls smtp -connect localhost:587

retourne

CONNECTED(00000003)
…
    Start Time: 1598437512
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK

Tapez :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Tapez :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Bloquer les connections non TLS

Pour cela il faut modifier le fichier master.cf (kate /etc/postfix/master.cf)

Modifier le fichier comme ci-dessous :

#587      inet  n       -       y       -       -       smtpd
#  -o content_filter=dksign:[127.0.0.1]:12028
⋅⋅⋅
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Vérifier le blocage des connexions non TLS

Tester la connexion telnet :

telnet localhost 587

retourne

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP (Courriels)

Taper :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Taper :

MAIL FROM: utilisateur

retourne

530 5.7.0 Must issue a STARTTLS command first

Taper :

quit

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Tester la connection TLS :

openssl s_client -starttls smtp -connect localhost:587

retourne

CONNECTED(00000003)
…
read R BLOCK

Tapez :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH DIGEST-MD5 NTLM CRAM-MD5 PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Tapez :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Vos échanges de courriels sont maintenant cryptés lors du transport en SMTP.

On peut encore Renforcer la sécurité du cryptage TLS dans Postfix.

C'est maintenant à l'authentification système au niveau utilisateur que nous allons agir pour renforcer la sécurité :-)

Mettre en place l'authentification SASL

Si vous voulez pousser la sécurité à l'extrême, vous pouvez authentifier vos utilisateurs de façon plus poussé pour la messagerie.

Installer les applications complémentaires

Pour la partie authentification installez les paquets libsasl2-modules sasl2bin.

Postfix doit être membre du groupe sasl
getent group sasl

doit retourner

sasl:x:45:postfix

Pour ajouter l'utilisateur «postfix» au groupe sasl, tapez dans un terminal :

sudo adduser postfix sasl

Voir quels sont les types d'authentifications acceptés par Postfix

Pour le serveur smtpd de Postfix :

postconf -a

retourne

cyrus
dovecot

Pour le client smtp de Posfix :

postconf -A

retourne

cyrus

Configurons le serveur smtpd de Postfix pour accepter l'authentification SASL Cyrius

Afin de permettre l'authentification SASL Cyrius par Postfix, il va être nécessaire de modifier la configuration générale. Nous allons ajouter les options suivantes à main.cf afin de n'autoriser l'accès au SMTP qu'aux utilisateurs identifiés (par un login qui est leur adresse e-mail, et le mot de passe de ce compte e-mail).

Éditer le fichier main.cf (kate /etc/postfix/main.cf) et modifiez/ajoutez les lignes suivantes :

# Paramétrages SASL du serveur smtpd de Postfix
# Variable postfix contenant le hostname Ma-Machine
smtpd_sasl_local_domain = $myhostname
# Active l'authentification SASL pour le serveur smtpd de Postfix
smtpd_sasl_auth_enable = yes
# Interdit les méthodes qui autorisent l'authentification anonyme.
smtpd_sasl_security_options = noanonymous
# Active l’interopérabilité avec les clients SMTP qui implémentent une version obsolète de la commande AUTH (RFC 2554). MicroSoft Outlook Express version 4 et Exchange version 5.0 sont des exemples de tels clients.
broken_sasl_auth_clients = no
# Pour autoriser le relais de courriels des utilisateurs authentifiés
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination 

Configurer le serveur d'authentification Cyrus

Créer et éditer le fichier smtpd.conf (kate /etc/postfix/sasl/smtpd.conf) avec ces valeurs :

pwcheck_method: saslauthd # Fonctionnement avec le service saslauthd de Cyrus
mech_list: PLAIN LOGIN # Les méthodes d'authentifications PLAIN et LOGIN sont permises

Créer un fichier de configuration Cyrus saslauthd-postfix pour Postfix :

sudo cp /etc/default/saslauthd /etc/default/saslauthd-postfix

Modifier le fichier saslauthd-postfix (kate /etc/default/saslauthd-postfix) suivant :

START=yes
NAME="saslauthd-postf" # Maximum 15 caractères
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" # Chroot du serveur Postfix dans /var/spool/postfix

Créer le sous répertoire dans le chroot de Postfix :

sudo dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd

Redémarrer le service saslauthd :

systemctl restart saslauthd

Pour valider la configuration de postfix, tapez :

systemctl restart postfix

Configurer le client mail MUA système pour l'authentification SASL

Le client Mutt devrait fonctionner de façon transparente en local avec cette configuration.

Pour vérifier l’authentification au serveur SMTP en TLS SASL. Créer un Hash (code crypté) pour votre utilisateur local.

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"utilisateur@local.fr", encoding="ascii")).decode("ascii"))'

ou en perl:

perl -MMIME::Base64 -le 'print encode_base64("utilisateur\@local.fr");'

Ce qui donne en sortie :

dXRpbGlzYXRldXJAbG9jYWwuZnI=

Créer un Hash pour le mot de passe de l'utilisateur local.

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"mdp_de_utilisateur", encoding="ascii")).decode("ascii"))'

ou en perl:

perl -MMIME::Base64 -le 'print encode_base64("mdp_de_utilisateur");'

Ce qui donne en sortie :

bWRwX2RlX3V0aWxpc2F0ZXVy

Créer un Hash (code crypté de connexion) pour l'identifiant avec mot de passe de l'utilisateur local.

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"\000utilisateur@local.fr\000mdp_de_utilisateur", encoding="ascii")).decode("ascii"))'

ou en perl:

perl -MMIME::Base64 -le 'print encode_base64("\000utilisateur\@local.fr\000mdp_de_utilisateur");'

Ce qui donne en sortie :

AHV0aWxpc2F0ZXVyQGxvY2FsLmZyAG1kcF9kZV91dGlsaXNhdGV1cg==

Pour vérifier qu'il n'y a pas d'erreurs :

python3 -c 'import sys; from base64 import b64decode; print(b64decode("AHV0aWxpc2F0ZXVyQGxvY2FsLmZyAG1kcF9kZV91dGlsaXNhdGV1cg==").decode("ascii"))'

ou en perl

perl -MMIME::Base64 -le 'print decode_base64("AHV0aWxpc2F0ZXVyQGxvY2FsLmZyAG1kcF9kZV91dGlsaXNhdGV1cg==");'

Pour vous connecter avec cet identifiant crypté :

openssl s_client -starttls smtp -connect localhost:587

Pour l'authentification en login :

AUTH LOGIN

retourne

334 VXNlcm5hbWU6

VXNlcm5hbWU6 c'est «Username:» en crypté.

Saisissez votre identifiant utilisateur@local.fr crypté :

dXRpbGlzYXRldXJAbG9jYWwuZnI=

retourne

334 UGFzc3dvcmQ6

UGFzc3dvcmQ6 c'est «Password:» en crypté.

Saisissez votre mot de passe utilisateur crypté :

bWRwX2RlX3V0aWxpc2F0ZXVy

retourne

235 2.7.0 Authentification successful

Pour l'authentification en direct (PLAIN) :

Maintenant c'est le code de Hash de l'identifiant avec le mot de passe applicatif qu'il faut saisir pour l'authentification en clair :

AUTH PLAIN AHV0aWxpc2F0ZXVyQGxvY2FsLmZyAG1kcF9kZV91dGlsaXNhdGV1cg==

retourne

325 2.7.0 Authentification successful

Si le compte de connexion n'est pas bon vous aurez :

535 5.7.8 Error: authentication failed: no mechanism available

Si l'identifiant PLAIN crypté n'est pas bon vous aurez :

535 5.7.8 Error: authentication failed: another step is needed in authentication

Si le protocole de connexion n'est pas bon vous aurez:

535 5.7.8 Error: authentication failed: bad protocol / cancel

Etc.

Maintenant nous avons un système de messagerie très sécurisé. On peut encore améliorer le système d'authentification SASL pour cela il faut voir Configuration avancée de SASL Cyrus avec Postfix.

On peut aussi étendre cette configuration avec un relaie sur un serveur de messagerie du réseau ou d'internet

Pour renforcer la sécurité si votre poste de travail est dans un réseau local, il vous faudra centraliser les messages sur des boites aux lettres postales pour éviter les failles de sécurités des utilisateurs locaux peux respectueux des consignes de sécurités. Pour un poste de travail multi-utilisateurs chez soit, ce genre de configuration de boîtes aux lettres par utilisateurs peut-être intéressante pour la messagerie système et entre utilisateurs locaux du poste de travail.

Dans un environnement professionnel où le serveur de messagerie est sur un réseau local, il est préférable d'avoir des boites aux lettres postales (/var/mail/utilisateur). Cela permet d'avoir plusieurs niveaux de contrôles de sécurités.

Le premier aux niveau du serveur de messagerie MTA (filtrages SPAM et antivirus).

Le deuxième au niveau du MDA (Mail Delivery Agent aussi avec des outils anti-SPAMs et anti-virus) qu'il faudra installer voir Comment configurer sa distribution de courriels locale MDA ?.

Un troisième niveau peut-être mis en place au niveau du client de messagerie MUA sur le poste de travail avec un serveur local sur le modèle ci-dessus complété par un relaie vers le serveur de messagerie du réseau

Pour cela il faut supprimer la directive

home_mailbox= ...

du fichier de configuration main.cf de Postfix. Et modifier le client MUA Mutt avec

set spoolfile=/var/mail/$USER

dans le fichier .muttrc du répertoire home de l'utilisateur.

  • installer_postfix_en_local_pour_un_poste_de_travail.txt
  • Dernière modification: Le 31/10/2020, 15:27
  • par sefran