Manual de instalación · v1.0.0 Windows .msi · Linux systemd · Docker

De un host nuevo a un flujo de correo en producción en 8 pasos

Un servidor de correo depende más de su red que de su hardware: si el puerto 25 está bloqueado o falta el DNS inverso (PTR), los mensajes no se entregarán por mucha potencia de CPU que haya. Esta guía le lleva en estricto orden desde las comprobaciones previas, pasando por la instalación, DKIM de doble clave, TLS y la configuración móvil, hasta su primera entrega verificada.

Capítulo 01

Cómo arranca nextxch y llega a producción

nextxch reúne ESMTP, IMAP4rev2, POP3, JMAP, Exchange ActiveSync, CalDAV/CardDAV, ManageSieve, SpamGuard, el archivo GoBD WORM, el Admin Cockpit (/admin/) y nextxch Webmail PWA (/mail/) en un único binario con seguridad de memoria (~40 a 90 MB de RAM en reposo). En el primer arranque no se descarga nada de GitHub, y no se necesitan wrappers NSSM externos, Redis, Rspamd ni contenedores de webmail separados.

El orden importa: Verifique el capítulo 02 (puerto 25 y DNS inverso en su proveedor) antes de ejecutar un solo comando; después, siga el capítulo 04 para su plataforma y consulte el capítulo 06 siempre que un resultado difiera del estado esperado.
PASO 01-02Instalar e iniciar sesiónInstale el paquete verificado con SHA-256, abra los puertos e inicie sesión en /admin/.
PASO 03-05Dominio, TLS y Dual DKIMEmitir el certificado ACME/PFX y publicar los registros DNS RSA-2048 y Ed25519.
PASO 06-07Proteger y conectar dispositivosActive SpamGuard, Dual-Stack IPv6, GoBD y perfiles QR/WhatsApp con 1 clic.
PASO 08Verificar el flujo de correoEjecute el comprobador de MX/DANE saliente + una prueba de ida y vuelta mediante Message Trace.
Capítulo 02

Requisitos previos del sistema y de la red (lista de comprobación previa)

Marque los 6 puntos siguientes antes de instalar. Cuatro de ellos se controlan fuera del servidor, en el panel de control de su alojamiento o de DNS.

Puerto Protocolo / servicio Dirección Requisito y recomendación
25 / TCPESMTP (MX de servidor a servidor + STARTTLS/DANE)Entrada y salidaObligatorio - Imprescindible para recibir y entregar correo de Internet.
443 / TCPHTTPS (/admin/, /mail/, JMAP, ActiveSync, DAV, MTA-STS)Entrante (+ saliente)Obligatorio - Sirve Webmail, Admin, Mobile Push, DAV, JMAP y ACME.
465 / TCPEnvío SMTPS (TLS implícito, RFC 8314)EntranteObligatorio - Puerto de envío preferido con TLS implícito (RFC 8314).
587 / TCPEnvío SMTP (STARTTLS)EntranteObligatorio - Envío estándar con STARTTLS para Outlook, impresoras y ERP.
993 / TCPIMAPS (IMAP4rev2 TLS implícito)EntranteObligatorio - IMAP4rev2 cifrado con push IDLE sin sondeo.
80 / TCPHTTP (ACME HTTP-01 & Autoconfig)EntranteRecomendado (opcional si se usa TLS-ALPN-01 o PFX del gateway).
4190 / TCPManageSieve (STARTTLS)EntranteOpcional (el editor visual de Sieve del Webmail ya funciona a través del 443).
143 / TCPIMAP (STARTTLS)EntranteOpcional (es preferible el puerto 993 con TLS implícito).
995 / TCPPOP3S (TLS implícito)EntranteOpcional (solo si POP3 está activado en Admin > Red; desactivado de forma predeterminada).
110 / TCPPOP3 (STLS)EntranteOpcional (preferible el puerto 995 con TLS implícito).
Tamaño del despliegue CPU RAM Disco y base de datos recomendada
1 - 250 buzones2 vCPU1 - 2 GBNVMe/SSD · SQLite WAL integrado + Zstandard (~40-90 MB de huella del servidor).
250 - 2500 buzones4 vCPU4 - 8 GBNVMe + S3 híbrido opcional · PostgreSQL 18 o Microsoft SQL Server (2019-2025).
Clúster de alta disponibilidad para más de 25008+ vCPU16+ GBNodos Active-Active en PostgreSQL 18 o SQL Server Always On + S3 Object Lock.
Capítulo 03

Elección de plataforma y backend de almacenamiento

Todas las plataformas ofrecen exactamente las mismas funciones. Elija el método de implementación y el backend SQL que mejor se adapten a su equipo de operaciones.

Plataforma Método Ideal para
Windows Server 2019-2025.msi / install.ps1Servicio SCM nativo de Windows sin Docker ni NSSM; ideal junto a Microsoft SQL Server o en migraciones desde hMailServer.
Linux (x86_64 & ARM64)install.sh · .deb · systemdDemonio systemd ligero sin root en servidores Debian, Ubuntu LTS, RHEL/Rocky o ARM64.
Docker Composenextxch/server:1.0.0Stacks de contenedores reproducibles en hosts Linux, VM de Proxmox, Synology, UGREEN y Unraid.
macOS & Kuberneteslaunchd / Helm v3Servidores de oficina Mac mini (launchd) o clústeres Kubernetes Active-Active horizontales.
Capítulo 04

Tutorial en 8 pasos: de la instalación al primer correo de prueba verificado

Seleccione abajo su plataforma de destino. Cada uno de los 8 pasos indica qué hace, muestra el comando exacto, confirma el resultado esperado y señala el error más común justo donde se produce.

PASO 01

Instalar el servicio y abrir los puertos del firewall

Descarga el paquete de la versión, verifica su resumen SHA-256 y registra el servicio en segundo plano y el directorio de datos 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
Resultado esperado: el servicio está activo, habilitado al arrancar y escuchando en HTTPS y en los puertos de correo.
Error frecuente: si al arrancar aparece 'Address already in use', un MTA preinstalado (Postfix/Exim) o un servidor web ocupa el puerto 25/80/443 -> consulte el capítulo 06 (#sym-port-bind).
PASO 02

Verificar el estado del servicio e iniciar sesión en /admin/

Confirme en los registros que los listeners se inician sin errores e inicie sesión en el Admin Cockpit con las credenciales de administrador definidas durante la instalación.

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/
Resultado esperado: el panel en tiempo real en /admin/ se abre y muestra listeners activos para SMTP, IMAP y HTTPS.
PASO 03

Configurar el dominio de correo y DKIM paralelo de doble clave

Abra Dominios y enrutamiento -> Gestionar dominio en /admin/. nextxch aprovisiona automáticamente dos pares de claves DKIM paralelos: RSA-2048 (selector s2026) y Ed25519 (selector s2026ed).

Buena práctica: publique AMBOS registros TXT en el DNS una sola vez en el paso 5; después podrá cambiar los modos de firma (RSA-2048, Ed25519 o Dual-Sign) en el servidor al instante, sin esperar a la propagación DNS.
PASO 04

Activar el certificado TLS (ACME Let's Encrypt o PFX del gateway)

Abra Security & Certificates -> TLS & ACME. En cuanto mail.company.com se resuelva a su host, solicite un certificado de Let's Encrypt mediante HTTP-01 o TLS-ALPN-01 (puerto 443), o cargue un certificado .pfx/.pem desde su pfSense/gateway SSL.

Resultado esperado: la recarga en caliente dinámica de SNI en 0 ms activa el certificado de inmediato en HTTPS, SMTPS, IMAPS y ManageSieve sin reiniciar.
PASO 05

Publicar registros DNS y ejecutar la verificación DNS en vivo

Copie los registros DNS calculados del DNS Advisor integrado (o exporte el archivo de zona BIND): MX, A/AAAA, SPF, ambos selectores DKIM (s2026 + s2026ed), DMARC, MTA-STS, TLS-RPT y, opcionalmente, DANE TLSA (3 1 1) y BIMI.

Resultado esperado: al hacer clic en 'Verify Live DNS' se muestran distintivos verdes de aprobación para MX, SPF, ambos selectores DKIM, DMARC y PTR.
Error frecuente: muchos paneles de control DNS añaden su dominio automáticamente; introduzca s2026._domainkey como host en lugar de s2026._domainkey.company.com -> consulte #sym-dkim-dns.
PASO 06

Refuerce el servidor antes de pasar a producción

Registre una llave de acceso (WebAuthn) o TOTP 2FA en su cuenta de administrador, mantenga los umbrales de SpamGuard en 4.5 / 9.0 con el greylisting inteligente activo y active el archivado WORM GoBD en los dominios comerciales.

Resultado esperado: la protección de bloqueo automático, el TLS obligatorio antes de la autenticación y los límites de tasa salientes protegen automáticamente la reputación de su IP.
PASO 07

Crear el primer buzón y conectar dispositivos móviles en 30 segundos

Cree su primer buzón de usuario en Cuentas y listas, inicie sesión en https://mail.company.com/mail/ y haga clic en 'Configuración de dispositivos' para generar un código QR o un enlace de incorporación con 1 clic apto para mensajería, con un perfil iOS/macOS firmado con CMS o Exchange ActiveSync.

Resultado esperado: iOS muestra un distintivo verde 'Verified' en el perfil y sincroniza de inmediato correo, calendarios, contactos y notas.
PASO 08

Confirmar la entrega entrante y saliente mediante el MX Tester en vivo y Message Trace

Ejecute Diagnóstico y registros -> Outbound MX & DANE Tester contra gmail.com o una dirección externa; después envíe un correo real desde /mail/ y responda para verificar el flujo en ambos sentidos.

Resultado esperado: Message Trace registra Delivered sobre TLS 1.3 en ambas direcciones, y las cabeceras del receptor externo muestran spf=pass, dkim=pass y dmarc=pass.
Capítulo 05

Funcionamiento detrás de pfSense / OPNsense, gateways SSL y proxies inversos

Si despliega detrás de pfSense, OPNsense, Sophos o HAProxy, configure estos tres ajustes para obtener diagnósticos precisos y conservar la IP real del cliente:

Escenario Configuración recomendada
Split-DNS / Hairpin-NATConfigure una anulación de host Split-DNS en Unbound que apunte mail.company.com a la IP interna de la LAN, o active Pure NAT Reflection en su gateway.
Protocolo PROXY de HAProxyActive el protocolo PROXY v1/v2 restringido al CIDR de su proxy de confianza, para que SPF y Auto-Ban vean la IP remota real en lugar de la IP del gateway.
Certificado del gatewaySincronice el certificado .pfx/.pem renovado de su gateway con nextxch para los puertos 25/465/587/993; el SNI dinámico recarga en caliente los certificados actualizados sin tiempo de inactividad.
Capítulo 06

Solución de problemas por síntoma (del error a la solución inmediata)

Haga clic a continuación en el síntoma que observa o escriba parte del mensaje de error en el cuadro de filtro rápido de arriba:

El comprobador externo de puertos informa 'Blocked / Timeout' aunque el servicio está en ejecución TCP 25 / 465 / 993 Timeout
Causa: o bien ambos hosts están detrás del mismo firewall pfSense/OPNsense sin Hairpin NAT (NAT Reflection), o bien el firewall externo de su proveedor de nube sigue bloqueando el puerto 25.
Solución: revise el Diagnóstico de red en /admin/ (que detecta automáticamente gateways Hairpin NAT en el mismo host) y verifique que su firewall externo en la nube permita TCP 25, 443, 465, 587 y 993.
El servicio no puede enlazar un puerto al arrancar Address already in use (:25 / :80 / :443)
Causa: un MTA preinstalado (Postfix, Exim, Sendmail) en Linux o IIS/Nginx/Apache ya ocupa el puerto 25, 80 o 443.
Solución: inspeccione los listeners activos con 'sudo ss -tulpn' en Linux (desactive postfix/exim no utilizados) o con 'Get-NetTCPConnection -State Listen' en PowerShell.
El correo saliente a Gmail, Microsoft 365 o grandes ISP es rechazado 550-5.7.25 / 550-5.7.1 PTR missing
Causa: su host establece conexiones salientes por IPv6 en una interfaz Dual-Stack, pero usted solo configuró un registro PTR para IPv4 y olvidó el registro PTR de IPv6.
Solución: configure en el panel de su proveedor de alojamiento registros PTR coincidentes para AMBAS direcciones, IPv4 e IPv6, de modo que coincidan con Smtp:ServerHostName.
El Live DNS Inspector no encuentra su registro TXT de DKIM o DMARC publicado NXDOMAIN s2026._domainkey
Causa: muchos paneles de control DNS añaden automáticamente el ápice de la zona, de modo que 's2026._domainkey.company.com' se convierte en 's2026._domainkey.company.com.company.com', o dividen las cadenas RSA-2048 largas con espacios sobrantes.
Solución: introduzca solo la etiqueta de host relativa ('s2026._domainkey', 's2026ed._domainkey', '_dmarc') en su panel DNS y verifique con 'nslookup -type=txt s2026._domainkey.company.com'.
Let's Encrypt ACME no emite un certificado o el navegador muestra una advertencia TLS ACME challenge failed
Causa: o bien el registro DNS A/AAAA de mail.company.com aún no se ha propagado, o bien otro proxy inverso intercepta antes los puertos 80/443.
Solución: utilice TLS-ALPN-01 cuando el puerto 443 llegue directamente a nextxch, abra el puerto 80 para HTTP-01 o importe el certificado renovado de su proxy inverso mediante PFX/PEM.
El iPhone abre un enlace de incorporación de WhatsApp / Teams sin iniciar de inmediato la instalación del perfil en Ajustes iOS In-App WebView
Causa: iOS restringe la instalación de perfiles de sistema .mobileconfig exclusivamente a Safari, mientras que las aplicaciones de chat abren primero los enlaces en un WebView integrado.
Solución: toque el icono de la brújula de Safari ('Abrir en Safari') como se indica en la página de incorporación; los rastreadores de vista previa nunca consumen el token de un solo uso.
El contenedor Docker se reinicia o no puede escribir en el volumen del host montado Access to path '/var/lib/nextxch' denied
Causa: una propiedad estricta de los directorios del host o las etiquetas SELinux en RHEL/Rocky/Fedora bloquean las escrituras del contenedor en carpetas montadas mediante bind.
Solución: use volúmenes de Docker con nombre o añada ':Z' a los bind mounts en hosts con SELinux en modo enforcing.
El cliente de correo no puede iniciar sesión por IMAP o SMTP 535 Authentication failed / TLS required
Causa: o bien el cliente intentó un inicio de sesión en texto plano sin TLS (bloqueado por RequireTlsForAuth), o bien la cuenta tiene 2FA activa y se requiere una contraseña de aplicación para IMAP/SMTP heredados.
Solución: configure el puerto 993 (SSL/TLS) y el puerto 465 (SSL/TLS) o 587 (STARTTLS) con la dirección de correo completa como nombre de usuario, y genere una contraseña de aplicación dedicada cuando 2FA esté activada.
Capítulo 07

Próximos pasos: actualizaciones en 10 segundos, copias de seguridad y migración

Una vez confirmado el flujo de correo en ambos sentidos, su servidor está listo para producción. Tenga a mano estos tres flujos de trabajo operativos:

# 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

Respuestas rápidas antes del primer arranque

¿nextxch necesita NSSM o Docker Desktop en Windows Server?

No. A diferencia de los servidores que requieren envoltorios de servicio NSSM en Windows, nextxch se registra de forma nativa en el Administrador de control de servicios (SCM) de Windows mediante nuestro instalador .msi oficial, sin Docker Desktop, WSL2 ni Hyper-V.

¿Necesita nextxch acceso a internet en el primer arranque para descargar su WebUI o sus reglas de spam?

No. Todo el Admin Cockpit (/admin/), el Webmail PWA de nextxch (/mail/), el motor SpamGuard y todos los listeners de protocolo están contenidos en el paquete verificado con SHA-256, lo que permite un arranque 100 % sin conexión/air-gapped.

¿Por qué el DNS inverso (PTR) debe coincidir antes de enviar el primer correo de prueba?

Los grandes receptores como Gmail, Microsoft 365 y los ISP europeos verifican que sus direcciones IPv4 e IPv6 públicas se resuelvan mediante PTR a su nombre de host SMTP EHLO exacto (p. ej., mail.company.com). La falta de registros PTR de IPv6 en hosts Dual-Stack es la causa n.º 1 de los rechazos 550-5.7.25.

¿Cómo funcionan las actualizaciones in situ una vez que el servidor está en producción?

Ejecute curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- --update en Linux/macOS o irm https://nextxch.com/install.ps1 | iex en Windows (o use el actualizador de 1 clic en /admin/). Su appsettings.Production.json, los certificados TLS, las claves DKIM y el almacén de correo se conservan automáticamente.