Manuale di setup · v1.0.0 Windows .msi · Linux systemd · Docker

Da un host nuovo al flusso di posta in produzione in 8 passi

Un mail server dipende più dalla sua rete che dal suo hardware: se la porta 25 è bloccata o manca il reverse DNS (PTR), i messaggi non vengono recapitati, indipendentemente dalla potenza della CPU. Questa guida accompagna, in un ordine rigoroso, dai controlli preliminari alla configurazione, al DKIM a doppia chiave, al TLS e all'onboarding mobile, fino al primo recapito verificato.

Capitolo 01

Come nextxch si avvia e arriva in produzione

nextxch riunisce ESMTP, IMAP4rev2, POP3, JMAP, Exchange ActiveSync, CalDAV/CardDAV, ManageSieve, SpamGuard, l'archivio GoBD WORM, l'Admin Cockpit (/admin/) e la Webmail PWA di nextxch (/mail/) in un unico binario memory-safe (~40-90 MB di RAM a riposo). Al primo avvio non viene scaricato nulla da GitHub e non sono necessari wrapper NSSM esterni, Redis, Rspamd o container webmail separati.

L'ordine conta: Verificare il capitolo 02 (porta 25 & DNS inverso presso il provider) prima di eseguire un solo comando, quindi seguire il capitolo 04 per la propria piattaforma e consultare il capitolo 06 ogni volta che un output differisce dallo stato atteso.
PASSI 01-02Installazione & accessoInstallare il pacchetto verificato SHA-256, aprire le porte e accedere a /admin/.
PASSO 03-05Dominio, TLS & Dual DKIMEmettere il certificato ACME/PFX e pubblicare entrambi i record DNS RSA-2048 & Ed25519.
PASSO 06-07Protezione & connessione dei dispositiviAttivare SpamGuard, IPv6 dual-stack, GoBD e i profili QR/WhatsApp con 1 clic.
PASSO 08Verifica del flusso di postaEseguire l'Outbound MX/DANE tester + un test di andata e ritorno tramite Message Trace.
Capitolo 02

Prerequisiti di sistema & rete (checklist preliminare)

Spuntare tutti i 6 punti seguenti prima dell'installazione. Quattro di essi si controllano al di fuori del server, nel pannello di controllo dell'hosting o del DNS.

Porta Protocollo / servizio Direzione Requisito e indicazioni
25 / TCPESMTP (MX server-to-server + STARTTLS/DANE)In entrata e in uscitaObbligatoria - Indispensabile per ricevere e recapitare la posta Internet.
443 / TCPHTTPS (/admin/, /mail/, JMAP, ActiveSync, DAV, MTA-STS)In entrata (+ in uscita)Obbligatoria - serve Webmail, Admin, Mobile Push, DAV, JMAP e ACME.
465 / TCPSubmission SMTPS (Implicit TLS, RFC 8314)In entrataObbligatoria - Porta di submission con TLS implicito preferita (RFC 8314).
587 / TCPSMTP Submission (STARTTLS)In entrataObbligatoria - submission STARTTLS standard per Outlook, stampanti ed ERP.
993 / TCPIMAPS (IMAP4rev2 Implicit TLS)In entrataObbligatoria - IMAP4rev2 crittografato con push IDLE senza polling.
80 / TCPHTTP (ACME HTTP-01 & Autoconfig)In entrataConsigliato (facoltativo se si usa TLS-ALPN-01 o un PFX del gateway).
4190 / TCPManageSieve (STARTTLS)In entrataFacoltativo (l'editor Sieve visuale di Webmail funziona già tramite la 443).
143 / TCPIMAP (STARTTLS)In entrataFacoltativo (preferire la porta 993 con TLS implicito).
995 / TCPPOP3S (TLS implicito)In entrataFacoltativa (solo se POP3 è attivato in Admin > Rete; disattivato per impostazione predefinita).
110 / TCPPOP3 (STLS)In entrataFacoltativa (preferire la porta 995 con TLS implicito).
Dimensione dell'installazione CPU RAM Disco & database consigliato
1 - 250 caselle di posta2 vCPU1 - 2 GBNVMe/SSD · SQLite WAL integrato + Zstandard (~40-90 MB di footprint del server).
250 - 2.500 caselle di posta4 vCPU4 - 8 GBNVMe + S3 ibrido facoltativo · PostgreSQL 18 o Microsoft SQL Server (2019-2025).
Cluster HA 2.500+8+ vCPU16+ GBNodi Active-Active su PostgreSQL 18 o SQL Server Always On + S3 Object Lock.
Capitolo 03

Scelta della piattaforma e del backend di storage

Ogni piattaforma offre esattamente lo stesso set di funzionalità. Scegliere il metodo di deployment e il backend SQL adatti al proprio team operativo.

Piattaforma Metodo Ideale per
Windows Server 2019-2025.msi / install.ps1Servizio Windows SCM nativo senza Docker né NSSM; ideale insieme a Microsoft SQL Server o per migrazioni da hMailServer.
Linux (x86_64 & ARM64)install.sh · .deb · systemdDemone systemd snello non root su server Debian, Ubuntu LTS, RHEL/Rocky o ARM64.
Docker Composenextxch/server:1.0.0Stack di container riproducibili su host Linux, VM Proxmox, Synology, UGREEN e Unraid.
macOS & Kuberneteslaunchd / Helm v3Server da ufficio Mac mini (launchd) o cluster Kubernetes active-active orizzontali.
Capitolo 04

Il tutorial in 8 passaggi: dall'installazione alla prima e-mail di test verificata

Selezionare qui sotto la piattaforma di destinazione. Ciascuno degli 8 passi indica cosa fa, mostra il comando esatto, conferma il risultato atteso ed evidenzia l'errore più comune proprio nel punto in cui si verifica.

PASSO 01

Installare il servizio & aprire le porte del firewall

Scarica il pacchetto di release, ne verifica il digest SHA-256 e registra il servizio in background e la directory dei dati persistente.

# 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
Risultato atteso: il servizio è attivo, abilitato all'avvio e in ascolto sulle porte HTTPS e di posta.
Errore frequente: se all'avvio viene segnalato 'Address already in use', un MTA preinstallato (Postfix/Exim) o un web server occupa la porta 25/80/443 -> vedere il capitolo 06 (#sym-port-bind).
PASSO 02

Verificare lo stato del servizio & accedere a /admin/

Verificare nei log il corretto avvio dei listener e accedere all'Admin Cockpit con le credenziali di amministratore impostate durante l'installazione.

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/
Risultato atteso: si apre la dashboard in tempo reale su /admin/ e mostra i listener attivi per SMTP, IMAP e HTTPS.
PASSO 03

Configurare il dominio di posta e DKIM parallelo a doppia chiave

Apra Domini & routing -> Gestisci dominio in /admin/. nextxch crea automaticamente due coppie di chiavi DKIM parallele: RSA-2048 (selettore s2026) ed Ed25519 (selettore s2026ed).

Best practice: pubblicare ENTRAMBI i record TXT nel DNS una sola volta al passo 5; in seguito è possibile cambiare la modalità di firma (RSA-2048, Ed25519 o Dual-Sign) sul server all'istante, senza attendere la propagazione DNS.
PASSO 04

Attivare il certificato TLS (ACME Let's Encrypt o PFX del gateway)

Aprire Security & Certificates -> TLS & ACME. Non appena mail.company.com si risolve nel proprio host, richiedere un certificato Let's Encrypt tramite HTTP-01 o TLS-ALPN-01 (porta 443), oppure caricare un certificato .pfx/.pem dal proprio pfSense/gateway SSL.

Risultato atteso: il ricaricamento a caldo SNI dinamico in 0 ms attiva il certificato immediatamente su HTTPS, SMTPS, IMAPS e ManageSieve senza riavvio.
PASSO 05

Pubblicare i record DNS ed eseguire la verifica DNS live

Copiare i record DNS calcolati dal DNS Advisor integrato (o esportare il file di zona BIND): MX, A/AAAA, SPF, entrambi i selettori DKIM (s2026 + s2026ed), DMARC, MTA-STS, TLS-RPT e, facoltativamente, DANE TLSA (3 1 1) e BIMI.

Risultato atteso: facendo clic su 'Verify Live DNS' compaiono badge verdi di esito positivo per MX, SPF, entrambi i selettori DKIM, DMARC e PTR.
Errore comune: molti pannelli di controllo DNS aggiungono automaticamente il dominio; inserire come host s2026._domainkey anziché s2026._domainkey.company.com -> vedi #sym-dkim-dns.
PASSO 06

Rafforzare il server prima della produzione

Registrare una passkey (WebAuthn) o la 2FA TOTP sull'account amministratore, mantenere le soglie di SpamGuard a 4.5 / 9.0 con lo Smart Greylisting attivo e attivare l'archiviazione WORM GoBD sui domini commerciali.

Risultato atteso: protezione con ban automatico, TLS obbligatorio prima dell'autenticazione e limiti di velocità in uscita proteggono automaticamente la reputazione del vostro IP.
PASSO 07

Creare la prima casella di posta & collegare i dispositivi mobili in 30 secondi

Creare la prima casella di posta utente in Account e liste, accedere su https://mail.company.com/mail/ e fare clic su 'Configurazione dispositivo' per generare un codice QR o un link di onboarding con 1 clic sicuro per i messenger, con un profilo iOS/macOS firmato CMS o Exchange ActiveSync.

Risultato atteso: iOS mostra un badge verde 'Verificato' sul profilo e sincronizza immediatamente posta, calendari, contatti e note.
PASSO 08

Confermare il recapito in entrata & in uscita tramite Live MX Tester & Message Trace

Esegua Diagnostica & log -> Outbound MX & DANE Tester verso gmail.com o un indirizzo esterno, quindi invii un'e-mail reale da /mail/ e risponda per verificare il flusso nei due sensi.

Risultato atteso: il Message Trace registra Delivered su TLS 1.3 in entrambe le direzioni e le intestazioni del destinatario esterno mostrano spf=pass, dkim=pass e dmarc=pass.
Capitolo 05

Funzionamento dietro pfSense / OPNsense, gateway SSL & reverse proxy

In caso di deployment dietro pfSense, OPNsense, Sophos o HAProxy, configurare queste tre impostazioni per una diagnostica accurata e la conservazione dell'IP reale del client:

Scenario Configurazione consigliata
Split-DNS / Hairpin-NATConfigurare in Unbound un host override Split-DNS che punti mail.company.com all'IP LAN interno, oppure attivare Pure NAT Reflection sul gateway.
Protocollo PROXY di HAProxyAttivare il protocollo PROXY v1/v2 limitato al CIDR del proxy attendibile, in modo che SPF e Auto-Ban vedano il vero IP remoto anziché l'IP del gateway.
Certificato del gatewaySincronizzare il certificato .pfx/.pem rinnovato del gateway con nextxch per le porte 25/465/587/993; il Dynamic SNI ricarica a caldo i certificati aggiornati senza downtime.
Capitolo 06

Risoluzione dei problemi per sintomo (dall'errore alla soluzione immediata)

Faccia clic qui sotto sul sintomo osservato oppure digiti parte del messaggio di errore nella casella di filtro rapido qui sopra:

Il controllo esterno delle porte segnala 'Blocked / Timeout' anche se il servizio è in esecuzione TCP 25 / 465 / 993 Timeout
Causa: entrambi gli host si trovano dietro lo stesso firewall pfSense/OPNsense senza Hairpin NAT (NAT Reflection), oppure il firewall esterno del provider cloud blocca ancora la porta 25.
Soluzione: controllare la diagnostica di rete in /admin/ (che rileva automaticamente i gateway Hairpin NAT co-ospitati) e verificare che il firewall cloud esterno consenta TCP 25, 443, 465, 587 e 993.
Il servizio non riesce a collegarsi a una porta all'avvio Address already in use (:25 / :80 / :443)
Causa principale: un MTA preinstallato (Postfix, Exim, Sendmail) su Linux oppure IIS/Nginx/Apache occupa già la porta 25, 80 o 443.
Soluzione: verificare i listener attivi con 'sudo ss -tulpn' su Linux (disattivare postfix/exim non utilizzati) o con 'Get-NetTCPConnection -State Listen' in PowerShell.
La posta in uscita verso Gmail, Microsoft 365 o grandi ISP viene rifiutata 550-5.7.25 / 550-5.7.1 PTR missing
Causa: l'host si connette in uscita via IPv6 su un'interfaccia dual-stack, mentre è stato configurato solo un record PTR per IPv4 ed è stato dimenticato il record PTR IPv6.
Soluzione: impostare nel pannello del provider di hosting record PTR corrispondenti per ENTRAMBI gli indirizzi IPv4 e IPv6, in modo che coincidano con Smtp:ServerHostName.
Il Live DNS Inspector non trova il record TXT DKIM o DMARC pubblicato NXDOMAIN s2026._domainkey
Causa: molti pannelli di controllo DNS aggiungono automaticamente l'apice della zona, trasformando 's2026._domainkey.company.com' in 's2026._domainkey.company.com.company.com', oppure spezzano le lunghe stringhe RSA-2048 con spazi superflui.
Soluzione: inserire nel pannello DNS solo l'etichetta host relativa ('s2026._domainkey', 's2026ed._domainkey', '_dmarc') e verificare con 'nslookup -type=txt s2026._domainkey.company.com'.
Let's Encrypt ACME non riesce a emettere un certificato o il browser mostra un avviso TLS ACME challenge failed
Causa principale: il record DNS A/AAAA per mail.company.com non si è ancora propagato oppure la porta 80/443 viene intercettata a monte da un altro reverse proxy.
Soluzione: usare TLS-ALPN-01 quando la porta 443 raggiunge direttamente nextxch, aprire la porta 80 per HTTP-01 oppure importare tramite PFX/PEM il certificato rinnovato del reverse proxy.
L'iPhone apre un link di onboarding WhatsApp / Teams senza avviare subito l'installazione del profilo in Impostazioni iOS In-App WebView
Causa principale: iOS limita l'installazione dei profili di sistema .mobileconfig esclusivamente a Safari, mentre le app di chat aprono i link prima in una WebView incorporata.
Soluzione: tocchi l'icona della bussola di Safari ('Apri in Safari') come indicato nella pagina di onboarding; i crawler di anteprima non consumano mai il token monouso.
Il container Docker si riavvia o non riesce a scrivere sul volume host montato Access to path '/var/lib/nextxch' denied
Causa: la proprietà rigida delle directory dell'host o le etichette SELinux su RHEL/Rocky/Fedora bloccano le scritture del container nelle cartelle montate tramite bind mount.
Soluzione: usare volumi Docker con nome oppure aggiungere ':Z' ai bind mount sugli host con SELinux in modalità enforcing.
Il client di posta non riesce ad accedere tramite IMAP o SMTP 535 Authentication failed / TLS required
Causa: il client ha tentato un login in chiaro senza TLS (bloccato da RequireTlsForAuth), oppure sull'account è attiva la 2FA ed è necessaria una password per app per IMAP/SMTP legacy.
Soluzione: configurare la porta 993 (SSL/TLS) e la porta 465 (SSL/TLS) o 587 (STARTTLS) con l'indirizzo e-mail completo come nome utente e generare una password per app dedicata quando la 2FA è attiva.
Capitolo 07

Passi successivi: aggiornamenti in 10 secondi, backup e migrazione

Una volta confermato il flusso di posta in entrambe le direzioni, il server è pronto per la produzione. Tenere a portata di mano questi tre flussi di lavoro operativi:

# 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

Risposte rapide prima del primo avvio

nextxch richiede NSSM o Docker Desktop su Windows Server?

No. A differenza dei server che su Windows richiedono wrapper di servizio NSSM, nextxch si registra in modo nativo presso il Service Control Manager (SCM) di Windows tramite il nostro installer .msi ufficiale, senza Docker Desktop, WSL2 o Hyper-V.

nextxch richiede l'accesso a Internet al primo avvio per scaricare la WebUI o le regole antispam?

No. L'intero Admin Cockpit (/admin/), la Webmail PWA di nextxch (/mail/), il motore SpamGuard e tutti i listener di protocollo sono contenuti nel pacchetto verificato con SHA-256, consentendo un avvio 100% offline/air-gapped.

Perché il reverse DNS (PTR) deve corrispondere prima di inviare la prima e-mail di prova?

I principali destinatari come Gmail, Microsoft 365 e gli ISP europei verificano che gli indirizzi IPv4 e IPv6 pubblici si risolvano tramite PTR nel nome host SMTP EHLO esatto (ad es. mail.company.com). La mancanza di record PTR IPv6 sugli host dual-stack è la causa n. 1 dei rifiuti 550-5.7.25.

Come funzionano gli aggiornamenti in-place quando il server è in produzione?

Eseguire curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- --update su Linux/macOS oppure irm https://nextxch.com/install.ps1 | iex su Windows (o usare l'updater con 1 clic in /admin/). appsettings.Production.json, certificati TLS, chiavi DKIM e archivio della posta vengono preservati automaticamente.