Stalwart vs Postfix: instalar servidor de correo en VPS
Analizamos si Stalwart reemplaza a Postfix y Dovecot en un solo binario Rust. Comparamos rendimiento, limitaciones actuales y cuándo optar por Mailcow para producción.
Qué consolida Stalwart en un único binario
Stalwart es un servidor de correo que se ejecuta en un único VPS como un solo binario escrito en Rust. Responde a SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV y WebDAV desde el mismo proceso, e incluye su propio filtro de spam, su propio almacén de mensajes y su propio cliente ACME. Una pila convencional realiza el mismo trabajo con Postfix, Dovecot, Rspamd, una base de datos para cuentas y una herramienta de certificados independiente. Stalwart reemplaza todo esto con una única unidad de servicio y un archivo de configuración en /etc/stalwart/config.json.
Cada cifra, nombre de configuración y comando a continuación se cita de la propia documentación de Stalwart, las páginas de versiones y el script de instalación, consultados el 28 de agosto de 2026, para la versión v0.16.19 (publicada el 24 de agosto de 2026). Estos son comandos para ejecutar en su propio servidor. Cada uno va seguido de la comprobación que indica si el proceso fue exitoso.
Stalwart tiene una licencia dual bajo la GNU Affero General Public License v3.0 (AGPL-3.0) y la Stalwart Enterprise License v2. Algunas funciones son exclusivas de la versión empresarial. La lista de endpoints HTTP documentada marca /scim/v2/* de esa manera. Lea los términos de la licencia antes de planificar una implementación basada en una función que no haya probado usted mismo.
Un único binario supone una reducción real en las piezas móviles. No es una reducción en los dos factores que determinan si su correo llega a su destino.
El puerto 25 y la reputación DNS no dependen del software que utilice
El puerto TCP 25 de salida es la primera barrera. Muchos proveedores de VPS lo bloquean por defecto en las cuentas nuevas; un puerto 25 bloqueado significa que su servidor solo puede comunicarse consigo mismo y con nadie más. Pruébelo antes de instalar nada.
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 alt1.aspmx.l.google.com 25Un resultado correcto muestra Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded! en aproximadamente un segundo. Un puerto bloqueado se queda esperando durante los cinco segundos completos y luego muestra nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out, debido a que los paquetes son descartados en un punto anterior de la red y no se recibe ningún paquete de reinicio. Si observa esto, abra un ticket de soporte con su proveedor. Ningún servidor de correo puede evitar un paquete descartado.
La segunda barrera es la percepción que tienen las redes receptoras de su dirección IP y su dominio. Esto implica el DNS inverso (PTR) de la IP, SPF, DKIM, DMARC y el historial de envío del bloque de direcciones en el que se encuentra. La página de configuración de DNS de Stalwart es directa sobre dónde se realiza este trabajo: los registros DNS inversos "normalmente los configura el proveedor de hosting, no el propio Stalwart". Lo mismo ocurre con el resto de la categoría. Reside en su zona DNS y en el panel de control de su proveedor, no en el servidor de correo.
Por lo tanto, esta página no vuelve a explicar esos registros. Tenemos una que sí lo hace: Configuración de SPF, DKIM y DMARC para todo lo que envía correo. Si aún no ha decidido si desea gestionar su propio correo, comience por nuestro análisis honesto sobre si todavía vale la pena alojar el correo electrónico uno mismo. Elegir Stalwart no cambia nada de ese cálculo.
Requisitos de un VPS pequeño para ejecutar un servidor de correo Stalwart
La página de requisitos del sistema de Stalwart, consultada el 28 de agosto de 2026, indica estas cifras. El consumo de memoria en reposo es de unos 100 MB. Una implementación pequeña de 5 a 10 usuarios funciona correctamente con 1 GB de RAM. Una configuración de bajo tráfico para unos 5 usuarios funciona con un solo núcleo de CPU, y la página añade que "a medida que aumenten la concurrencia y la actividad, serán necesarios más núcleos de CPU para mantener una latencia baja y un alto rendimiento". El límite predeterminado es de 8,192 conexiones simultáneas en todos los servicios, y es configurable.
Esa página no indica un tamaño mínimo de disco, por lo que debe dimensionar el disco según el correo que espera almacenar, además de un margen para la compactación del almacén.
Tres rutas de salida deben funcionar, o el servidor parecerá estar roto por motivos ajenos al correo. Descarga el paquete de la interfaz web desde https://github.com/stalwartlabs/webui/releases/latest/. Contacta con https://acme-v02.api.letsencrypt.org/directory para los certificados. Requiere DNS en los puertos 53 UDP y TCP para las consultas de registros MX y de autenticación. Un firewall de salida restrictivo que bloquee la primera ruta dejará un servidor de correo en funcionamiento pero sin interfaz de administración.
Instale una versión específica, no la "latest"
El instalador oficial es un script de shell. Léalo antes de ejecutarlo.
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.shLeer ese script el 28 de agosto de 2026 muestra exactamente lo que hace. Crea una cuenta de servicio stalwart y los directorios que necesita. Luego descarga desde https://github.com/stalwartlabs/stalwart/releases/latest/download. El binario se aloja en /usr/local/bin/stalwart con modo 0755. La configuración va a /etc/stalwart/config.json, los datos a /var/lib/stalwart y los registros a /var/log/stalwart; los tres directorios tienen modo 0750 y son propiedad de stalwart. Se escribe un archivo de entorno en /etc/stalwart/stalwart.env con modo 0640, propiedad de root:stalwart. El script acepta un prefijo de instalación opcional y un flag --fdb para la compilación de FoundationDB. No acepta ningún argumento de versión.
Ese último punto es importante. El script siempre descarga la versión más reciente, por lo que dos servidores instalados con una semana de diferencia no ejecutan el mismo código. Fije el binario usted mismo inmediatamente después; este es también el procedimiento de actualización que indican las notas de la versión v0.16.19: "Si está actualizando desde la v0.16.x, reemplace el binario (o ejecute docker pull)".
STALWART_TAG=v0.16.19
curl -fsSLO "https://github.com/stalwartlabs/stalwart/releases/download/${STALWART_TAG}/stalwart-x86_64-unknown-linux-gnu.tar.gz"
tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz
sudo systemctl stop stalwart
sudo install -m 0755 -o root -g root stalwart /usr/local/bin/stalwart
sudo systemctl start stalwart
systemctl is-active stalwartsystemctl is-active stalwart debería mostrar active. Si muestra cualquier otra cosa, lea journalctl -u stalwart -n 50. Cada paquete de versión se distribuye con un conjunto .sigstore.json correspondiente, por lo que la firma de la descarga es verificable antes de instalarla.
La unidad que escribe el script se ejecuta como User=stalwart y establece AmbientCapabilities=CAP_NET_BIND_SERVICE. Esa capacidad es la razón por la cual una cuenta sin privilegios puede enlazar los puertos 25, 443, 465 y 993. Si escribe su propia unidad más adelante y omite esa línea, el servicio fallará al iniciar, ya que un usuario normal no puede enlazar un puerto inferior a 1024.
Dónde se imprime la primera contraseña de administrador
Stalwart se inicia en modo de arranque (bootstrap) y escribe una contraseña temporal de 16 caracteres en el registro del servicio una sola vez.
sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'El asistente de configuración escucha en HTTP sin cifrar en el puerto 8080, por lo que no debe exponer ese puerto. En su lugar, cree un túnel desde su equipo local mediante SSH:
ssh -N -L 8080:127.0.0.1:8080 you@your-vpsA continuación, abra http://127.0.0.1:8080/admin e inicie sesión como admin con la contraseña del registro. El asistente solicita el nombre de host del servidor, el dominio de correo predeterminado, TLS, el almacenamiento, el directorio de cuentas, el registro y la gestión de DNS. Reinicie el servicio al finalizar y utilice https://<your-host>/admin a partir de ese momento.
Si la contraseña ha desaparecido del registro por desplazamiento, establezca una fija. /etc/stalwart/stalwart.env incluye entradas comentadas precisamente para esto, incluyendo STALWART_RECOVERY_ADMIN=admin:changeme, STALWART_RECOVERY_MODE=true y STALWART_RECOVERY_MODE_PORT (predeterminado 8080). Quite los comentarios, reinicie, inicie sesión y vuelva a comentar la entrada. La página de endurecimiento de Stalwart indica mantener esa credencial solo para emergencias y nunca iniciar sesión en IMAP, JMAP o WebDAV con una cuenta de administrador.
La misma página enumera qué escuchas mantener: el puerto 25 para SMTP entrante, 465 para envío con TLS implícito, 993 para IMAPS y 443 para todo lo relacionado con HTTP. Clasifica los puertos 587, 143, 4190, 110, 995 y 8080 como no esenciales y recomienda desactivar el 8080 una vez completada la configuración.
Ejecución bajo Docker con una etiqueta fijada
La imagen documentada es stalwartlabs/stalwart. La etiqueta v0.16.19 estaba disponible en Docker Hub el 28 de agosto de 2026, junto con una variante -alpine. Fije la versión de parche, no la etiqueta flotante v0.16, por la misma razón que con el binario anterior.
services:
stalwart:
image: stalwartlabs/stalwart:v0.16.19
container_name: stalwart
restart: unless-stopped
ports:
- "25:25"
- "465:465"
- "993:993"
- "443:443"
- "127.0.0.1:8080:8080"
volumes:
- stalwart-etc:/etc/stalwart
- stalwart-data:/var/lib/stalwart
volumes:
stalwart-etc:
stalwart-data:Ese archivo es el comando docker run documentado escrito como Compose, omitiendo los puertos de escucha no esenciales y vinculando el puerto de configuración a localhost. Inícielo y lea la misma línea de arranque:
docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'La página de Docker también documenta -e STALWART_RECOVERY_ADMIN=admin:mySecretPass como la forma de establecer una credencial fija al inicio, que es la clave environment: en Compose si prefiere esto a leer los registros.
La lista completa de puertos documentados y por qué este archivo es más corto
La página de Docker de Stalwart publica los puertos 443, 8080, 25, 587, 465, 143, 993, 110, 995 y 4190. Su página de endurecimiento (hardening) califica los puertos 587, 143, 110, 995 y 4190 como no esenciales, y recomienda deshabilitar el 8080 tras la configuración. Añada únicamente los puertos que sus clientes realmente necesiten. Si un teléfono requiere envío mediante STARTTLS, publique el 587. Si sus usuarios crean reglas Sieve desde un cliente de escritorio, publique el 4190.
Si no está familiarizado con Compose, nuestra guía de Docker Compose para un VPS cubre la estructura de archivos y el modelo de volúmenes con nombre que utiliza este ejemplo. Una advertencia que afecta especialmente a los servidores de correo: Docker publica puertos escribiendo sus propias reglas de firewall, y esas reglas se evalúan antes que las de ufw, por lo que ufw deny 8080 no cierra un puerto publicado por Compose. Vincular a 127.0.0.1 en el mapeo de puertos es lo que realmente lo cierra; por eso el archivo anterior hace esto y el túnel SSH sigue siendo aplicable.
TLS sin certbot y lo que esto implica
Stalwart implementa ACME (automatic certificate management environment) de forma nativa, por lo que no requiere certbot ni ganchos de renovación. La documentación enumera cuatro métodos de validación. HTTP-01 responde a una solicitud de desafío en el puerto 80. TLS-ALPN-01 presenta un certificado diseñado específicamente en el puerto 443 utilizando el protocolo ALPN propio de ACME. DNS-01 publica registros TXT temporales y es uno de los dos métodos capaces de emitir certificados comodín (wildcards). DNS-PERSIST-01 utiliza registros TXT de autorización de larga duración en lugar de escribir uno nuevo en cada renovación.
El inconveniente es que Stalwart requiere el control exclusivo del puerto. TLS-ALPN-01 funciona completando el protocolo de enlace TLS por sí mismo, por lo que no puede ejecutarse detrás de un reverse proxy que realice la terminación TLS. Si nginx o Caddy ya ocupan el puerto 443 en ese servidor, debe configurar Stalwart para usar DNS-01 o asignarle su propia dirección IP.
DANE y MTA-STS, y los valores predeterminados que debe conocer
Ambos se configuran según la estrategia TLS en el objeto MtaTlsStrategy, bajo Settings, MTA, Outbound, TLS Strategies en la interfaz web. El campo dane tiene como valor predeterminado optional, que intenta la validación DANE cuando el destinatario publica registros TLSA y recurre al STARTTLS ordinario cuando no lo hace. Si se establece en require, la entrega solo procede si existe un registro TLSA verificable. El campo mtaSts se comporta de la misma manera, con el valor predeterminado optional. Los tiempos de espera relacionados son tlsTimeout (3 minutos por defecto) y mtaStsTimeout (5 minutos por defecto).
En el lado entrante, Stalwart puede publicar su propia política MTA-STS en https://mta-sts.<domain>/.well-known/mta-sts.txt, lo cual requiere que el puerto 443 esté abierto. El singleton MtaSts tiene mode (valor predeterminado testing), maxAge (valor predeterminado 7 días) y mxHosts, que recurre a los nombres de host de su certificado TLS cuando está vacío. Debe proporcionar dos registros DNS: un CNAME mta-sts que apunte al host de correo y un registro TXT _mta-sts que contenga el identificador de la política.
dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txtLa búsqueda TXT debería devolver una cadena v=STSv1; id=... y el comando curl debería devolver el cuerpo de la política. Si curl no devuelve nada, el puerto 443 está cerrado o el certificado para mta-sts.example.org nunca se emitió.
Mantenga mode en testing hasta que ambas comprobaciones sean exitosas. Una política en modo enforce con un certificado roto impide que otros servidores le entreguen correos, y se enterará por sus usuarios en lugar de por un registro. DANE tiene una trampa similar: requiere una zona firmada con DNSSEC, y un registro TLSA que ancle el certificado hoja debe volver a publicarse cada vez que ACME realice una renovación. Ancle la CA emisora en su lugar, o acepte la tarea de renovación.
El cifrado en reposo no es cifrado de extremo a extremo
Esta es la funcionalidad que se interpreta mal con mayor frecuencia, por lo que aquí se detalla exactamente lo que dice la documentación. Los mensajes en texto plano de cada usuario se cifran automáticamente mediante su certificado OpenPGP o S/MIME antes de que los mensajes se escriban en el disco. encryptAtRest está habilitado por defecto y se aplica a los mensajes que llegan a través de SMTP o LMTP, siempre que el destinatario haya registrado una clave de cifrado. encryptOnAppend está desactivado por defecto, "lo que deja los mensajes añadidos sin cambios para que los clientes mantengan el control total sobre el contenido que almacenan". OpenPGP utiliza PGP/MIME en lugar del antiguo PGP/Inline, con AES-256 o AES-128. Stalwart no genera claves: los usuarios exportan una clave pública en formato ASCII-armored y la registran como un objeto PublicKey en Account, Public Keys.
Por lo tanto, protege ante el robo de una imagen de disco, el robo de una copia de seguridad y ante un operador que lea el almacenamiento tras la entrega. Sin la clave privada, los bytes almacenados son ilegibles y el administrador tampoco puede descifrarlos.
No protege el mensaje en tránsito. Un mensaje cruza internet bajo el protocolo TLS que los dos servidores hayan acordado, llega en texto plano y Stalwart lo cifra en ese momento. El remitente, el proveedor del remitente y cualquier salto que haya eliminado TLS ya han visto el texto plano.
Vale la pena exponer claramente tres limitaciones adicionales. Sus carpetas de Enviados y Borradores son escritas por su cliente, lo cual es una operación de añadido, y encryptOnAppend está desactivado por defecto, por lo que estos permanecen sin cifrar a menos que usted lo modifique. La documentación que consulté el 28 de agosto de 2026 describe únicamente el contenido de los mensajes y no indica que los datos del sobre, las cabeceras o las entradas del índice estén cifrados, así que no asuma que lo están. Tampoco indica que los mensajes almacenados antes de que usted suba una clave sean re-cifrados, así que asuma que no lo son y verifíquelo. Tampoco se especifica si la búsqueda de texto completo sigue funcionando en cuerpos cifrados. Pruebe esto en una cuenta desechable antes de garantizárselo a nadie.
Y si un usuario pierde su clave privada, su correo se pierde. No existe una ruta de recuperación, por diseño.
WKD es una tarea de servidor web, no de servidor de correo
WKD (Web Key Directory) es la otra mitad de la historia de OpenPGP y resuelve un problema distinto. Publica su clave pública en una URL HTTPS fija bajo su dominio para que el cliente de correo del remitente pueda encontrarla y cifrar el mensaje antes de que salga de su equipo. Eso es cifrado de extremo a extremo. El cifrado en reposo de Stalwart se refiere a la copia almacenada en su disco. Configurar uno no le proporciona el otro.
Stalwart no sirve WKD. Sus endpoints HTTP documentados, consultados el 28 de agosto de 2026, enumeran rutas conocidas para jmap, caldav, carddav, oauth-authorization-server, openid-configuration, acme-challenge, mta-sts.txt, mail-v1.xml y autoconfig. No existe una ruta openpgpkey. Sírvalo desde un servidor web estático convencional.
La especificación define dos diseños. El método avanzado utiliza https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. El método directo utiliza https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. Esa cadena de 32 caracteres es el SHA-1 de la parte local en minúsculas codificada en z-base-32, razón por la cual nunca debe crear estos nombres de archivo manualmente. GnuPG los genera por usted.
gpg --export --armor you@example.org > you.asc
gpg-wks-client --print-wkd-url you@example.org
gpg-wks-client --install-key you.asc you@example.org--print-wkd-url imprime la URL que un cliente consultará, utilizando el formato de subdominio. --install-key escribe la clave en un árbol de directorios local que refleja el diseño WKD, bajo un directorio de nivel superior llamado openpgpkey por defecto y que puede cambiarse con -C dir. Copie ese árbol en su raíz web, añada el archivo policy requerido junto al directorio hu (un archivo vacío es válido) y consulte su propia URL con curl para confirmar que devuelve los bytes de la clave y no un error 404.
Almacenamiento en un único VPS
Stalwart divide el almacenamiento en cuatro roles: un almacén de datos para registros estructurados como el estado del buzón, un almacén de blobs para bytes de mensajes sin procesar y archivos adjuntos, un almacén de búsqueda para indexación de texto completo y un almacén en memoria para limitadores de tasa, tokens de autenticación y datos de sesión. Cada uno puede apuntar a un backend diferente. La lista de compatibilidad incluye RocksDB, FoundationDB, PostgreSQL, MySQL, SQLite, almacenamiento de objetos compatible con S3, Azure Blob Storage, Redis, ElasticSearch y Meilisearch.
En un solo VPS, la respuesta es breve. La documentación denomina a RocksDB "el backend recomendado para instalaciones de un solo nodo de Stalwart debido a su velocidad y fiabilidad". Redis solo es compatible como almacén en memoria y no puede ser el almacén de datos ni el almacén de blobs, por lo que no se requiere un contenedor de Redis independiente para comenzar. Mueva el almacén de blobs a S3 más adelante si los buzones superan la capacidad del disco.
Las copias de seguridad siguen al backend. Para bases de datos externas, utilice el procedimiento propio de dicha base de datos. Para las integradas, el FAQ indica copiar el directorio /var/lib/stalwart. Realice esta operación con el servicio detenido, o bien mediante una instantánea del sistema de archivos o del volumen. Una copia a nivel de archivo de un almacén clave-valor en ejecución puede capturarlo a mitad de una escritura, y no se dará cuenta hasta que intente restaurarlo.
El filtro de spam que reemplaza a Rspamd
El filtrado se ejecuta dentro del mismo proceso, por lo que no hay un segundo daemon que mantener activo. El clasificador se configura en el singleton SpamClassifier bajo Settings, Spam Filter, Classifier. Utiliza el algoritmo FTRL-Proximal con hashing de características. FtrlFh es el valor predeterminado recomendado para la mayoría de las implementaciones. FtrlCcfh cambia a hashing de características cuckoo para reducir las colisiones de hash y está orientado a implementaciones a gran escala. El entrenamiento es continuo: cuando los usuarios marcan un mensaje como spam o ham, esa etiqueta se incorpora directamente a decisiones futuras.
Alrededor del clasificador se encuentran las listas de bloqueo DNS, el greylisting, la detección de phishing, los spam traps y Pyzor, además de la opción de invocar a SpamAssassin mediante milter si tiene reglas a las que no desea renunciar.
Cuándo mailcow sigue siendo la respuesta correcta
Stalwart no tiene webmail. Esa es la carencia más importante y no hay comparación. La documentación de mailcow, consultada el 28 de agosto de 2026, enumera dieciséis componentes, incluido SOGo, que ofrece a sus usuarios una bandeja de entrada en el navegador y una interfaz CalDAV y CardDAV desde el primer momento. La hoja de ruta de Stalwart del 20 de junio de 2025 indica que un webmail integrado está "en nuestros planes, pero no es nuestra prioridad inmediata", y que se desarrollará en Rust con Dioxus después de la versión 1.0, "probablemente en algún momento de 2026". A fecha de 28 de agosto de 2026, el blog del proyecto no contiene ninguna publicación que lo anuncie. Por lo tanto, con Stalwart, usted debe desplegar Roundcube por su cuenta o pedir a cada usuario que configure un cliente de correo.
Stalwart sí dispone de una interfaz de administración web, por lo que esa no es la carencia que la gente espera. La segunda carencia es la madurez de la versión. El FAQ indica que Stalwart se encuentra en la fase 0.x y que el diseño de los datos y la configuración pueden cambiar antes de la v1.0, lo que puede requerir migraciones. La propia publicación del proyecto de junio de 2026 se titula "Cero informes de errores abiertos: El camino hacia Stalwart 1.0", lo que indica su estado: cerca, pero aún no ahí.
La tercera carencia es la que nadie incluye en una lista de características. Postfix, Dovecot y Rspamd cuentan con una década de respuestas documentadas. A las dos de la mañana, con correo en cola y usuarios esperando, una búsqueda que devuelve una cadena de error coincidente vale más que una arquitectura elegante. Si esa es su situación, nuestra guía de instalación de mailcow recorre toda la pila de principio a fin y hará que la noche sea más corta.
Elija Stalwart cuando desee un único binario, un único archivo de configuración y JMAP, y se sienta cómodo siendo un usuario pionero. Elija mailcow cuando necesite webmail hoy mismo y un gran volumen de respuestas existentes.
Migración de correo existente
La ruta genérica es IMAP a IMAP mediante imapsync, herramienta que es agnóstica respecto al software que ejecutan ambos extremos. Realice primero una ejecución de prueba.
imapsync --dry \
--host1 old.example.org --user1 you@example.org --passfile1 /root/.old.pw \
--host2 mail.example.org --user2 you@example.org --passfile2 /root/.new.pw--dry hace que imapsync "no realice ninguna acción real; solo imprime lo que se haría", así que lea esa salida antes de eliminar el flag. Cada archivo de contraseña contiene la contraseña en su primera línea, por lo que debe chmod 600 ambos y borrarlos después.
Stalwart también incluye herramientas más recientes que la mayoría de las guías de terceros aún no han incorporado. Su blog documenta Vandelay, un importador y exportador JMAP (29 de mayo de 2026), y un proxy de migración para actualizaciones sin tiempo de inactividad (10 de junio de 2026). Lea ambos antes de planificar una migración a gran escala, ya que son más recientes que casi cualquier otra documentación que encontrará escrita en otros sitios.
Modos de fallo y cadenas que verá
La interfaz de administración no carga. El FAQ menciona esto directamente: el paquete de la interfaz web se descarga desde GitHub en la primera ejecución, por lo que un servidor sin salida HTTPS hacia github.com le dejará con el servicio en ejecución pero una página en blanco. Verifique con curl -sI https://github.com/stalwartlabs/webui/releases/latest/ desde el servidor. Las otras causas comunes que enumera son un esquema HTTP o HTTPS que no coincide y un reverse proxy que no reenvía la IP del cliente.
No aparece la contraseña de bootstrap en el registro. Se imprime una sola vez, al iniciar en modo bootstrap. Si el servicio se ha reiniciado desde entonces, amplíe la ventana con sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode'. Si realmente ha desaparecido, establezca STALWART_RECOVERY_ADMIN en /etc/stalwart/stalwart.env y reinicie.
Se rechaza el relay a través de un proxy local. Las notas de la versión v0.16.19 registran una corrección para las rutas de relay que eran rechazadas con host resolves loopback address. Si encuentra esa cadena exacta, está ejecutando una compilación antigua. Actualice, no intente sortear el problema.
El servicio no arranca tras escribir su propia unidad. Sin AmbientCapabilities=CAP_NET_BIND_SERVICE, el usuario stalwart no puede enlazar los puertos 25, 443, 465 o 993, y el arranque falla en el primer listener. Copie la línea de capacidades de la unidad que generó el instalador.
Los certificados nunca se emiten. HTTP-01 requiere que el puerto 80 esté accesible y libre. TLS-ALPN-01 requiere que el propio Stalwart responda al handshake TLS en el puerto 443. Si algún otro proceso en la máquina ocupa cualquiera de estos puertos, ACME seguirá fallando silenciosamente mientras todo lo demás parezca estar en buen estado.
FAQ
¿Stalwart reemplaza a Postfix, Dovecot y Rspamd en un solo VPS?
Sí. Un único binario en Rust gestiona SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV y WebDAV, e incluye el filtro de spam, el almacenamiento de mensajes y un cliente ACME. Solo hay una unidad de systemd y un archivo de configuración en /etc/stalwart/config.json, en lugar de cuatro daemons y sus configuraciones de integración. Lo que no reemplaza es su zona DNS ni la política del puerto 25 de su proveedor, que es donde el alojamiento propio de correo realmente tiene éxito o fracasa.
¿Cuánta memoria RAM necesita un servidor de correo Stalwart?
La página de requisitos del sistema de Stalwart, consultada el 28 de agosto de 2026, indica aproximadamente 100 MB en reposo y señala que 1 GB de RAM es suficiente para una implementación pequeña de 5 a 10 usuarios. Una configuración de bajo tráfico para unos 5 usuarios funciona con un solo núcleo de CPU. El límite predeterminado es 8,192 conexiones simultáneas en todos los servicios y es configurable, por lo que el techo aumenta con el número de conexiones y el volumen de correo, más que solo con el número de usuarios. No se publica un tamaño mínimo de disco, así que dimensione el disco según el correo que planee almacenar.
¿Cambiar a Stalwart mejorará mi entregabilidad de correo electrónico?
No. La entregabilidad depende de si el puerto TCP 25 de salida está abierto en su VPS, del DNS inverso de su IP y de los registros SPF, DKIM y DMARC de su dominio. Stalwart admite DANE, MTA-STS y reportes TLS de SMTP, y puede publicar su política MTA-STS por usted, pero estos regulan la seguridad del transporte y no si una red receptora confía en su dirección. Pruebe el puerto 25 con nc -vz -w 5 alt1.aspmx.l.google.com 25 antes de instalar nada.
¿Stalwart incluye webmail?
No a fecha de 28 de agosto de 2026. Incluye una interfaz de administración web, que es algo distinto. La hoja de ruta del proyecto del 20 de junio de 2025 indica que se planea un cliente de webmail después de la versión 1.0, construido en Rust con Dioxus, "probablemente en algún momento de 2026", y el blog del proyecto aún no ha anunciado ninguno. Si sus usuarios necesitan una bandeja de entrada en el navegador ahora, despliegue Roundcube junto a él o utilice una pila que incluya SOGo.
¿Contra qué protege el cifrado en reposo de Stalwart?
Cifra los mensajes de cada usuario con su propia clave pública OpenPGP o S/MIME antes de escribirlos en el disco, por lo que un disco robado, una copia de seguridad sustraída o un administrador que lea el almacenamiento no pueden recuperar el contenido. No es cifrado de extremo a extremo: el mensaje llega en texto plano y se cifra al entregarse, por lo que cada salto anterior pudo verlo. encryptOnAppend está desactivado por defecto, por lo que los elementos enviados y borradores escritos por su cliente permanecen sin cifrar a menos que usted lo cambie. La documentación cubre solo el contenido de los mensajes y no menciona nada sobre metadatos, entradas de índice o el recifrado de correos almacenados antes de cargar la clave, así que verifique esos aspectos usted mismo en lugar de asumirlos.