#pSmtpQueue
Recommandation : Proxmox Mail Gateway comme couche supplémentaire devant nextxch
Une passerelle de messagerie placée en amont accepte tout le courrier provenant d'internet, le contrôle avec un second moteur antispam et antivirus indépendant et ne transmet que le courrier propre à nextxch. Cette page présente l'architecture, la mise en place pas à pas de Proxmox Mail Gateway (open source, AGPLv3) devant nextxch et les paramètres nextxch importants.
La passerelle est facultative : nextxch dispose de sa propre protection antispam et antivirus. Important si vous l'utilisez : ajoutez l'IP de la passerelle dans nextxch en tant que passerelle de confiance (étape 5). nextxch lit alors l'IP réelle de l'expéditeur dans l'en-tête Received de la passerelle et continue d'évaluer correctement SPF, DMARC, le greylisting et les DNSBL au lieu de contrôler l'IP de la passerelle.
Pourquoi une passerelle en amont peut être utile
- Défense en profondeur : deux systèmes indépendants doivent faillir avant qu'un message malveillant n'atteigne une boîte aux lettres. Une faiblesse d'un seul produit ne suffit pas.
- Second moteur antispam et antivirus : Proxmox Mail Gateway utilise ses propres règles, un filtre bayésien, SPF, DNSBL et ClamAV. Ce qu'un filtre laisse passer, l'autre l'intercepte souvent.
- Quarantaine : les messages suspects sont retenus dans la passerelle et peuvent être examinés et libérés par les administrateurs ou les utilisateurs via le rapport de spam.
- Découplage d'internet : seule la passerelle accepte les connexions depuis internet sur le port 25. nextxch se trouve derrière elle, avec le port 25 ouvert uniquement pour la passerelle.
- Mise en mémoire tampon pendant la maintenance : si nextxch est brièvement indisponible pour une mise à jour ou une maintenance, la passerelle conserve les messages entrants dans sa file d'attente et les remet ensuite.
Une évaluation honnête : nextxch est livré avec sa propre protection antispam (SpamGuard avec filtre adaptatif, SPF/DKIM/DMARC/ARC, greylisting, DNSBL, heuristiques anti-hameçonnage) et intègre ClamAV. Pour la plupart des installations, cela suffit. Une passerelle en amont est facultative et devient rentable en cas d'exigences plus élevées : politiques imposant un filtrage en plusieurs étapes, quarantaine centrale, plusieurs serveurs de messagerie derrière un même MX ou séparation réseau stricte.
Architecture : Internet -> Proxmox Mail Gateway -> nextxch
L'enregistrement MX pointe vers la passerelle. Celle-ci accepte le courrier sur le port 25, le filtre et le transmet via SMTP à nextxch. En option, nextxch envoie le courrier sortant via le port interne 26 de la passerelle.
Proxmox® est une marque déposée de Proxmox Server Solutions GmbH. Le nom est utilisé à titre purement descriptif ; nextxch n'est pas affilié à Proxmox Server Solutions GmbH et n'est ni approuvé ni certifié par celle-ci.
La configuration en bref
Cet ordre évite toute perte de courrier : configurez et testez d'abord complètement la passerelle, puis modifiez l'enregistrement MX, et fermez le port 25 sur nextxch en dernier.
1. Install Proxmox Mail Gateway (ISO, on Debian or as an LXC container)
2. Add relay domains (every domain nextxch accepts)
3. Default relay = nextxch host, port 25 (Mail Proxy -> Relaying)
4. Enable receiver verification, TLS and a certificate in the gateway
5. nextxch: add the gateway IP as a trusted gateway (SpamGuard)
6. Send a test message through the gateway, check Message Trace in nextxch
7. Switch the MX record to the gateway (remove the old MX only after the TTL expires)
8. Firewall: allow port 25 on nextxch from the gateway only
9. Optional outbound: gateway as smart host in nextxch (port 26, STARTTLS)
Example values on this page:
Gateway: pmg.company.com 203.0.113.25 (public, MX)
nextxch: mail.company.com 10.0.0.20 (internal, mailboxes)
1. Installer Proxmox Mail Gateway
Proxmox Mail Gateway fonctionne comme appliance autonome (installateur ISO sur matériel ou en VM), sous forme de paquets sur un système Debian existant ou comme conteneur LXC. Si vous utilisez Proxmox VE, un modèle de conteneur prêt à l'emploi est disponible dans le gestionnaire d'appliances. Vous l'administrez ensuite via l'interface web sur le port 8006.
Option A: ISO installer (hardware or VM)
Download the ISO from proxmox.com/downloads -> boot -> run the installer
Host name: pmg.company.com (FQDN, matching the future MX and PTR)
IP: static IP, e.g. 203.0.113.25 or a DMZ address behind NAT
Option B: on an existing Debian system
Add the Proxmox package repository and install the packages as described in
"Install Proxmox Mail Gateway on Debian" in the PMG admin guide
Option C: LXC container in Proxmox VE
Proxmox VE -> Storage -> CT Templates -> Templates -> section "mail"
-> download the Proxmox Mail Gateway template -> create the container
Web interface: https://pmg.company.com:8006 (port 8006 from the admin network only)
Repositories: without a subscription, add the "pmg-no-subscription" repository.
For production, Proxmox recommends the enterprise repository (with subscription).
2. Domaines de relais, relais par défaut et vérification des destinataires dans la passerelle
Tous les paramètres se trouvent dans l'interface web de PMG sous Configuration -> Mail Proxy. La passerelle n'accepte le courrier que pour les domaines de relais listés et le transmet au relais par défaut après filtrage.
Configuration -> Mail Proxy -> Relay Domains
company.com
company-group.com (every domain configured in nextxch, including alias domains)
Configuration -> Mail Proxy -> Relaying
Default Relay: mail.company.com (or 10.0.0.20)
Relay Port: 25
Relay Protocol: SMTP
Disable MX lookup: yes (address the nextxch host directly)
Configuration -> Mail Proxy -> Ports
External SMTP Port: 25 (from the internet, untrusted)
Internal SMTP Port: 26 (from nextxch, trusted, for outbound mail)
Configuration -> Mail Proxy -> Options
Verify Receivers: 550 (reject unknown recipients right away)
SPF: yes
DNSBL Sites: e.g. zen.spamhaus.org (observe the list's terms of use)
Several internal servers: Configuration -> Mail Proxy -> Transports
(domain or single address -> its own target server)
3. Basculer l'enregistrement MX vers la passerelle
Ne basculez qu'une fois qu'un message de test passé par la passerelle est arrivé dans nextxch (Message Trace dans /admin/). Réduisez au préalable le TTL de l'enregistrement MX à quelques minutes. Ne modifiez pas les enregistrements de nextxch lui-même (A/AAAA, PTR, Autodiscover) : les clients continuent de se connecter directement à nextxch.
; Gateway
pmg.company.com. 3600 IN A 203.0.113.25
; PTR for 203.0.113.25 at your provider: pmg.company.com
; MX points to the gateway only
company.com. 3600 IN MX 10 pmg.company.com.
; nextxch stays reachable for clients (IMAP, SMTP submission, webmail)
mail.company.com. 3600 IN A 198.51.100.20
Test beforehand, without a DNS change:
swaks --to anna.weber@company.com --server pmg.company.com --port 25 --tls
4. Sortant facultatif : la passerelle comme smart host dans nextxch
Le courrier sortant passe alors aussi par les filtres de la passerelle (par ex. analyse antivirus, statistiques). Dans l'Admin Cockpit, sous SMTP, Queue Controls & Live MX Tester (#pSmtpQueue), indiquez la passerelle comme smart host global, ou utilisez des routes SMTP pour n'envoyer que certains expéditeurs via la passerelle. Important : l'IP publique de la passerelle doit alors figurer dans l'enregistrement SPF de vos domaines, et son PTR doit correspondre au nom HELO de la passerelle.
# A) Global smart host: all outbound mail through the gateway
nextxch-cli update SmtpQueue --set outboundSmartHost=pmg.company.com \
--set outboundSmartPort=26 --set outboundSmartHostTlsMode=StartTlsRequired
# B) Exception: one partner domain still directly via DNS MX (route without target host)
nextxch-cli create Route --set domain=partner.com --set bypassSmartHost=true \
--set description="direct via MX, not through the gateway"
# C) Only certain senders through the gateway (#pSmtpQueue -> domain routes)
# Destination domain: *
# Only for senders: company.com, *.company.com (SenderDomains)
# Target host: pmg.company.com:26 (several, comma-separated = failover)
# TLS mode: StartTlsRequired
# Priority: 50 (smaller = first; default 100)
# Add the gateway IP to the SPF record of the sender domain:
company.com. IN TXT "v=spf1 mx ip4:203.0.113.25 -all"
# In the gateway: add the nextxch IP under Configuration -> Mail Proxy -> Networks
# if nextxch is not in the same subnet as the gateway.
5. Déclarer l'IP de la passerelle comme fiable dans nextxch
Une passerelle de messagerie accepte elle-même le message et le remet à nouveau. Pour nextxch, l'IP de remise est alors toujours celle de la passerelle. Pour que SPF, DMARC, le greylisting, les DNSBL et le contrôle du DNS inverse évaluent toujours l'expéditeur réel, ajoutez la passerelle sous SpamGuard & ClamAV (#pSpam) dans "Passerelles de confiance". Pour les connexions depuis ces IP, nextxch lit l'IP de l'expéditeur dans l'en-tête Received écrit par la passerelle. Les en-têtes ne sont évalués que pour les connexions depuis les IP listées : un expéditeur qui remet directement ne peut donc pas falsifier son IP de cette manière. Les TrustedProxyCidrs (Cluster:EnableProxyProtocol) sont autre chose : ils ne s'appliquent qu'aux proxys TCP comme HAProxy utilisant le protocole PROXY.
# nextxch: add the gateway as trusted (public and internal IP, CIDR allowed)
# (admin cockpit: SpamGuard & ClamAV (#pSpam) -> "Trusted gateways")
nextxch-cli update SpamGuard --set trustedRelayCidrs=203.0.113.25,10.0.0.25
# Check: send a test message through the gateway, then in the spam analyzer or Message Trace
# TRUSTED_RELAY Via gateway 10.0.0.25, sender IP 198.51.100.7 from Received header
# SPF_PASS (SPF now checked against 198.51.100.7)
# Stays active in nextxch:
# SPF/DKIM/DMARC/ARC, greylisting, DNSBL, adaptive content filter,
# phishing heuristics, allow/block lists, ClamAV (if enabled)
# Connection limit: all inbound mail comes from one IP.
# Check MaxConnectionsPerIp (#pSmtpQueue, default 48) for high volumes.
6. Pare-feu et TLS sur les deux segments
Fermez le port 25 sur nextxch dans le pare-feu de l'hôte ou du périmètre (Pare-feu Windows, nftables, pfSense/OPNsense). Les règles IP de nextxch ne conviennent pas, car elles s'appliquent à tous les ports SMTP à la fois et toucheraient donc aussi les ports 465 et 587 des clients. Chiffrez les deux tronçons : internet <-> passerelle et passerelle <-> nextxch.
Firewall nextxch (inbound)
TCP 25 only from 203.0.113.25 / 10.0.0.25 (gateway)
TCP 465, 587 clients (SMTP submission) -> stay open
TCP 993, 443 clients (IMAP, webmail, DAV, push) -> stay open
Firewall gateway (inbound)
TCP 25 from the internet
TCP 26 from nextxch only (smart host, if used)
TCP 8006 from the admin network only
TLS internet <-> gateway
Configuration -> Mail Proxy -> TLS: "Enable TLS" on
Certificate: Certificates -> ACME (Let's Encrypt) for pmg.company.com
TLS gateway -> nextxch
nextxch offers STARTTLS on port 25 with the certificate of mail.company.com
Gateway: TLS destination policy for mail.company.com = encrypt
(or verify if the default relay is entered as a host name)
TLS nextxch -> gateway (smart host)
outboundSmartHostTlsMode = StartTlsRequired
7. DKIM/DMARC, greylisting et backscatter
Trois points souvent négligés en pratique. La passerelle ne doit pas modifier le courrier sortant, le greylisting ne doit s'exécuter qu'à un seul endroit et les destinataires inconnus doivent être rejetés pendant le dialogue SMTP.
DKIM / DMARC
- nextxch signs outbound mail with DKIM. The gateway forwards it unchanged.
- No disclaimer rule for outbound mail and no content changes in the gateway
(otherwise the DKIM signature breaks and DMARC fails at the recipient).
- Leave DKIM signing off in the gateway; maintain disclaimers in nextxch if needed.
Greylisting
- Slows down spam bots but delays first messages from new senders (usually < 30 minutes per PMG docs).
- Run it in the gateway only; behind the gateway it would be ineffective in nextxch.
- For time-critical senders (e.g. login codes, order confirmations) use the welcomelist,
or skip greylisting entirely if the other filters are sufficient.
Avoid backscatter
- Verify Receivers = 550: the gateway asks nextxch via RCPT TO whether the address exists.
- nextxch rejects unknown recipients at RCPT TO, so the check takes effect immediately.
- Catch-all addresses in nextxch defeat the check and should be avoided.
8. Licence et coûts (au 1er novembre 2026)
Proxmox Mail Gateway est open source sous GNU AGPLv3 et entièrement utilisable sans abonnement ; les mises à jour proviennent alors du dépôt pmg-no-subscription, que Proxmox destine aux systèmes de test et hors production. Un abonnement s'applique par hôte et par an, inclut selon Proxmox un nombre illimité d'utilisateurs et de domaines, et donne accès au dépôt enterprise. Les prix ci-dessous proviennent de la page tarifaire de Proxmox et peuvent changer ; proxmox.com fait toujours foi. nextxch ne vend pas d'abonnements Proxmox.
Licence: GNU Affero General Public License v3 (AGPLv3), since PMG 5.0
Optional subscriptions per host and year (net, per proxmox.com, as of 1 Nov 2026):
Community EUR 190 no ticket support (forum)
Basic EUR 540 5 tickets/year, response 1 business day
Standard EUR 1,260 15 tickets/year, response 4 hours
Premium EUR 1,900 unlimited tickets, response 2 hours
(response = first reply to critical requests within business hours)
Sources:
https://www.proxmox.com/en/products/proxmox-mail-gateway/pricing
https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html (admin guide 9.1.1: licence, repositories, ports)
Paramètres, valeurs par défaut & bonnes pratiques
| Paramètre / emplacement | Description | Valeur par défaut | Bonne pratique en production |
|---|---|---|---|
PMG: Relay Domains (Mail Proxy) |
Liste des domaines pour lesquels la passerelle accepte et transmet le courrier. Le courrier destiné à d'autres domaines est rejeté. | leer |
Ajoutez chaque domaine configuré dans nextxch, domaines d'alias compris. Lorsque vous ajoutez un domaine dans nextxch, ajoutez-le aussi à la passerelle. |
PMG: Default Relay + Port (Mail Proxy -> Relaying) |
Destination du courrier entrant après filtrage (transport Postfix). Serveurs internes supplémentaires par domaine via Transports. | Port 25 · SMTP |
mail.company.com ou 10.0.0.20, port 25, protocole SMTP. Activez "Disable MX lookup" si vous saisissez un nom d'hôte qui possède lui-même un enregistrement MX. |
PMG: Verify Receivers (Mail Proxy -> Options) |
Vérification des destinataires : avant d'accepter, la passerelle demande à nextxch via RCPT TO si l'adresse existe et rejette les destinataires inconnus pendant le dialogue SMTP. | aus |
Définir sur 550. Empêche le backscatter, car la passerelle n'accepte jamais de courrier pour des adresses inventées qu'elle devrait ensuite renvoyer. |
PMG: TLS + Zertifikat |
STARTTLS pour les connexions entrantes et sortantes de la passerelle. Sans certificat propre, PMG en génère un auto-signé. | TLS aus |
Activez TLS, obtenez un certificat de confiance via ACME (Let's Encrypt) pour pmg.company.com et définissez pour l'hôte nextxch une stratégie TLS « encrypt ». |
PMG: Disclaimer & DKIM-Signatur |
L'action de règle Disclaimer ajoute du texte au corps du message ; DKIM Signing signe le courrier reçu sur le port interne. | aus |
Laissez les deux désactivés. nextxch signe avec DKIM ; toute modification du contenu dans la passerelle casse la signature et donc DMARC. Gérez les clauses de non-responsabilité uniquement dans nextxch (ajoutées avant la signature). |
nextxch: Smart-Host (#pSmtpQueue · outboundSmartHost) |
Smart host global : tout le courrier sortant est envoyé à ce relais au lieu d'aller directement au MX du destinataire. | leer (direkt per MX) · Port 25 |
pmg.company.com, port de relais 26 (le port interne de la passerelle), mode TLS StartTlsRequired, sans SMTP AUTH. Dans la passerelle, l'IP de nextxch doit figurer sous Networks (le même sous-réseau est autorisé automatiquement). |
nextxch: Route · SenderDomains |
Condition d'expéditeur d'une route SMTP : domaines (company.com, *.company.com) ou adresses (billing@company.com, *@company.com). Vide = tout expéditeur. | leer |
N'envoyer que certains locataires via la passerelle : une route avec domaine de destination * et SenderDomains = company.com, hôte cible pmg.company.com:26. |
nextxch: Route · Priority |
Ordre entre les routes de même rang ; le plus petit nombre l'emporte, puis le motif le plus spécifique. | 100 |
Le rang prime sur la priorité : expéditeur + domaine de destination, puis domaine de destination, puis expéditeur seul (destination *), puis *, puis smart host global, puis DNS MX. |
nextxch: Route · BypassSmartHost |
Uniquement pour les routes sans hôte cible : le courrier destiné à ce domaine passe directement par DNS MX, même si un smart host global est défini. | false |
Pour certains domaines partenaires qui ne doivent pas passer par la passerelle. Si la route a un hôte cible, l'option est ignorée. |
nextxch: Vertrauenswürdige Gateways (#pSpam · trustedRelayCidrs) |
IP ou réseaux CIDR des passerelles en amont. Lorsqu'une connexion en provient, nextxch prend l'IP de l'expéditeur et le HELO dans l'en-tête Received le plus haut qui n'a pas été écrit par une passerelle listée ou par localhost. | leer |
Ajoutez l'IP publique et l'IP interne de la passerelle, par ex. 203.0.113.25 et 10.0.0.25. Uniquement vos propres passerelles : les en-têtes Received provenant des IP listées sont considérés comme fiables. L'analyseur antispam affiche alors la règle TRUSTED_RELAY avec l'IP d'expéditeur détectée. |
nextxch: SPF, DKIM, DMARC & ARC, Greylisting, DNSBL (#pSpam) |
Avec la passerelle listée, ils contrôlent l'IP réelle de l'expéditeur. Sans elle, ils ne verraient que l'IP de la passerelle, et le SPF renverrait le plus souvent softfail ou fail pour les autres domaines. | abhängig von der Konfiguration |
Laissez-les activés. Un contrôle à la fois dans la passerelle et dans nextxch est sans danger ; si vous voulez le greylisting à un seul endroit, conservez-le dans la passerelle et désactivez-le dans nextxch. |
Firewall: Port 25 auf nextxch |
Après le changement de MX, seule la passerelle peut joindre nextxch sur le port 25. | offen für alle |
Dans le pare-feu de l'hôte ou du périmètre, n'autorisez le port 25 que depuis 203.0.113.25 ou l'IP interne de la passerelle. Les ports 465, 587, 993 et 443 restent ouverts pour les clients. |