Confidentialite¶
Les emails transportent des données de tous niveaux de classification — du planning d'équipe (Public) aux documents RH nominatifs (Confidentiel). La politique de sécurité de la messagerie doit couvrir le niveau le plus eleve.
Classification de la messagerie¶
La messagerie est classee Interne a Confidentiel dans le modèle de classification.
| Classification | Type de contenu | Mesures requises |
|---|---|---|
| Public | Newsletters, communications publiques | TLS en transit (minimum) |
| Interne | Échanges inter-équipes, comptes-rendus | TLS obligatoire, authentification |
| Confidentiel | Données RH, documents juridiques, bilans financiers | TLS + chiffrement bout en bout (S/MIME ou PGP) |
| Restreint | Données sensibles defense, brevets, secrets industriels | Chiffrement bout en bout obligatoire, accès restreint |
Un email peut contenir n'importe quoi
Contrairement a un service DNS ou IAM dont le contenu est previsible, un utilisateur peut envoyer n'importe quelle donnée par email. La protection doit couvrir le cas le plus sensible. Par defaut, traiter la messagerie comme Confidentiel.
TLS obligatoire¶
Chiffrement en transit¶
Tout le trafic email doit etre chiffre en transit. Stalwart supporte deux modes :
| Mode | Description | Port | Recommandation |
|---|---|---|---|
| TLS implicite | TLS des la connexion | 465, 993 | Recommande (moderne) |
| STARTTLS | Upgrade TLS apres connexion en clair | 25, 587, 143 | Acceptable (compatibilité) |
| Clair | Pas de chiffrement | — | Interdit |
Forcer TLS sur les connexions SMTP entrantes¶
# /opt/stalwart/config/config.toml
# Forcer STARTTLS sur le port 25 (serveur-a-serveur)
[session.ehlo]
require = true
[session.extensions]
requiretls = true
Forcer TLS sur les connexions sortantes¶
# Exiger TLS pour la livraison sortante
[queue.outbound.tls]
starttls = "require"
allow-invalid-certs = false
Compatibilité avec les serveurs anciens
Certains serveurs email anciens ne supportent pas TLS. Si starttls = "require" est active, les emails vers ces serveurs seront rejetes. Monitorer les echecs de livraison TLS via Prometheus et ajouter des exceptions au cas par cas si nécessaire.
MTA-STS : annoncer la politique TLS¶
MTA-STS permet d'annoncer publiquement que votre serveur exige TLS, empechant les attaques de downgrade :
# Fichier https://mta-sts.company.io/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: mail.company.io
max_age: 604800
| Mode | Comportement |
|---|---|
testing | Rapporter les echecs mais accepter le plain text |
enforce | Rejeter les connexions sans TLS valide |
none | Désactiver MTA-STS |
TLSRPT : rapports TLS¶
Les serveurs qui tentent de vous envoyer des emails rapportent les echecs TLS. Cela permet de détecter les problèmes de certificats ou les attaques de downgrade.
Chiffrement bout en bout¶
Le TLS protège le transport mais pas le stockage. Pour les contenus Confidentiel ou Restreint, le chiffrement bout en bout (E2EE) est nécessaire.
S/MIME¶
S/MIME est le standard de chiffrement email le plus repandu en entreprise :
| Aspect | Detail |
|---|---|
| Standard | RFC 8551 |
| Infrastructure | PKI (certificats X.509 par utilisateur) |
| Clients support | Outlook, Thunderbird, Apple Mail, iOS |
| Gestion des cles | CA interne (Vault PKI) ou CA publique |
| Avantage | Integration native dans les clients enterprise |
| Inconvénient | PKI a maintenir, certificats a renouveler |
Déploiement S/MIME avec Vault PKI¶
# Generer un certificat S/MIME pour un utilisateur
vault write pki-email/issue/smime-user \
common_name="alice@company.io" \
alt_names="alice@company.io" \
key_usage="DigitalSignature,KeyEncipherment" \
ext_key_usage="EmailProtection" \
ttl="365d"
PGP/GPG¶
PGP est l'alternative decentralisee (pas de PKI centralisee) :
| Aspect | Detail |
|---|---|
| Standard | RFC 4880 (OpenPGP) |
| Infrastructure | Web of trust ou serveur de cles |
| Clients support | Thunderbird (natif), Outlook (plugin) |
| Gestion des cles | Decentralisee (keyserver, WKD) |
| Avantage | Pas de PKI a maintenir |
| Inconvénient | UX complexe, adoption utilisateur difficile |
WKD : Web Key Directory¶
WKD permet de publier les cles PGP publiques via HTTPS, facilitant la découverte automatique :
# Publication de la cle publique d'Alice
# URL : https://company.io/.well-known/openpgpkey/hu/<hash-of-alice>
# Le hash est le SHA-1 du local-part de l'adresse, encode en z-base-32
Comparaison S/MIME vs PGP¶
| Critère | S/MIME | PGP |
|---|---|---|
| Gestion des cles | PKI centralisee | Decentralisee |
| Facilite d'adoption | Elevee (enterprise) | Faible (technique) |
| Integration clients | Native (Outlook, Apple) | Plugins nécessaires |
| Coût | PKI a opérer | Gratuit |
| Recommandation | Enterprise (defaut) | Équipes techniques |
Audit des accès aux boites aux lettres¶
Journalisation des accès¶
Stalwart journalise toutes les opérations sur les boites aux lettres :
# Activer la journalisation detaillee
[tracing]
level = "info"
method = "stdout"
[tracing.event.mail-delivery]
enable = true
[tracing.event.imap]
enable = true
[tracing.event.auth]
enable = true
Événements audites¶
| Événement | Information journalisee | Criticite |
|---|---|---|
| Authentification | Utilisateur, IP source, méthode, résultat | Info |
| Echec d'auth | Utilisateur, IP source, méthode, raison | Warning |
| Accès boite | Utilisateur, dossier accede, protocole (IMAP/JMAP) | Info |
| Envoi d'email | Expéditeur, destinataire(s), taille | Info |
| Suppression d'email | Utilisateur, message-id, dossier | Info |
| Export de boite | Utilisateur admin, boite exportee | Warning |
| Modification de filtre | Utilisateur, filtre Sieve modifie | Info |
Centralisation des logs¶
# Envoi vers un collecteur syslog/Loki
[tracing]
method = "journal" # systemd journal, collecte par Promtail/Loki
# Ou vers un endpoint OpenTelemetry
[tracing.otel]
endpoint = "http://otel-collector.monitoring.internal:4317"
Politiques de retention¶
Retention legale vs auto-suppression¶
| Politique | Duree | Cas d'usage |
|---|---|---|
| Retention legale | 5-10 ans | Emails contractuels, juridiques, fiscaux |
| Retention standard | 1-3 ans | Emails courants |
| Auto-suppression | 30-90 jours | Spam, quarantaine, corbeille |
| Legal hold | Indefinie | Litige en cours, enquete |
Configuration des quotas et retention¶
# Quotas par defaut
[jmap.quota]
max-size = 5368709120 # 5 Go par boite
# Retention de la corbeille
[jmap.trash]
auto-expunge = "30d"
# Retention du dossier spam
[jmap.spam]
auto-expunge = "14d"
Legal hold¶
En cas de litige ou d'enquete, les boites aux lettres concernees doivent etre preservees sans modification ni suppression :
# Activer le legal hold sur une boite
curl -X PATCH http://localhost:8080/api/principal/alice \
-H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{"quota": 0}' # Quota 0 = pas de suppression automatique
# Exporter une boite pour archivage legal
curl -X GET "http://localhost:8080/api/store/export?account=alice" \
-H "Authorization: Bearer <admin-token>" \
-o alice-mailbox-export.tar.gz
Legal hold et RGPD
Le legal hold entre en tension avec le droit a l'effacement du RGPD. Documenter la base legale de chaque legal hold et lever la preservation dès que le litige est clos.
Chiffrement des sauvegardes¶
Les sauvegardes des boites aux lettres contiennent toutes les données sensibles. Elles doivent etre chiffrees :
# Sauvegarde chiffree avec age (alternative moderne a GPG)
podman exec stalwart-mail \
stalwart-mail export /tmp/backup.tar
# Chiffrer avec la cle publique de l'equipe ops
age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-o /backup/stalwart-$(date +%Y%m%d).tar.age \
/tmp/backup.tar
# Supprimer la sauvegarde non chiffree
rm /tmp/backup.tar
| Aspect | Recommandation |
|---|---|
| Algorithme | âge (X25519) ou GPG (RSA 4096) |
| Stockage cles | Vault, HSM ou coffre-fort hors-ligne |
| Fréquence | Quotidienne (incrementale), hebdo (complète) |
| Retention backups | Alignee sur la politique de retention email |
| Test de restauration | Mensuel (vérifier l'intégrité) |
Isolation réseau¶
Architecture DMZ pour la messagerie¶
graph TD
Internet --> FWext["Firewall externe"]
FWext -->|Port 25 SMTP in<br/>Port 443 HTTPS/JMAP| DMZ
subgraph DMZ
Proxy["Reverse proxy"]
end
DMZ --> FWint["Firewall interne"]
FWint --> Interne
subgraph Interne["Reseau interne"]
Stalwart["Stalwart<br/>IMAP:993<br/>SMTP:465"]
Services["Keycloak,<br/>PostgreSQL,<br/>CoreDNS"]
end Regles firewall¶
| Source | Destination | Port | Protocole | Justification |
|---|---|---|---|---|
| Internet | DMZ (proxy) | 25 | SMTP | Reception emails externes |
| Internet | DMZ (proxy) | 443 | HTTPS | JMAP, CalDAV (si expose) |
| DMZ (proxy) | Stalwart | 25, 8080 | TCP | Relais vers le serveur mail |
| Réseau int. | Stalwart | 993 | IMAPS | Consultation boites internes |
| Réseau int. | Stalwart | 465 | SMTPS | Soumission emails internes |
| Stalwart | Internet | 25 | SMTP | Livraison emails sortants |
| Stalwart | Keycloak | 636 | LDAPS | Authentification |
| Stalwart | CoreDNS | 53 | DNS | Résolution MX, SPF |
Ne jamais exposer IMAP sur Internet
Le port IMAP (993) ne doit etre accessible que depuis le réseau interne ou via VPN. Seuls SMTP entrant (25) et HTTPS (443, pour JMAP) sont exposes dans la DMZ. Les utilisateurs distants accedent a leur boite via JMAP/HTTPS ou VPN.
Politique d'accès¶
| Rôle | Accès | Justification |
|---|---|---|
| Utilisateurs | Leur propre boite (IMAP/JMAP) | Usage quotidien |
| Administrateur mail | Admin UI, configuration, logs | Opération du service |
| Équipe sécurité | Logs d'audit (lecture seule) | Detection d'anomalies |
| DPO / Juridique | Export de boite (sur legal hold) | Obligations legales |
| Personne d'autre | Accès aux boites d'autrui | Aucune raison legitime |
Synthese¶
La messagerie est le service le plus sensible de l'infrastructure d'entreprise car elle transporte des données de tous niveaux de classification. La protection repose sur trois couches : TLS obligatoire en transit, chiffrement bout en bout (S/MIME) pour les contenus sensibles, et isolation réseau (DMZ pour SMTP, interne pour IMAP). Les politiques de retention et d'audit completent le dispositif. Le chapitre suivant couvre les bonnes pratiques operationnelles.