Files
varlog/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0003.md
T
2026-05-15 10:37:48 +02:00

605 lines
29 KiB
Markdown

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