Ajout du guide PDF HestiaCP réutilisable (HestiaCP 1.10.4)
- 14 chapitres + annexe en Markdown (chapitres/), 99 étapes - Générateur WeasyPrint (build/build.py) : PDF générique ou personnalisé via --vars fichier.conf - PDF générique + PDF personnalisé srv1.skglobalinstitute.com - Commandes v-* vérifiées contre le code source HestiaCP 1.10.4 - 03-bis-hestiacp.md pointe vers le nouveau guide Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018J2PsVQ28oW4xEkWJpcU9G
This commit is contained in:
157
hestiacp/chapitres/09-messagerie.md
Normal file
157
hestiacp/chapitres/09-messagerie.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# Messagerie
|
||||
|
||||
La messagerie repose sur **Exim** (envoi et réception), **Dovecot** (IMAP/POP3), **SpamAssassin** et **ClamAV** (antispam et antivirus), et **Roundcube** (webmail). HestiaCP signe les mails avec **DKIM**. Les enregistrements **SPF** et **DMARC** viennent déjà du modèle DNS.
|
||||
|
||||
> [!WARNING] Prérequis
|
||||
> - La zone DNS du domaine existe (chapitre 6). Sinon la clé DKIM ne sera pas publiée.
|
||||
> - Le PTR de {{IP}} vaut {{FQDN}} (chapitre 1).
|
||||
|
||||
## Créer le domaine de messagerie
|
||||
|
||||
Antispam, antivirus et DKIM (2048 bits) sont activés par défaut :
|
||||
|
||||
```bash
|
||||
sudo v-add-mail-domain {{CLIENT}} {{DOMAINE}}
|
||||
sudo v-list-dns-records {{CLIENT}} {{DOMAINE}} | grep -E "_domainkey|_dmarc|spf"
|
||||
```
|
||||
|
||||
> [!CHECK]
|
||||
> Trois enregistrements TXT apparaissent :
|
||||
> - `mail._domainkey` : `v=DKIM1; k=rsa; p=…` ;
|
||||
> - `_dmarc` : `v=DMARC1; p=quarantine; pct=100` ;
|
||||
> - `@` : `v=spf1 a mx ip4:{{IP}} -all`.
|
||||
|
||||
## Activer le certificat SSL de la messagerie
|
||||
|
||||
Ce certificat couvre `mail.{{DOMAINE}}` et `webmail.{{DOMAINE}}`. Exim et Dovecot le présentent automatiquement aux clients mail qui se connectent à `mail.{{DOMAINE}}`.
|
||||
|
||||
```bash
|
||||
sudo v-add-letsencrypt-domain {{CLIENT}} {{DOMAINE}} '' yes
|
||||
```
|
||||
|
||||
> [!CHECK]
|
||||
> `https://webmail.{{DOMAINE}}` affiche la page de connexion Roundcube avec un cadenas valide.
|
||||
|
||||
## Créer les boîtes mail
|
||||
|
||||
```bash
|
||||
sudo v-add-mail-account {{CLIENT}} {{DOMAINE}} contact 'MOT_DE_PASSE_MAIL'
|
||||
sudo v-add-mail-account {{CLIENT}} {{DOMAINE}} noreply 'MOT_DE_PASSE_NOREPLY'
|
||||
sudo v-list-mail-accounts {{CLIENT}} {{DOMAINE}}
|
||||
```
|
||||
|
||||
Ajouter un alias ou une redirection :
|
||||
|
||||
```bash
|
||||
sudo v-add-mail-account-alias {{CLIENT}} {{DOMAINE}} contact info
|
||||
sudo v-add-mail-account-forward {{CLIENT}} {{DOMAINE}} contact adresse@externe.com
|
||||
```
|
||||
|
||||
## Ajouter les enregistrements SRV (domaine principal)
|
||||
|
||||
Les enregistrements SRV aident les logiciels de messagerie à se configurer seuls. Le modèle `child-ns` du domaine principal n'en contient pas ; les autres domaines, créés avec le modèle `default`, les ont déjà.
|
||||
|
||||
```bash
|
||||
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _imaps._tcp SRV '0 993 mail.{{DOMAINE}}.' 1
|
||||
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _submission._tcp SRV '0 587 mail.{{DOMAINE}}.' 1
|
||||
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _submissions._tcp SRV '0 465 mail.{{DOMAINE}}.' 1
|
||||
```
|
||||
|
||||
## Configurer un logiciel de messagerie
|
||||
|
||||
| Réglage | Valeur |
|
||||
|---|---|
|
||||
| Identifiant | adresse complète, ex. `contact@{{DOMAINE}}` |
|
||||
| Serveur entrant (IMAP) | `mail.{{DOMAINE}}`, port **993**, SSL/TLS |
|
||||
| Serveur sortant (SMTP) | `mail.{{DOMAINE}}`, port **465** SSL/TLS (ou 587 STARTTLS) |
|
||||
| Authentification | mot de passe normal |
|
||||
| Webmail | `https://webmail.{{DOMAINE}}` |
|
||||
|
||||
## Tester l'envoi et la réception
|
||||
|
||||
Vérifiez d'abord que le port 25 sortant n'est pas bloqué par l'hébergeur :
|
||||
|
||||
```bash
|
||||
nc -vz -w 5 aspmx.l.google.com 25
|
||||
```
|
||||
|
||||
> [!CHECK]
|
||||
> `Connection to aspmx.l.google.com 25 port [tcp/smtp] succeeded!`
|
||||
|
||||
Envoyez ensuite un mail depuis le webmail :
|
||||
|
||||
1. vers l'adresse fournie par <https://www.mail-tester.com> : visez **10/10** ;
|
||||
2. vers une adresse Gmail : dans **Afficher l'original**, SPF, DKIM et DMARC doivent être **PASS**.
|
||||
|
||||
Répondez aussi depuis Gmail pour tester la réception.
|
||||
|
||||
## Utiliser Spamhaus avec une clé gratuite (recommandé)
|
||||
|
||||
Spamhaus bloque les requêtes qui passent par les résolveurs DNS publics, ce qui rend son filtre antispam inopérant et peut fausser les résultats. La documentation HestiaCP recommande un compte gratuit **Spamhaus DQS** (<https://www.spamhaus.com/free-trial/sign-up-for-a-free-data-query-service-account/>), qui fournit une clé.
|
||||
|
||||
```bash
|
||||
sudo v-list-sys-mail-dnsbl
|
||||
sudo v-delete-sys-mail-dnsbl zen.spamhaus.org
|
||||
sudo v-add-sys-mail-dnsbl VOTRE_CLE.zen.dq.spamhaus.net
|
||||
```
|
||||
|
||||
## Envoyer des mails depuis une application (Symfony…)
|
||||
|
||||
**Méthode recommandée :** envoi authentifié avec une vraie boîte, par exemple `noreply`. Le certificat correspond au nom utilisé, et les limites d'envoi par compte s'appliquent. Dans `.env.local` :
|
||||
|
||||
```text
|
||||
MAILER_DSN=smtp://noreply%40{{DOMAINE}}:MOT_DE_PASSE_NOREPLY@mail.{{DOMAINE}}:587
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Dans le DSN, `@` s'écrit `%40`. Tout caractère spécial du mot de passe doit aussi être encodé : `%23` pour `#`, `%2F` pour `/`, `%3A` pour `:`.
|
||||
|
||||
**Alternative sans mot de passe :** Exim accepte les mails envoyés depuis `127.0.0.1` sans authentification. Désactivez le TLS automatique, car le certificat ne correspond pas à `127.0.0.1` :
|
||||
|
||||
```text
|
||||
MAILER_DSN=smtp://127.0.0.1:25?auto_tls=false
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> N'utilisez pas `sendmail://` : les fonctions PHP qu'il utilise (`proc_open`…) sont désactivées dans PHP-FPM par HestiaCP. N'utilisez pas `localhost` non plus : Exim n'écoute qu'en IPv4, alors que `localhost` peut se résoudre en IPv6 (`::1`).
|
||||
|
||||
> [!TIP] Limite d'envoi
|
||||
> Par défaut, chaque compte peut envoyer **200 mails par heure**. Pour une application qui envoie beaucoup : `sudo v-change-mail-account-rate-limit {{CLIENT}} {{DOMAINE}} noreply 1000`.
|
||||
|
||||
## Configuration automatique pour Thunderbird (facultatif)
|
||||
|
||||
HestiaCP ne gère pas l'autoconfiguration. Thunderbird la cherche sur `autoconfig.<domaine>` : un petit site statique suffit.
|
||||
|
||||
```bash
|
||||
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} autoconfig A {{IP}}
|
||||
sudo v-add-web-domain {{CLIENT}} autoconfig.{{DOMAINE}}
|
||||
sudo v-add-letsencrypt-domain {{CLIENT}} autoconfig.{{DOMAINE}}
|
||||
sudo mkdir -p /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail
|
||||
sudo tee /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail/config-v1.1.xml > /dev/null << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<clientConfig version="1.1">
|
||||
<emailProvider id="{{DOMAINE}}">
|
||||
<domain>{{DOMAINE}}</domain>
|
||||
<displayName>{{DOMAINE}}</displayName>
|
||||
<incomingServer type="imap">
|
||||
<hostname>mail.{{DOMAINE}}</hostname>
|
||||
<port>993</port>
|
||||
<socketType>SSL</socketType>
|
||||
<username>%EMAILADDRESS%</username>
|
||||
<authentication>password-cleartext</authentication>
|
||||
</incomingServer>
|
||||
<outgoingServer type="smtp">
|
||||
<hostname>mail.{{DOMAINE}}</hostname>
|
||||
<port>465</port>
|
||||
<socketType>SSL</socketType>
|
||||
<username>%EMAILADDRESS%</username>
|
||||
<authentication>password-cleartext</authentication>
|
||||
</outgoingServer>
|
||||
</emailProvider>
|
||||
</clientConfig>
|
||||
EOF
|
||||
sudo chown -R {{CLIENT}}:{{CLIENT}} /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail
|
||||
```
|
||||
|
||||
> [!CHECK]
|
||||
> `curl -s https://autoconfig.{{DOMAINE}}/mail/config-v1.1.xml | head -3` affiche le début du fichier XML.
|
||||
Reference in New Issue
Block a user