Dans un précédent article, nous avons décrit la configuration minimale de Postfix sur un serveur dédié tournant sous Rocky Linux 8. Partant de là, nous allons configurer pas à pas un « vrai » serveur mail pour un ou plusieurs domaines.
Prérequis
Si vous n’avez pas lu l’article mentionné en lien ci-dessus, il y a de fortes chances à ce qu’il revienne vous mordre les fesses. Quoi qu’il en soit, songez à effectuer quelques vérifications de base. Le serveur ne doit pas être blacklisté partout, et les DNS doivent être correctement configurés.
Dans le pare-feu, il faudra ouvrir le port 25 en TCP :
# firewall-cmd --permanent --add-service=smtp
success
# firewall-cmd --reload
success
# firewall-cmd --list-services
dns http https smtp ssh
Il faut impérativement disposer d’un ou de plusieurs noms de domaines enregistrés et valides :
slackbox.fr
unixbox.fr
- etc.
En dehors du paquet postfix
et de la commande mail
(paquet mailx
), on installera également le client mutt
pour pouvoir tester et gérer les mails en ligne de commande directement sur le serveur :
# dnf install -y mutt
Configuration initiale
Nous allons modifier notre fichier de configuration /etc/postfix/main.cf
pour qu’il ressemble à ceci :
# /etc/postfix/main.cf # # Postfix mail server # Disable backwards compatibility compatibility_level = 2 # Disable IPv6 inet_protocols = ipv4 # Host myhostname = sd-155842.dedibox.fr # Domain mydomain = dedibox.fr # Append this to headers without domain myorigin = $myhostname # Local domains mydestination = $myhostname, localhost.$mydomain, localhost # Unauthenticated mail mynetworks = 127.0.0.0/8 # Relay relayhost = # Mail spool home_mailbox = Maildir/ # Local aliasing alias_maps = hash:/etc/aliases # Debugging debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 # Command paths sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix # Documentation manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix/samples readme_directory = /usr/share/doc/postfix/README_FILES
La plupart des options ont déjà été discutées dans l’article initial sur Postfix. Jetons un œil sur les quelques directives qui ont changé :
mydestination
fournit la liste des domaines pour lesquels les messages reçus doivent être stockés dans une boîte mail locale. Même si Postfix gère plusieurs domaines,mydestination
ne doit spécifier que le domaine principal. Les domaines virtuels seront gérés par la directivevirtual_alias_domains
, que nous verrons plus loin.mynetworks
définit les adresses depuis lesquelles Postfix accepte les mails sans authentification via SMTP. Les plages d’adresses fournies ici désignent donc toutes les machines auxquelles Postfix fait confiance, si l’on peut dire. Sur un serveur dédié public, il est impératif de définir uniquement l’hôte local pourmynetworks
, sous peine de se retrouver avec une « pompe à merde », le terme communément utilisé pour les serveurs mails mal configurés qui sont utilisés par des tiers malintentionnés pour l’envoi massif de spams sans authentification. Les spammeurs du monde entier adorent ce genre de machines.- Le format de stockage par défaut de Postfix, c’est
mbox
. On préférera le formatMaildir/
, bien plus adapté pour une configuration IMAP.
Vérifier si la table de correspondance contient bien notre utilisateur :
# /etc/aliases # Basic system aliases -- these MUST be present. mailer-daemon: postmaster postmaster: root # General redirections for pseudo accounts. bin: root daemon: root adm: root ... # trap decode to catch security attacks decode: root # Person who should get root's mail root: microlinux
Le cas échéant, construire le fichier indexé :
# newaliases
Premier test
Prendre en compte la nouvelle configuration :
# systemctl restart postfix
Vérifier si Postfix tourne correctement :
# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service;
enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-15 08:31:12 CET; 6s ago
Envoyer un mail vers un compte mail externe auquel on a accès. Notez bien le point .
tout seul sur une ligne à part qui marque la fin du message :
$ mail info@microlinux.fr Subject: Test Postfix Ceci est un test. . EOT
Se connecter au compte mail externe et vérifier si le message a bien été envoyé, puis répondre à ce message. Si tout se passe bien, le répertoire utilisateur contient un nouveau répertoire ~/Maildir
, qui ressemble à ceci :
$ tree Maildir/ Maildir/ ├── cur ├── new │ └── 1705304097.V802I18000aM477653.sd-155842 └── tmp
Le nouveau mail est un simple fichier texte, que l’on peut afficher avec less
par exemple :
$ less Maildir/new/1705304097.V802I18000aM477653.sd-155842
Return-Path: <info@microlinux.fr>
X-Original-To: microlinux@sd-155842.dedibox.fr
Delivered-To: microlinux@sd-155842.dedibox.fr
...
Le 15/01/2024 à 08:34, microlinux@sd-155842.dedibox.fr a écrit :
> Ceci est un test.
Et voici la réponse.
--
Microlinux - Solutions informatiques durables
7, place de l'église - 30730 Montpezat
Site : https://www.microlinux.fr
Blog : https://blog.microlinux.fr
Mail : info@microlinux.fr
Tél. : 04 66 63 10 32
Mob. : 06 51 80 12 12
Gérer les mails avec Mutt
Mutt est un MUA (Mail User Agent) en ligne de commande. On peut l’utiliser sur des machines dépourvues d’interface graphique.
Avant de lancer Mutt, éditer le fichier de configuration ~/.muttrc
:
# ~/.muttrc
set mbox_type=Maildir
set folder="~/Maildir"
set spoolfile="~/Maildir"
set mbox="+Mailbox"
my_hdr From: microlinux@sd-100246.dedibox.fr (Microlinux)
my_hdr Reply-To: microlinux@sd-100246.dedibox.fr (Microlinux)
Lancer Mutt :
$ mutt
La fenêtre principale de Mutt affiche la boite de réception. Les nouveaux mails sont marqués par un N
. Une barre d’état en haut de l’écran affiche les principaux raccourcis. En règle générale, Mutt fonctionne avec les mêmes raccourcis que Vim. Pour lire un message, il suffit de le sélectionner et d’appuyer sur Entrée :
Créer les comptes Linux pour la messagerie
Bien sûr, c’est plus élégant de créer des comptes virtuels gérés par une base de données et tout le bling bling. Le Web regorge d’ailleurs de tutos de ce genre, rivalisant de complexité. Pour commencer, nous allons rester fidèles au principe KISS et passer par des comptes Linux traditionnels.
Dans l’exemple qui suit, nous gérons le courrier des deux domaines slackbox.fr
et unixbox.fr
, avec les adresses mail suivantes :
jean.mortreux@slackbox.fr
wafaa.chenaoui@slackbox.fr
fanny.banester@slackbox.fr
jean.mortreux@unixbox.fr
agnes.maillebouis@unixbox.fr
Dans un premier temps, nous allons créer des comptes Linux traditionnels, un par compte mail, en respectant les conventions de nommage classiques :
# useradd -c "Jean Mortreux" -s /sbin/nologin jmortreux # useradd -c "Jean Mortreux" -s /sbin/nologin jmortreux2 # useradd -c "Wafaa Chenaoui" -s /sbin/nologin wchenaoui # useradd -c "Fanny Banester" -s /sbin/nologin fbanester # useradd -c "Agnès Maillebouis" -s /sbin/nologin amaillebouis
- Les utilisateurs n’ont pas de shell de connexion, c’est-à-dire qu’ils ne pourront pas se connecter directement au serveur.
- L’utilisateur Jean Mortreux dispose de deux comptes distincts
jmortreux
etjmortreux2
, un pour chaque adresse mail.
Pour ne pas avoir à inventer des mots de passe raisonnablement compliqués pour chaque utilisateur, on peut se servir de l’outil pwgen
disponible dans le dépôt EPEL. Voici un exemple pour créer un mot de passe aléatoire long de huit caractères, composé de chiffres et de lettres majuscules et minuscules :
$ pwgen -n -N 1 theiPa3b
Alternativement, vous pouvez très bien utiliser KeePassXC pour générer les mots de passe de vos utilisateurs et les garder en un endroit sécurisé. C’est la solution que j’ai adoptée au quotidien, et qui fonctionne très bien.
Les alias
Un alias est un nom supplémentaire pour recevoir du courrier électronique. En réalité, les mails sont acheminés vers un compte qui existe déjà. Les alias sont définis dans le fichier /etc/aliases
:
... # Person who should get root's mail root: microlinux # Users agnes.maillebouis: amaillebouis fanny.banester: fbanester jean.mortreux: jmortreux, jmortreux2 wafaa.chenaoui: wchenaoui
À chaque modification de ce fichier, il faut reconstruire /etc/aliases.db
, la base de données des alias :
# newaliases
Définir les destinataires autorisés
Dans la configuration par défaut, tous les comptes Linux peuvent recevoir du courrier, y compris les comptes système comme root
, named
ou nobody
si l’on utilise le fichier /etc/aliases
fourni par défaut. Dans notre configuration, c’est l’utilisateur microlinux
qui recevra les mails pour les comptes système.
Pour tester ce comportement, on peut créer un utilisateur bidon
avec useradd
et lui envoyer un mail à l’adresse bidon@sd-155842.dedibox.fr
. On constate alors que ça passe comme une lettre à la poste :
# tree /home/bidon/Maildir/
/home/bidon/Maildir/
├── cur
├── new
│ └── 1705388115.V802I1821e0M930865.sd-155842
└── tmp
On va donc instaurer quelques restrictions pour éviter de spammer tout ce petit monde. Pour ce faire, on va créer un fichier /etc/postfix/local-recips
avec la liste de tous les destinataires autorisés, en suivant la syntaxe suivante.
# /etc/postfix/local-recips
amaillebouis x
fbanester x
jmortreux x
jmortreux2 x
wchenaoui x
À partir de ce fichier, on va générer une base de données dans un format lisible pour Postfix :
# cd /etc/postfix # postmap local-recips
Nous pouvons vérifier si le fichier a été généré correctement.
# postmap -s hash:local-recips fbanester x jmortreux x jmortreux2 x amaillebouis x wchenaoui x
À chaque modification de local-recips
, il faudra réinvoquer postmap local-recips
pour reconstruire le fichier de base de données local-recips.db
.
Pour prendre en compte les nouvelles restrictions, éditer /etc/postfix/main.cf
et ajouter le paramètre suivant :
# Local aliasing alias_maps = hash:/etc/postfix/aliases local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps
Prendre en compte les modifications :
# systemctl reload postfix
À partir de là, seuls les utilisateurs explicitement définis dans local-recips
pourront recevoir du courrier.
Comptes Linux et adresses de messagerie
La prochaine étape consiste à faire correspondre les comptes Linux et les adresses de messagerie. Pour ce faire, on va créer un fichier /etc/postfix/canonical
:
# /etc/postfix/canonical
amaillebouis agnes.maillebouis@unixbox.fr
fbanester fanny.banester@slackbox.fr
jmortreux jean.mortreux@slackbox.fr
jmortreux2 jean.mortreux@unixbox.fr
wchenaoui wafaa.chenaoui@slackbox.fr
Convertir le tableau en un format lisible pour Postfix :
# cd /etc/postfix/ # postmap canonical
Définir le paramètre correspondant dans /etc/postfix/main.cf
:
# Local aliasing alias_maps = hash:/etc/aliases local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps canonical_maps = hash:/etc/postfix/canonical
Domaines virtuels avec des utilisateurs distincts
Les domaines virtuels (Hosted Domains) sont tous les domaines qui ne correspondent pas au nom d’hôte du serveur, c’est-à-dire au résultat de la commande hostname -d
.
Créer un fichier /etc/postfix/virtual
avec un tableau qui fait correspondre chaque adresse mail d’un domaine virtuel à un compte Linux :
# /etc/postfix/virtual
agnes.maillebouis@unixbox.fr amaillebouis
fanny.banester@slackbox.fr fbanester
jean.mortreux@slackbox.fr jmortreux
jean.mortreux@unixbox.fr jmortreux2
wafaa.chenaoui@slackbox.fr wchenaoui
Là aussi, rendre ce fichier lisible pour Postfix :
# cd /etc/postfix/ # postmap virtual
Adapter /etc/postfix/main.cf
pour prendre en compte les domaines virtuels :
# Local domains mydestination = $myhostname, localhost.$mydomain, localhost # Virtual domains virtual_alias_domains = slackbox.fr, unixbox.fr ... # Local aliasing alias_maps = hash:/etc/aliases local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps canonical_maps = hash:/etc/postfix/canonical virtual_alias_maps = hash:/etc/postfix/virtual
Il ne reste qu’à recharger Postfix pour prendre en compte la nouvelle configuration :
# systemctl reload postfix
Le prochain article traitera de la configuration du serveur IMAP Dovecot.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire