607 lines
28 KiB
Markdown
607 lines
28 KiB
Markdown
# Auto-héberger son serveur mail en 2026
|
|
|
|
## Survivre aux règles de Gmail, Outlook et consorts
|
|
|
|
> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les "rustines" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic.
|
|
>
|
|
> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres.
|
|
|
|
---
|
|
|
|
## Sommaire
|
|
|
|
1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-)
|
|
2. [Prérequis techniques](#2-prérequis-techniques)
|
|
3. [Architecture cible](#3-architecture-cible)
|
|
4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip)
|
|
5. [Configuration DNS complète](#5-configuration-dns-complète)
|
|
6. [Installation du stack mail](#6-installation-du-stack-mail)
|
|
7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires)
|
|
8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin)
|
|
9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo)
|
|
10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate)
|
|
11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl)
|
|
12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058)
|
|
13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène)
|
|
14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes)
|
|
15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-)
|
|
16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod)
|
|
17. [Annexes : commandes utiles](#17-annexes--commandes-utiles)
|
|
|
|
---
|
|
|
|
## 1. Avant de commencer : est-ce vraiment une bonne idée ?
|
|
|
|
L'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça :
|
|
|
|
**Ce qui marche bien en auto-hébergé :**
|
|
- Recevoir du mail (presque tout le monde te livre).
|
|
- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés.
|
|
- Garder le contrôle sur tes données, tes alias, tes domaines.
|
|
|
|
**Ce qui est dur :**
|
|
- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam.
|
|
- Sortir d'une blacklist une fois dedans.
|
|
- Maintenir un score de réputation IP correct sur la durée.
|
|
- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025).
|
|
|
|
**Stratégie réaliste recommandée :**
|
|
- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle.
|
|
- Envoi sortant : deux options, selon ton volume et ton tolérance au risque.
|
|
- **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu.
|
|
- **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité.
|
|
|
|
Le reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire.
|
|
|
|
---
|
|
|
|
## 2. Prérequis techniques
|
|
|
|
| Élément | Détail |
|
|
|---|---|
|
|
| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). |
|
|
| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. |
|
|
| IP fixe v4 | Indispensable. **IP "résidentielle" ou IP de datacenter récemment recyclée = exclues**. |
|
|
| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. |
|
|
| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. |
|
|
| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. |
|
|
| TLS | Certificat valide (Let's Encrypt suffit). |
|
|
|
|
**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`.
|
|
|
|
---
|
|
|
|
## 3. Architecture cible
|
|
|
|
Un stack standard, éprouvé, en logiciels libres :
|
|
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ Internet (mails entrants/sortants) │
|
|
└─────────────────────────────────────┘
|
|
│
|
|
▼ port 25
|
|
┌────────────────┐
|
|
│ Postfix │ ← MTA (envoi/réception SMTP)
|
|
│ (SMTP / 25/587)│
|
|
└────────────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────┐ ┌─────────┐ ┌──────────┐
|
|
│ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP
|
|
│(spam, │ │ (signe │ │ (livrai- │
|
|
│ DKIM │ │ DKIM) │ │ son aux │
|
|
│ verif, │ └─────────┘ │ boîtes) │
|
|
│ DMARC) │ └──────────┘
|
|
└─────────┘ │
|
|
▼
|
|
Maildir / utilisateurs
|
|
```
|
|
|
|
**Composants** :
|
|
|
|
- **Postfix** : MTA. Reçoit, route, envoie le SMTP.
|
|
- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres).
|
|
- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM).
|
|
- **Let's Encrypt (certbot)** : TLS.
|
|
- **(Optionnel) Roundcube ou SnappyMail** : webmail.
|
|
|
|
**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques.
|
|
|
|
---
|
|
|
|
## 4. Choix du fournisseur et de l'IP
|
|
|
|
Le choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS :
|
|
|
|
1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer.
|
|
2. **Le PTR est-il configurable ?** Si non, change.
|
|
3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur :
|
|
- [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx)
|
|
- [multirbl.valli.org](https://multirbl.valli.org/)
|
|
- [talosintelligence.com](https://www.talosintelligence.com/) (Cisco)
|
|
- [senderscore.org](https://senderscore.org/)
|
|
|
|
Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines.
|
|
4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît.
|
|
|
|
**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude).
|
|
|
|
---
|
|
|
|
## 5. Configuration DNS complète
|
|
|
|
Pour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) :
|
|
|
|
```dns
|
|
;; Enregistrement du serveur mail lui-même
|
|
mail.exemple.fr. IN A 203.0.113.10
|
|
mail.exemple.fr. IN AAAA 2001:db8::10
|
|
|
|
;; MX : qui reçoit les mails du domaine
|
|
exemple.fr. IN MX 10 mail.exemple.fr.
|
|
|
|
;; SPF : qui a le droit d'envoyer pour ce domaine
|
|
exemple.fr. IN TXT "v=spf1 mx -all"
|
|
|
|
;; DKIM (clé publique, le sélecteur ici est "mail")
|
|
mail._domainkey.exemple.fr. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..."
|
|
|
|
;; DMARC
|
|
_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100"
|
|
|
|
;; MTA-STS (cf. §8)
|
|
_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;"
|
|
mta-sts.exemple.fr. IN A 203.0.113.10
|
|
|
|
;; TLS-RPT (rapports d'erreurs TLS)
|
|
_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr"
|
|
|
|
;; CAA : restreindre qui peut émettre des certifs pour ton domaine
|
|
exemple.fr. IN CAA 0 issue "letsencrypt.org"
|
|
|
|
;; Autodiscover / autoconfig (pour les clients mail)
|
|
autoconfig.exemple.fr. IN CNAME mail.exemple.fr.
|
|
autodiscover.exemple.fr. IN CNAME mail.exemple.fr.
|
|
```
|
|
|
|
Détails dans les sections dédiées plus bas.
|
|
|
|
**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9.
|
|
|
|
---
|
|
|
|
## 6. Installation du stack mail
|
|
|
|
Sur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans.
|
|
|
|
```bash
|
|
# Mise à jour
|
|
apt update && apt upgrade -y
|
|
|
|
# Stack de base
|
|
apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \
|
|
dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \
|
|
rspamd redis-server mariadb-server certbot
|
|
|
|
# Certificat TLS
|
|
certbot certonly --standalone -d mail.exemple.fr \
|
|
-d mta-sts.exemple.fr \
|
|
-d autoconfig.exemple.fr -d autodiscover.exemple.fr
|
|
```
|
|
|
|
### Postfix : configuration `main.cf` minimale-mais-saine
|
|
|
|
```cfg
|
|
# /etc/postfix/main.cf
|
|
myhostname = mail.exemple.fr
|
|
mydomain = exemple.fr
|
|
myorigin = $mydomain
|
|
mydestination = # Vide : on utilise virtual_mailbox_domains
|
|
inet_interfaces = all
|
|
inet_protocols = all # IPv4 + IPv6
|
|
|
|
# TLS — chiffrement obligatoire
|
|
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem
|
|
smtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem
|
|
smtpd_tls_security_level = may
|
|
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
|
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
|
smtp_tls_security_level = may
|
|
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
|
smtp_dns_support_level = dnssec # Indispensable pour DANE
|
|
smtp_tls_security_level = dane # ou "may" si DANE pas encore prêt
|
|
smtp_host_lookup = dns
|
|
|
|
# Restrictions anti-relais ouvert
|
|
smtpd_relay_restrictions =
|
|
permit_mynetworks
|
|
permit_sasl_authenticated
|
|
reject_unauth_destination
|
|
|
|
smtpd_recipient_restrictions =
|
|
permit_mynetworks
|
|
permit_sasl_authenticated
|
|
reject_unauth_destination
|
|
reject_unknown_recipient_domain
|
|
reject_invalid_helo_hostname
|
|
reject_non_fqdn_helo_hostname
|
|
|
|
# Limites raisonnables
|
|
message_size_limit = 52428800 # 50 Mo
|
|
mailbox_size_limit = 0
|
|
recipient_delimiter = +
|
|
|
|
# Intégration Rspamd
|
|
smtpd_milters = inet:localhost:11332
|
|
non_smtpd_milters = inet:localhost:11332
|
|
milter_protocol = 6
|
|
milter_default_action = accept
|
|
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}
|
|
|
|
# Livraison via Dovecot LMTP
|
|
virtual_transport = lmtp:unix:private/dovecot-lmtp
|
|
```
|
|
|
|
### Dovecot, Rspamd
|
|
|
|
Ces composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité :
|
|
|
|
- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian.
|
|
- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html)
|
|
- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/)
|
|
|
|
Si tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable.
|
|
|
|
---
|
|
|
|
## 7. SPF, DKIM, DMARC : les rustines obligatoires
|
|
|
|
Sans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume.
|
|
|
|
### SPF (Sender Policy Framework)
|
|
|
|
Déclare qui a le droit d'envoyer du mail pour ton domaine.
|
|
|
|
```dns
|
|
exemple.fr. IN TXT "v=spf1 mx -all"
|
|
```
|
|
|
|
- `mx` : autorise les serveurs listés dans le MX du domaine.
|
|
- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible.
|
|
|
|
Si tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`.
|
|
|
|
**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html).
|
|
|
|
### DKIM (DomainKeys Identified Mail)
|
|
|
|
Signe chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS.
|
|
|
|
**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) :
|
|
|
|
```bash
|
|
mkdir -p /var/lib/rspamd/dkim
|
|
rspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \
|
|
-b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt
|
|
chown _rspamd:_rspamd /var/lib/rspamd/dkim/*
|
|
```
|
|
|
|
Le fichier `.txt` contient l'enregistrement DNS à publier :
|
|
|
|
```dns
|
|
mail._domainkey.exemple.fr. IN TXT ( "v=DKIM1; k=rsa; "
|
|
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )
|
|
```
|
|
|
|
Configuration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) :
|
|
|
|
```conf
|
|
allow_username_mismatch = true;
|
|
domain {
|
|
exemple.fr {
|
|
path = "/var/lib/rspamd/dkim/exemple.fr.mail.key";
|
|
selector = "mail";
|
|
}
|
|
}
|
|
```
|
|
|
|
Recharge : `systemctl restart rspamd`.
|
|
|
|
**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10).
|
|
|
|
### DMARC (Domain-based Message Authentication, Reporting and Conformance)
|
|
|
|
Dit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate.
|
|
|
|
```dns
|
|
_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100"
|
|
```
|
|
|
|
- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser.
|
|
- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale.
|
|
- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres.
|
|
- `rua` : adresse pour les rapports agrégés (quotidiens).
|
|
- `ruf` : rapports forensiques (par message). Optionnel.
|
|
- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`.
|
|
|
|
**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur :
|
|
|
|
- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI).
|
|
- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana).
|
|
|
|
---
|
|
|
|
## 8. MTA-STS, TLS-RPT, DANE : aller plus loin
|
|
|
|
Ces standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation.
|
|
|
|
### MTA-STS
|
|
|
|
Force les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments :
|
|
|
|
**1. Enregistrement DNS TXT** :
|
|
```dns
|
|
_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;"
|
|
```
|
|
|
|
**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` :
|
|
```
|
|
version: STSv1
|
|
mode: enforce
|
|
mx: mail.exemple.fr
|
|
max_age: 604800
|
|
```
|
|
|
|
`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines.
|
|
|
|
**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6).
|
|
|
|
### TLS-RPT
|
|
|
|
Demande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS.
|
|
|
|
```dns
|
|
_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr"
|
|
```
|
|
|
|
### DANE (DNS-based Authentication of Named Entities)
|
|
|
|
Encore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE.
|
|
|
|
DANE publie un hash du certificat TLS dans un enregistrement TLSA :
|
|
|
|
```bash
|
|
# Générer l'enregistrement TLSA pour le port 25
|
|
posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr
|
|
```
|
|
|
|
Ou plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) :
|
|
|
|
```dns
|
|
_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123...
|
|
```
|
|
|
|
**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé).
|
|
|
|
---
|
|
|
|
## 9. PTR (reverse DNS) et HELO
|
|
|
|
**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.**
|
|
|
|
Règle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent.
|
|
|
|
Configure le PTR dans le panneau de ton hébergeur (chez OVH : "IP" → "Reverse DNS") :
|
|
```
|
|
203.0.113.10 → mail.exemple.fr
|
|
2001:db8::10 → mail.exemple.fr
|
|
```
|
|
|
|
Vérifie :
|
|
```bash
|
|
dig -x 203.0.113.10 +short
|
|
# doit retourner : mail.exemple.fr.
|
|
|
|
dig mail.exemple.fr A +short
|
|
# doit retourner : 203.0.113.10
|
|
```
|
|
|
|
Dans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie.
|
|
|
|
---
|
|
|
|
## 10. Warmup d'IP : la phase la plus délicate
|
|
|
|
**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller.
|
|
|
|
### Plan de warmup sur 4 à 6 semaines
|
|
|
|
| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu |
|
|
|---|---|---|---|
|
|
| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque "non spam" si en spam. |
|
|
| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. |
|
|
| 3 | 300 | 1000 | Élargissement progressif. |
|
|
| 4 | 800 | 3000 | Ouvre aux usages normaux. |
|
|
| 5+ | 2000+ | volume cible | Stable. |
|
|
|
|
**Règles d'or pendant le warmup :**
|
|
- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels.
|
|
- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement.
|
|
- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde.
|
|
- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge.
|
|
|
|
### Si tu as un volume immédiat à envoyer
|
|
|
|
Bascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus.
|
|
|
|
---
|
|
|
|
## 11. Postmaster Tools, SNDS, FBL
|
|
|
|
Les gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.**
|
|
|
|
| Service | Acteur | Usage |
|
|
|---|---|---|
|
|
| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** |
|
|
| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. |
|
|
| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. |
|
|
| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. |
|
|
| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. |
|
|
|
|
Configure les feedback loops (FBL) : quand un destinataire clique "spam", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**.
|
|
|
|
---
|
|
|
|
## 12. Liste de désinscription en un clic (RFC 8058)
|
|
|
|
**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume.
|
|
|
|
Ajoute deux en-têtes à tous les mails non-strictement-personnels :
|
|
|
|
```
|
|
List-Unsubscribe: <https://exemple.fr/unsub?token=abc123>, <mailto:unsub@exemple.fr?subject=unsub-abc123>
|
|
List-Unsubscribe-Post: List-Unsubscribe=One-Click
|
|
```
|
|
|
|
L'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation.
|
|
|
|
---
|
|
|
|
## 13. Anti-spam entrant et hygiène
|
|
|
|
Un serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale :
|
|
|
|
```conf
|
|
# /etc/rspamd/local.d/actions.conf
|
|
reject = 15;
|
|
add_header = 6;
|
|
greylist = 4;
|
|
```
|
|
|
|
```conf
|
|
# /etc/rspamd/local.d/greylist.conf
|
|
expire = 1d;
|
|
```
|
|
|
|
Active aussi :
|
|
- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd).
|
|
- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent.
|
|
- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs).
|
|
- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`).
|
|
|
|
Mises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot.
|
|
|
|
---
|
|
|
|
## 14. Monitoring, logs, alertes
|
|
|
|
Sans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place :
|
|
|
|
- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`.
|
|
- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`).
|
|
- **Alertes** sur :
|
|
- File d'attente Postfix > 50 messages (`mailq | tail -1`).
|
|
- Score Senderscore qui chute.
|
|
- Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron.
|
|
- Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée).
|
|
- **Rapports DMARC** parsés régulièrement (cf. §7).
|
|
|
|
---
|
|
|
|
## 15. Que faire quand Gmail rejette quand même ?
|
|
|
|
Ça arrive. Diagnostic dans l'ordre :
|
|
|
|
1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites :
|
|
- `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux.
|
|
- `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement.
|
|
- `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement.
|
|
- `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie.
|
|
2. **Va dans Postmaster Tools** (§11). Si "IP reputation" est rouge ou orange, regarde le contenu et le timing de tes envois récents.
|
|
3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée.
|
|
4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent.
|
|
5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup.
|
|
|
|
---
|
|
|
|
## 16. Checklist finale avant mise en prod
|
|
|
|
Avant d'envoyer le premier vrai mail :
|
|
|
|
- [ ] Domaine avec DNSSEC activé.
|
|
- [ ] IP testée sur 5+ blacklists, propre.
|
|
- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`).
|
|
- [ ] PTR configuré et cohérent avec le HELO.
|
|
- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/).
|
|
- [ ] MTA-STS publié (mode `testing` au démarrage).
|
|
- [ ] TLS-RPT publié.
|
|
- [ ] DANE/TLSA publié (si DNSSEC OK).
|
|
- [ ] CAA publié.
|
|
- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`.
|
|
- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10.
|
|
- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%.
|
|
- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL.
|
|
- [ ] DMARC `p=none` au démarrage, parser de rapports en place.
|
|
- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés.
|
|
- [ ] Plan de warmup affiché et respecté.
|
|
- [ ] Monitoring file d'attente + RBL en place.
|
|
- [ ] Backup chiffré des Maildir.
|
|
|
|
Au bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`.
|
|
|
|
---
|
|
|
|
## 17. Annexes : commandes utiles
|
|
|
|
```bash
|
|
# Voir la file d'attente
|
|
mailq
|
|
postqueue -p
|
|
|
|
# Forcer la tentative de livraison
|
|
postqueue -f
|
|
|
|
# Vider la file (à utiliser avec précaution)
|
|
postsuper -d ALL
|
|
|
|
# Tester la délivrabilité d'un domaine cible (DANE / TLS)
|
|
posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com
|
|
|
|
# Vérifier ses propres enregistrements
|
|
dig exemple.fr TXT +short
|
|
dig _dmarc.exemple.fr TXT +short
|
|
dig mail._domainkey.exemple.fr TXT +short
|
|
dig mail.exemple.fr MX +short
|
|
dig -x 203.0.113.10 +short
|
|
|
|
# Tester l'envoi en SMTP authentifié
|
|
swaks --to test@gmail.com --from moi@exemple.fr \
|
|
--server mail.exemple.fr --auth --auth-user moi@exemple.fr \
|
|
--tls --port 587
|
|
|
|
# Voir en temps réel ce qu'il se passe
|
|
journalctl -u postfix -u dovecot -u rspamd -f
|
|
```
|
|
|
|
### Outils web à mettre en favoris
|
|
|
|
- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10
|
|
- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet
|
|
- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists
|
|
- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC
|
|
- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF
|
|
- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster
|
|
- [https://senderscore.org/](https://senderscore.org/) — réputation IP
|
|
|
|
### Documentation de référence
|
|
|
|
- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian.
|
|
- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main.
|
|
- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html)
|
|
- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/)
|
|
- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe).
|
|
|
|
---
|
|
|
|
L'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024. |