Manuel d'installation · v1.0.0 Windows .msi · Linux systemd · Docker

D'un hôte vierge au flux de messagerie en production en 8 étapes

Un serveur de messagerie dépend davantage de son réseau que de son matériel : si le port 25 est bloqué ou si le DNS inverse (PTR) manque, les messages ne seront pas remis, quelle que soit la puissance du CPU. Ce guide vous mène dans un ordre strict, des vérifications préalables à la configuration, au DKIM à double clé, au TLS et à l'intégration des mobiles, jusqu'à votre première remise vérifiée.

Chapitre 01

Comment nextxch démarre et atteint la production

nextxch réunit ESMTP, IMAP4rev2, POP3, JMAP, Exchange ActiveSync, CalDAV/CardDAV, ManageSieve, SpamGuard, l'archive GoBD WORM, l'Admin Cockpit (/admin/) et le Webmail PWA nextxch (/mail/) dans un seul binaire sûr en mémoire (~40 à 90 Mo de RAM au repos). Rien n'est téléchargé depuis GitHub au premier démarrage, et aucun wrapper NSSM externe, Redis, Rspamd ni conteneur de webmail distinct n'est nécessaire.

L'ordre compte : Vérifiez le chapitre 02 (port 25 & DNS inverse chez votre fournisseur) avant d'exécuter la moindre commande, puis suivez le chapitre 04 pour votre plateforme et consultez le chapitre 06 chaque fois qu'une sortie diffère de l'état attendu.
ÉTAPE 01-02Installer & se connecterInstallez le paquet vérifié SHA-256, ouvrez les ports et connectez-vous à /admin/.
ÉTAPE 03-05Domaine, TLS & Dual DKIMÉmettez un certificat ACME/PFX et publiez les deux enregistrements DNS RSA-2048 & Ed25519.
ÉTAPE 06-07Renforcer la sécurité & connecter les appareilsActivez SpamGuard, l'IPv6 Dual-Stack, GoBD et les profils QR/WhatsApp en 1 clic.
ÉTAPE 08Vérifier le flux de messagerieExécutez le testeur MX/DANE sortant + un test aller-retour via Message Trace.
Chapitre 02

Prérequis système et réseau (liste de contrôle avant installation)

Cochez les 6 points ci-dessous avant l'installation. Quatre d'entre eux se règlent en dehors du serveur, dans votre panneau d'hébergement ou DNS.

Port Protocole / service Sens Exigence & recommandation
25 / TCPESMTP (MX de serveur à serveur + STARTTLS/DANE)Entrant & sortantObligatoire - indispensable pour recevoir et remettre le courrier internet.
443 / TCPHTTPS (/admin/, /mail/, JMAP, ActiveSync, DAV, MTA-STS)Entrant (+ sortant)Obligatoire - Sert le Webmail, l'administration, Mobile Push, DAV, JMAP & ACME.
465 / TCPSoumission SMTPS (TLS implicite, RFC 8314)EntrantObligatoire - Port de soumission privilégié en TLS implicite (RFC 8314).
587 / TCPSoumission SMTP (STARTTLS)EntrantObligatoire - soumission STARTTLS standard pour Outlook, imprimantes & ERP.
993 / TCPIMAPS (IMAP4rev2 TLS implicite)EntrantObligatoire - IMAP4rev2 chiffré avec push IDLE sans interrogation périodique.
80 / TCPHTTP (ACME HTTP-01 & Autoconfig)EntrantRecommandé (facultatif avec TLS-ALPN-01 ou un PFX de passerelle).
4190 / TCPManageSieve (STARTTLS)EntrantFacultatif (l'éditeur Sieve visuel du Webmail fonctionne déjà via le port 443).
143 / TCPIMAP (STARTTLS)EntrantFacultatif (préférez le port 993 avec TLS implicite).
995 / TCPPOP3S (TLS implicite)EntrantFacultatif (uniquement si POP3 est activé dans Admin > Réseau ; désactivé par défaut).
110 / TCPPOP3 (STLS)EntrantFacultatif (préférez le port 995 en TLS implicite).
Taille du déploiement CPU RAM Disque et base de données recommandée
1 - 250 boîtes aux lettres2 vCPU1 - 2 GoNVMe/SSD · SQLite WAL intégré + Zstandard (empreinte serveur d'environ 40 à 90 Mo).
250 - 2 500 boîtes aux lettres4 vCPU4 - 8 GoNVMe + S3 hybride en option · PostgreSQL 18 ou Microsoft SQL Server (2019-2025).
Cluster HA 2 500+8+ vCPU16+ GoNœuds actif-actif sur PostgreSQL 18 ou SQL Server Always On + S3 Object Lock.
Chapitre 03

Choisir votre plateforme & votre backend de stockage

Chaque plateforme exécute exactement les mêmes fonctionnalités. Choisissez la méthode de déploiement et le backend SQL adaptés à votre équipe d'exploitation.

Plateforme Méthode Idéal pour
Windows Server 2019-2025.msi / install.ps1Service Windows SCM natif sans Docker ni NSSM ; idéal en complément de Microsoft SQL Server ou pour les migrations depuis hMailServer.
Linux (x86_64 & ARM64)install.sh · .deb · systemdDémon systemd léger, sans root, sur Debian, Ubuntu LTS, RHEL/Rocky ou serveurs ARM64.
Docker Composenextxch/server:1.0.0Piles de conteneurs reproductibles sur hôtes Linux, VM Proxmox, Synology, UGREEN et Unraid.
macOS & Kuberneteslaunchd / Helm v3Serveurs de bureau Mac mini (launchd) ou clusters Kubernetes actif-actif horizontaux.
Chapitre 04

Le tutoriel en 8 étapes : de l'installation au premier e-mail de test vérifié

Sélectionnez votre plateforme cible ci-dessous. Chacune des 8 étapes indique ce qu'elle fait, montre la commande exacte, confirme le résultat attendu et signale l'écueil le plus fréquent à l'endroit même où il survient.

ÉTAPE 01

Installer le service & ouvrir les ports du pare-feu

Télécharge le paquet de version, vérifie son empreinte SHA-256 et enregistre le service d'arrière-plan ainsi que le répertoire de données persistant.

# PowerShell (Admin): Downloads .msi (v1.0.0), verifies SHA-256 & launches setup
irm https://nextxch.com/install.ps1 | iex

# Ensure Windows Defender Firewall permits inbound mail & HTTPS ports
New-NetFirewallRule -DisplayName "nextxch" -Direction Inbound `
  -Protocol TCP -LocalPort 25,80,443,465,587,993,4190 -Action Allow
# Debian / Ubuntu / RHEL / macOS: Verifies SHA-256 & registers systemd unit
curl -fsSL https://nextxch.com/install.sh | sudo bash

# If UFW is enabled, allow required mail & HTTPS ports:
sudo ufw allow 25,80,443,465,587,993,4190/tcp
# Pulls SHA-256-verified nextxch/server:1.0.0 & writes docker-compose.yml
curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- \
  --mode docker --domain firma.de --hostname mail.firma.de --admin admin@firma.de
Résultat attendu : le service est actif, activé au démarrage et à l'écoute sur HTTPS et les ports de messagerie.
Piège courant : si le démarrage signale 'Address already in use', un MTA préinstallé (Postfix/Exim) ou un serveur web occupe le port 25/80/443 -> voir le chapitre 06 (#sym-port-bind).
ÉTAPE 02

Vérifier l'état du service & se connecter à /admin/

Vérifiez dans les journaux que les listeners démarrent proprement, puis connectez-vous à l'Admin Cockpit avec les identifiants administrateur définis lors de l'installation.

Get-Service nextxch
# Open in browser: https://mail.firma.de/admin/ (or http://localhost/admin/)
sudo systemctl status nextxch
sudo journalctl -u nextxch -n 30 --no-pager
# Open in browser: https://mail.firma.de/admin/
docker compose ps
docker compose logs --tail=30 nextxch
# Open in browser: https://mail.firma.de/admin/
Résultat attendu : le tableau de bord en temps réel sous /admin/ s'ouvre et affiche les listeners actifs pour SMTP, IMAP et HTTPS.
ÉTAPE 03

Configurer le domaine de messagerie & DKIM double clé en parallèle

Ouvrez Domaines & routage -> Gérer le domaine dans /admin/. nextxch génère automatiquement deux paires de clés DKIM parallèles : RSA-2048 (sélecteur s2026) et Ed25519 (sélecteur s2026ed).

Bonne pratique : publiez les DEUX enregistrements TXT dans le DNS une seule fois à l'étape 5 ; vous pouvez ensuite changer instantanément de mode de signature (RSA-2048, Ed25519 ou Dual-Sign) sur le serveur, sans aucune attente de propagation DNS.
ÉTAPE 04

Activer le certificat TLS (ACME Let's Encrypt ou PFX de passerelle)

Ouvrez Sécurité & certificats -> TLS & ACME. Dès que mail.company.com pointe vers votre hôte, demandez un certificat Let's Encrypt via HTTP-01 ou TLS-ALPN-01 (port 443), ou téléversez un certificat .pfx/.pem depuis votre pfSense/passerelle SSL.

Résultat attendu : le rechargement à chaud SNI dynamique en 0 ms active immédiatement le certificat sur HTTPS, SMTPS, IMAPS et ManageSieve, sans redémarrage.
ÉTAPE 05

Publier les enregistrements DNS & lancer la vérification DNS en direct

Copiez les enregistrements DNS calculés depuis le conseiller DNS intégré (ou exportez le fichier de zone BIND) : MX, A/AAAA, SPF, les deux sélecteurs DKIM (s2026 + s2026ed), DMARC, MTA-STS, TLS-RPT et, en option, DANE TLSA (3 1 1) et BIMI.

Résultat attendu : un clic sur « Verify Live DNS » affiche des badges verts de réussite pour MX, SPF, les deux sélecteurs DKIM, DMARC et PTR.
Piège fréquent : de nombreux panneaux de gestion DNS ajoutent automatiquement votre domaine ; saisissez s2026._domainkey comme hôte plutôt que s2026._domainkey.company.com -> voir #sym-dkim-dns.
ÉTAPE 06

Durcir le serveur avant la production

Enregistrez une clé d'accès (WebAuthn) ou une 2FA TOTP sur votre compte administrateur, conservez les seuils SpamGuard à 4.5 / 9.0 avec le greylisting intelligent actif et activez l'archivage GoBD WORM sur les domaines commerciaux.

Résultat attendu : la protection par bannissement automatique, le TLS obligatoire avant l'authentification et les limites de débit sortant protègent automatiquement la réputation de votre IP.
ÉTAPE 07

Créer la première boîte aux lettres & connecter les appareils mobiles en 30 secondes

Créez votre première boîte aux lettres utilisateur sous Comptes & listes, connectez-vous sur https://mail.company.com/mail/ et cliquez sur « Device Setup » pour générer un code QR ou un lien d'intégration en 1 clic compatible messageries, avec un profil iOS/macOS signé CMS ou Exchange ActiveSync.

Résultat attendu : iOS affiche un badge vert « Vérifié » sur le profil et synchronise immédiatement Mail, Calendriers, Contacts et Notes.
ÉTAPE 08

Confirmer la remise entrante & sortante via Live MX Tester & Message Trace

Lancez Diagnostics & Logs -> Outbound MX & DANE Tester sur gmail.com ou une adresse externe, puis envoyez un véritable e-mail depuis /mail/ et répondez-y pour vérifier le flux bidirectionnel.

Résultat attendu : Message Trace enregistre « Delivered » via TLS 1.3 dans les deux sens, et les en-têtes du destinataire externe indiquent spf=pass, dkim=pass et dmarc=pass.
Chapitre 05

Fonctionnement derrière pfSense / OPNsense, passerelles SSL & proxys inverses

Lors d'un déploiement derrière pfSense, OPNsense, Sophos ou HAProxy, configurez ces trois paramètres pour des diagnostics précis et la conservation de l'IP réelle du client :

Scénario Configuration recommandée
Split-DNS / Hairpin-NATConfigurez dans Unbound un remplacement d'hôte Split-DNS faisant pointer mail.company.com vers l'IP LAN interne, ou activez Pure NAT Reflection sur votre passerelle.
Protocole PROXY HAProxyActivez le protocole PROXY v1/v2 limité au CIDR de votre proxy de confiance, afin que SPF et l'Auto-Ban voient la véritable IP distante et non l'IP de la passerelle.
Certificat de la passerelleSynchronisez le certificat .pfx/.pem renouvelé de votre passerelle vers nextxch pour les ports 25/465/587/993 ; le SNI dynamique recharge à chaud les certificats mis à jour sans interruption.
Chapitre 06

Dépannage par symptôme (de l'erreur à la solution immédiate)

Cliquez ci-dessous sur le symptôme constaté ou saisissez une partie du message d'erreur dans le champ de filtre rapide ci-dessus :

Le vérificateur de ports externe signale 'Bloqué / Délai dépassé' alors que le service fonctionne TCP 25 / 465 / 993 Timeout
Cause : soit les deux hôtes se trouvent derrière le même pare-feu pfSense/OPNsense sans Hairpin NAT (NAT Reflection), soit le pare-feu externe de votre fournisseur cloud bloque toujours le port 25.
Solution : vérifiez les diagnostics réseau dans /admin/ (qui détectent automatiquement les passerelles NAT hairpin co-hébergées) et assurez-vous que le pare-feu cloud externe autorise TCP 25, 443, 465, 587 et 993.
Le service ne parvient pas à se lier à un port au démarrage Address already in use (:25 / :80 / :443)
Cause : un MTA préinstallé (Postfix, Exim, Sendmail) sous Linux ou IIS/Nginx/Apache occupe déjà le port 25, 80 ou 443.
Solution : inspectez les listeners actifs via 'sudo ss -tulpn' sous Linux (désactivez postfix/exim inutilisés) ou 'Get-NetTCPConnection -State Listen' dans PowerShell.
Le courrier sortant vers Gmail, Microsoft 365 ou les grands FAI est rejeté 550-5.7.25 / 550-5.7.1 PTR missing
Cause : votre hôte se connecte en sortie via IPv6 sur une interface dual-stack, alors que vous n'avez configuré un enregistrement PTR que pour IPv4 et oublié l'enregistrement PTR IPv6.
Solution : définissez des enregistrements PTR concordants pour VOS DEUX adresses IPv4 et IPv6 dans le panneau de votre hébergeur, correspondant à Smtp:ServerHostName.
Le Live DNS Inspector ne trouve pas votre enregistrement TXT DKIM ou DMARC publié NXDOMAIN s2026._domainkey
Cause : de nombreux panneaux de gestion DNS ajoutent automatiquement l'apex de la zone, transformant 's2026._domainkey.company.com' en 's2026._domainkey.company.com.company.com', ou découpent les longues chaînes RSA-2048 avec des espaces parasites.
Solution : saisissez uniquement le libellé d'hôte relatif ('s2026._domainkey', 's2026ed._domainkey', '_dmarc') dans votre panneau DNS et vérifiez avec 'nslookup -type=txt s2026._domainkey.company.com'.
Let's Encrypt ACME n'émet pas de certificat ou le navigateur affiche un avertissement TLS ACME challenge failed
Cause : soit l'enregistrement DNS A/AAAA de mail.company.com ne s'est pas encore propagé, soit le port 80/443 est intercepté en amont par un autre reverse proxy.
Solution : utilisez TLS-ALPN-01 lorsque le port 443 atteint directement nextxch, ouvrez le port 80 pour HTTP-01 ou importez le certificat renouvelé de votre reverse proxy via PFX/PEM.
L'iPhone ouvre un lien d'intégration WhatsApp / Teams sans lancer immédiatement l'installation du profil dans Réglages iOS In-App WebView
Cause : iOS limite l'installation des profils système .mobileconfig exclusivement à Safari, alors que les applications de chat ouvrent d'abord les liens dans une WebView intégrée.
Solution : touchez l'icône boussole de Safari ('Ouvrir dans Safari') comme indiqué sur la page d'intégration ; les robots d'aperçu ne consomment jamais le jeton à usage unique.
Le conteneur Docker redémarre ou ne peut pas écrire sur le volume hôte monté Access to path '/var/lib/nextxch' denied
Cause : des droits de propriété stricts sur les répertoires de l'hôte ou des étiquettes SELinux sous RHEL/Rocky/Fedora empêchent le conteneur d'écrire dans les dossiers montés en bind.
Solution : utilisez des volumes Docker nommés ou ajoutez ':Z' aux montages bind sur les hôtes où SELinux est en mode enforcing.
Le client de messagerie ne peut pas se connecter en IMAP ou SMTP 535 Authentication failed / TLS required
Cause : soit le client a tenté une connexion en clair sans TLS (bloquée par RequireTlsForAuth), soit la 2FA est active sur le compte et un mot de passe d'application est requis pour l'IMAP/SMTP classique.
Solution : configurez le port 993 (SSL/TLS) et le port 465 (SSL/TLS) ou 587 (STARTTLS) avec l'adresse e-mail complète comme nom d'utilisateur, et générez un mot de passe d'application dédié lorsque la 2FA est activée.
Chapitre 07

Étapes suivantes : mises à niveau en 10 secondes, sauvegardes & migration

Une fois le flux de courrier bidirectionnel confirmé, votre serveur est prêt pour la production. Gardez ces trois procédures d'exploitation à portée de main :

# 1) In-place upgrade (preserves configuration, certificates & mailboxes):
# Linux / macOS:
curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- --update
# Windows PowerShell (Administrator):
irm https://nextxch.com/install.ps1 | iex

# 2) Backup scope (only 2 paths):
# - Config file: appsettings.Production.json (including license token)
# - Data dir:    Storage:DataDirectory (SQLite WAL / blobs / TLS certs)
#   or pg_dump / SQL Server backup when running an external DB cluster

Réponses rapides avant le premier démarrage

nextxch nécessite-t-il NSSM ou Docker Desktop sous Windows Server ?

Non. Contrairement aux serveurs qui nécessitent des wrappers de service NSSM sous Windows, nextxch s'enregistre nativement auprès du gestionnaire de contrôle des services Windows (SCM) via notre installateur .msi officiel, sans Docker Desktop, WSL2 ni Hyper-V.

nextxch a-t-il besoin d'un accès Internet au premier démarrage pour télécharger sa WebUI ou ses règles antispam ?

Non. L'ensemble de l'Admin Cockpit (/admin/), du Webmail PWA nextxch (/mail/), du moteur SpamGuard et de tous les listeners de protocoles est autonome dans le paquet vérifié par SHA-256, ce qui permet un démarrage 100 % hors ligne/isolé (air-gapped).

Pourquoi le DNS inverse (PTR) doit-il concorder avant l'envoi du premier e-mail de test ?

Les grands destinataires tels que Gmail, Microsoft 365 et les FAI européens vérifient que vos adresses IPv4 et IPv6 publiques se résolvent via PTR vers votre nom d'hôte SMTP EHLO exact (par ex. mail.company.com). L'absence d'enregistrements PTR IPv6 sur les hôtes dual-stack est la cause n° 1 des rejets 550-5.7.25.

Comment fonctionnent les mises à niveau sur place une fois le serveur en production ?

Exécutez curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- --update sous Linux/macOS ou irm https://nextxch.com/install.ps1 | iex sous Windows (ou utilisez la mise à jour en 1 clic dans /admin/). Votre appsettings.Production.json, vos certificats TLS, vos clés DKIM et votre stockage de courrier sont préservés automatiquement.