Sommaire
Les données rentrées dans ce tutoriel sont des informations réelles (changées depuis par confidentialité) pour éviter les hésitations dans les configurations face à des variables trop abstraites. A adapter pour la config. d’une nouvelle installation sur autre VPS. Cet article explicite une démo, avant la mise en prod prochaine pour mon client.
Dans ce tutoriel Je vais créer un serveur VPS OVH sous Ubuntu 24.10, y installer le Docker Mailcow (serveur mail), souscrire à un adresse IP additionnelle sur OVH dédiée et d’origine FR. Tout ça dans le but de court-circuiter le serveur mail du site hébergé par O2Switch pour utiliser à sa place le serveur mail installé sur le VPS OVH.
Il n’y aura plus de limitation en fréquence d’envois lors des publipostages par les contraintes du serveur mail mutualisé de O2Switch, ni de crainte d’une potentielle aspiration d’informations (peu probable) de ce dernier.. Il n’empêche qu’assurément je n’ai pas la main de l’admin sur le serveur mail de O2Switch, tandis que celui qui sera en place au terme de cet article sur VPS OVH obéira aux moindres injonctions de son créateur et n’auras rien de lui qu’il ne connaisse déjà.
Pour éviter de devoir « chauffer » une IP + NDD des semaines, c-à-d envoyer / recevoir des mails pour prouver une activité légitime de la BAL aux GAFAM, il est nécessaire d’utiliser un combo IP + NDD existant. La messagerie O2Switch est toute indiquée pour cela, mais de grandes précautions sont à prendre pour ne pas abimer sa réputation!
Clef public pour contrôle SSH
Avant tout, création sur mon PC sous Windows 11 d’une clef Public / Privée pour contrôle ultérieur VPS en SSH. Les options sont laissées par défaut. En ligne de commande:
ssh-keygen -t ed25519
Serveur privé virtuel (VPS)
La configuration VPS choisie est certes légère pour un serveur mail; J’ai choisi Mailcow en mode docker. Mais je retirerais par la suite des fonctions gourmandes comme l’antivirus de Mailcow et son Interface Sogo.
OVH > Bare Metal Cloud > Serveurs privés virtuels.
Ubuntu 24.10; Stockage 40go; RAM 4go; Vcore: 1; IP VPS par défaut: 51.210.241.38
Au cours de l’installation du VPS, je renseigne la clé publique SSH du PC Windows créée avant avec la commande ssh-keygen.
Je copie / colle depuis mon PC le contenu de C:\Users\stepm\.ssh\id_ed25519.pub dans le champs Public Key présenté lors d’une étape de l’installation du VPS.
Passer à une IP dédiée et FR
OVH > Bare Metal Cloud > Network > IP > Commander des IP, Puis choisir IP Française, lier IP additionnelle à VPS.
Ici l’IP additionnelle achetée est 51.68.21.27
Changer l'IP du VPS
Je me connecte en SSH depuis le PC Windows, en validant l’alerte de connexion nouvelle (empreinte).
ssh ubuntu@51.210.241.38
Au cas d’erreur, je copie en backup le fichier de configuration réseau IP de Ubuntu.
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
Edition fichier configuration réseau VPS UBUNTU.
sudo nano /etc/netplan/50-cloud-init.yaml
Je modifie ainsi; Opération pénible car le copier-coller du contenu ci-dessous dans le Terminal sous nano provoque des tabulations incompatibles avec la convention d’écriture du fichier yaml. A réajuster à coup de Supp et barre espace.
IP de la passerelle: IP VPS par défaut mais avec 1 à la fin au lieu de 38. Les valeurs composées sont entourées de guillemets simples par sécurité, histoire de n’être pas considérés comme du code.
network:
version: 2
ethernets:
ens3:
match:
macaddress: 'fa:16:3e:4b:81:1d'
set-name: 'ens3'
mtu: 1500
# Adresses
addresses:
# IP dédiée
- '51.68.21.27/32'
# IPv6 d’origine
- '2001:41d0:52:400::824/128'
# DNS
nameservers:
addresses:
- 213.186.33.99
# Désactivation DHCP v4
dhcp4: false
accept-ra: false
# Routes
routes:
# 1) rendre la passerelle IPv4 « joignable » sur le lien
- to: '51.210.241.1/32'
scope: link
# 2) route par défaut via cette passerelle
- to: '0.0.0.0/0'
via: '51.210.241.1'
on-link: true
# 3) routes IPv6 fournies par OVH (inchangées)
- to: '2001:41d0:52:400::1/64'
via: '::'
- to: '::/0'
via: '2001:41d0:52:400::1'
# CTRL+X puis yes pour enregistrer le fichier de config.
sudo netplan apply
exit
# Pour se connecter en SSH à la nouvelle IP
ssh ubuntu@51.68.21.27
# Valider le fingerprint
exit
Si erreur : Accès KMS au serveur VPS depuis Compte OVH et restaurer le fichier de configuration réseau d’origine:
Configurer les entrées SPF, A, DMARC, Reverse SSH
Zone DNS de O2Switch
Pour une délivrabilité minimale des emails il faut régler quelques options DNS.
O2Switch espace Technique > Domaines > Zone Editor > Clique sur NDD pcsoleil.fr puis bouton Gérer. Modifier ou créer les enregistrements suivants en supprimant les enregistrements anciens:
- Entrée type A: Nom: mail.pcsoleil.fr. TTL: 14400 Enregistrement: 51.68.21.27
- Entrée MX: Nom: pcsoleil.fr. PRIORITÉ: 10 Valeur: mail.pcsoleil.fr.
- Entrée DMARC: Nom: _dmarc.pcsoleil.fr. TTL: 14400 Type: A VALEUR: v=DMARC1;p=none;sp=none;adkim=r;aspf=r;pct=100;fo=0;rf=afrf;ri=86400
Zone Network de OVH
De plus, pour que la nouvelle adresse IP corresponde au nom de domaine, je dois modifier le Reverse DNS
Depuis compte OVH > Bare Metal Cloud > Network > IP
Au regard de la ligne 51.68.21.27 clique sur Trois petits points, puis Modifier Reverse pour: mail.pcsoleil.fr.
Attention il y a bien un point final, ce n’est pas ici un signe de ponctuation de l’article, et cette rigueur s’applique au reste des commandes passées et à venir.
PS: Il se passe un certain temps pour que la modification soit appliquée et que l’interface de OVH affiche les bonnes valeurs.
Installer et configurer Mailcow & Docker
Contrôle SSH du VPS OVH depuis mon PC Windows, en ligne de commande:
ssh ubuntu@51.68.21.27
Et je passe aux commandes d’install / config:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable --now docker
# Choisir le mot de passe root
sudo passwd root
# Rentrer en mode root
su
# Vérifier si umask = 0022 sinon chercher pourquoi sur le net le cas contraire
umask
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd /mailcow-dockerized
./generate_config.sh
# Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname:
mail.pcsoleil.fr
# Timezone [Etc/UTC]:
Europe/Paris
# Which branch of Mailcow do you want to use?:
1
# Sortir du mode Root
exit
# Redémarrer le VPS OVH
sudo reboot
# Attendre qlques mn et se reconnecter en ssh
ssh ubuntu@51.68.21.27
cd /opt/mailcow-dockerized
sudo docker compose pull
# Bien attendre que le décompte au niveau de PULL Finisse
sudo docker compose up -d
# Attendre que le décompte soit terminé
# On ferme la connexion ssh
exit
Configurer domaine géré par Mailcow, et renseigner DKIM en zone DNS O2Switch :
- Modifier le nom de la clé de type TXT default._domainkey.pcsoleil.fr. par dkim._domainkey.pcsoleil.fr.
- TTL: Garder à 1440
- Type: Garder TXT
Valeur: Il faut y rentrer la longue clé DKIM précédemment mémorisée dans un fichier texte, par contre les enregistrements dans la zone DNS de O2switch ne supportent que 255 caractères, il faut donc copier coller les 255 premiers caractères dans le champ par défaut, puis clique sur Add TXT string to record, et coller la suite de la clef dedans.
Créer un utilisateur et sa boite mail
https://mail.pcsoleil.fr/admin
Courriel > Configuration > Boite de Réception > Boite de réception > Bouton + Ajouter une boite de réception.
- Nom (A gauche de l’adresse email avant le @) : services
- Domaine: pcsoleil.fr
- Mot de passe: Services83!
- Nom affiché: Bureau des services de PCsoleil Informatique
- Activer TLS en Entrant et Sortant
- Reste des options par défaut, pus clique « Enregistrer les modifications »
Se connecter en tant qu'utilisateur de boite mail et envoyer mail de test
Connexion utilisateur boite mail
NB: Pour info car je vais soulager dans la suite mon serveur VPS pour supprimer les fonctionnalités Mailcow facultatives.
https://mail.pcsoleil.fr
Utilisateur: services@pcsoleil.fr
Mot de passe: Services83!
Mail de test pour vérifier la légitimité du serveur et des réglages
Ouvrir un nouvel onglet du navigateur et aller sur https://www.mail-tester.com sans fermer https://mail.pcsoleil.fr.
Envoyer un email depuis services@pcsoleil.fr à l’adresse mail proposée par mail-tester.com (donc revenir à l’onglet https://mail.pcsoleil.fr pour l’envoyer).
Revenir sur https://mail-tester.com et clique sur « Ensuite, vérifiez votre score ».
Pour moi le score était le suivant: https://www.mail-tester.com/test-1gdc7peku (10/10!).
Le diagnostic de mail-tester évoque une notion primordiale: La nécessité de créer un lien de désinscription pour les campagnes de mailing en masse. Les publipostages seront initiés sur Outlook ou Thunderbird, pas directement dans Mailcow qui n’est pas fait pour ça. A cette effet un modèle de courriel avec lien de désinscription pourra être généré.
Connexion via Outlook à la boite mail
Aussi facile qu’avec des services mails classiques comme Orange, Free etc..
- Type de boite IMAP / SMTP
- Nom utilisateur: services@pcsoleil.fr
- Mot de passe: Domanio83!
- Serveur entrant: mail.pcsoleil.fr
- Serveur sortant: mail.pcsoleil.fr
- Port IMAP: 993 en sécurité SSL/TLS
- Port SMTP: 465 en sécurité SSL/TLS
Filtrer les emails entrants
Par filtrage je veux parler des spams, phishing, etc.. Il faut créer un compte sur spamhaus.com pour demander une clé DQS et l’a renseigner en Terminal sur le VPS.
ssh ubuntu@51.68.21.27
sudo nano /opt/mailcow-dockerized/mailcow.conf
# Renseigner clé nommée Query Key dans le compte Spam Haus
# Tout en bas du fichier de config modifiez
SPAMHAUS_DQS_KEY=g548d6lgrddfkqgc4e5kwxgbw5
# CTRL + X puis Y pour éditer et sortir de nano
# Arrêt / Démarrage de Docker + Mailcow
cd /opt/mailcow-dockerized
sudo docker compose down
sudo docker compose up -d
# sortie de ssh
exit
Alléger la charge serveur VPS
Normalement, un serveur mail Mailcow devrait tourner sur un VPS plus performant (8GO de RAM, 2 Cores..).
Je n’ai plus besoin d’accéder à l’interface Web SOgo de Mailcow maintenant que j’ai créé la boite mail qui va me servir de boite d’envoie des publipostages et correspondances habituelles. Je me passerais aussi de l’antivirus ClamaV intégré à Mailcow.
Du coup je coupe respectivement: L’antivirus pièces jointes des mails entrants dont document Office vérolés, l’indexeur de mails, l’interface Web et le système de cache de l’interface Web.
ssh ubuntu@51.68.21.27
sudo nano /opt/mailcow-dockerized/mailcow.conf
# Cherchez les lignes suivantes ou creez-les, et modifier ainsi:
SKIP_CLAMD=y
SKIP_OLEFY=y
SKIP_FTS=y
SKIP_SOGO=y
# CTRL + X puis Y pour éditer et sortir de nano
# Arrêt / Démarrage de Docker + Mailcow
# Relance de Docker + Mailcow
cd /opt/mailcow-dockerized
sudo docker compose down
sudo docker compose up -d
Fréquence d'envoie mails maitrisée pour conserver la réputation IP / NDD
ssh ubuntu@51.68.21.26
# Régler fréquence d'envoie pour publipostage.
# Créer le fichier extra (qui vient se substituer à main.cf)
sudo nano /opt/mailcow-dockerized/data/conf/postfix/extra.cf
# Semaine 1 : max 50 mails/jour
smtp_destination_concurrency_limit = 1
smtp_destination_rate_delay = 1800s
# Après 1 semaine (si tout va bien, réputation stable, pas de spam) :
# Semaine 2 : 100 mails/jour max
smtp_destination_concurrency_limit = 2
smtp_destination_rate_delay = 900s
# Après 2 semaines :
# Semaine 3 : jusqu’à 150 mails/jour max
smtp_destination_concurrency_limit = 3
smtp_destination_rate_delay = 600s
CTRL+X puis Y pour enregistrer
sudo docker compose restart postfix-mailcow
exit