Cómo autohospedar un servidor SimpleX en un VPS
Configura un relay SMP de SimpleX en un VPS con instalación fijada, huella para clientes, puertos, usuario sin privilegios, copias, TLS y modelo de amenazas.
Qué hace un servidor SimpleX autohospedado
Para autohospedar un servidor de chat SimpleX, ejecute un daemon en un VPS: smp-server, el relay del protocolo SMP (simplex messaging protocol). Este mantiene las colas de mensajes en las que sus contactos escriben y de las que leen. Un segundo daemon opcional, llamado xftp-server, retransmite las transferencias de archivos. Ambos proceden del mismo proyecto, simplexmq, y cada uno consta de un binario, un archivo de configuración y un registro de solo anexado.
Este texto está dirigido al operador, no al usuario de la aplicación. El relay no contiene cuentas, listas de contactos ni historial de chats. Contiene colas, algunos textos cifrados no entregados y un certificado que lo identifica. Lo que debe asumir es la disponibilidad del servicio, un poco de espacio en disco y los metadatos que pasan por su servidor.
Todos los comandos, rutas, puertos y flags siguientes proceden de la documentación del proyecto: la página de alojamiento del servidor SMP, la página del servidor XFTP y el documento de seguridad del protocolo. Cuando un número es importante, se indica junto a él la página de la que procede.
Por qué una red sin identificadores de usuario sigue necesitando relays
SimpleX no tiene nombres de usuario, números de teléfono ni identificadores de cuenta. Un contacto es una cola unidireccional: una dirección en un relay en la que un extremo escribe y el otro lee. Dos de tus contactos no comparten ningún identificador que un servidor pueda relacionar.
Estas colas tienen que estar alojadas en algún sitio por una razón sencilla. Dos teléfonos rara vez están conectados al mismo tiempo. Algo tiene que aceptar un mensaje ahora y conservarlo hasta que el otro dispositivo lo solicite. Esa es toda la función de un relay SMP. Esto también significa que los dos dispositivos nunca se conectan entre sí, por lo que ninguno conoce la dirección IP (protocolo de Internet) del otro. El relay absorbe esa exposición.
El nombre de host del relay forma parte de la dirección de la cola, por lo que aparece en todos los enlaces de invitación que generes desde él. Tenlo en cuenta cuando leas el modelo de amenazas al final.
Qué puede ver un relay y qué no
El proyecto define este modelo de amenazas en protocol/security.md. Conviene leerlo antes de instalar nada, porque después de seguir esta guía ese relay será suyo. Un relay, incluso si está completamente controlado por un atacante, no puede conocer el contenido ni el tipo de los mensajes, añadir, duplicar o corromper mensajes individuales sin que se detecte, ni romper el cifrado de extremo a extremo mediante un ataque activo.
La misma página indica qué puede hacer un relay. Puede saber cuándo un destinatario de una cola está conectado. Puede contar cuántos mensajes pasan por una cola. Puede conocer la dirección IP de un destinatario. Puede descartar todos los mensajes futuros de una cola o falsear el estado de esa cola.
La separación es clara. La confidencialidad es responsabilidad del cliente y el self-hosting no la modifica. Los metadatos y la disponibilidad son responsabilidad del operador del relay, y el self-hosting le asigna ambas responsabilidades.
Qué necesita antes de empezar
- Un VPS con Ubuntu 22.04 o 24.04. El proyecto publica binarios de la versión compilados exactamente para esas dos versiones, en x86-64 y aarch64.
- Un nombre de dominio con un registro A que apunte al VPS, además de un registro AAAA si tiene IPv6. La documentación usa
smp1.example.comcomo ejemplo. - Acceso root o
sudoy una segunda sesión SSH abierta mientras modifica el firewall. - Un lugar fuera del servidor para guardar una copia de seguridad, porque el directorio de configuración es la identidad del servidor.
En una instancia ARM, use el recurso aarch64 en lugar de x86-64. No cambia nada más en esta guía, y la elección entre planes VPS ARM y x86 depende del precio y del rendimiento por núcleo, no de si este software funciona.
Instale una versión fijada, no latest
El proyecto proporciona un script de instalación que descarga la versión actual y registra un comando `simplex-servers-update`. Funciona. Aun así, fije la versión: si el binario de un relay cambia sin control, resulta difícil determinar la causa cuando algo falla.
En agosto de 2026, la versión actual de simplexmq es `v6.5.0`, publicada el 29 de abril de 2026. Consulte la página de versiones para elegir el tag que necesita y use ese tag en todo lo que aparece a continuación.
sudo useradd -m smp
sudo install -d -o smp -g smp -m 755 /etc/opt/simplex /var/opt/simplex`useradd -m smp no establece ninguna contraseña, por lo que nadie inicia sesión directamente como smp. Cree usted mismo los dos directorios antes de ejecutar cualquier otra cosa, porque /etc/opt pertenece a root y tiene el modo 755. Esto deja al usuario smp` sin ningún lugar donde escribir su propio directorio de configuración.
VER=v6.5.0
curl -fL "https://github.com/simplex-chat/simplexmq/releases/download/$VER/smp-server-ubuntu-24_04-x86-64" -o /tmp/smp-server
sha256sum /tmp/smp-serverCompare ese hash con las sumas de comprobación SHA2-256 publicadas en las notas de la versión para el mismo tag. El proyecto también firma las sumas de comprobación de las versiones con la clave de SimpleX Chat `FB44AF81A45BDE327319797C85107E357D4A17FC`, documentada en la página del servidor. Así puede verificar la firma en lugar de confiar en la página desde la que obtuvo el hash.
sudo install -m 755 -o root -g root /tmp/smp-server /usr/local/bin/smp-serverInstálelo con root como propietario de forma intencionada. El servicio se ejecuta como `smp`, por lo que una intrusión en el servicio no puede sobrescribir el binario desde el que se inicia.
Inicialice el servidor y conserve los dos secretos que muestra
sudo su smp -c "smp-server init --yes --store-log --daily-stats --no-password --fqdn=smp1.example.com"--store-log(-l) escribe un registro de colas de solo anexado en/var/opt/simplex/smp-server-store.log, por lo que el relay sobrevive a un reinicio. Sin él, un reinicio descarta todas las colas y deja de funcionar cada contacto encaminado a través de usted.--daily-stats(-s) escribe contadores en formato CSV en/var/opt/simplex/smp-server-stats.daily.log.--fqdnincluye su dominio en el certificado generado. Use--ipsi no tiene un dominio.--no-passwordpermite que cualquiera cree una cola en su relay. Para mantenerlo privado, establezcacreate_passworddebajo de[AUTH]en/etc/opt/simplex/smp-server.inidespués de la inicialización, en lugar de pasar--passwordaquí, porque una línea de comandos queda visible en el historial del shell y en la lista de procesos mientras se ejecuta.
Init genera un certificado y muestra los dos valores que debe conservar. El primero es la huella digital, una cadena base64 que también se escribe en /etc/opt/simplex/fingerprint. El segundo es la dirección completa del servidor, que consta de la huella digital y su nombre de host. Copie ambos ahora.
Init también crea /etc/opt/simplex/ca.key, y la documentación indica que debe mover ese archivo a un almacenamiento sin conexión. El motivo es importante: los clientes fijan la huella digital de esa autoridad certificadora, por lo que cualquiera que tenga ca.key puede emitir un certificado de servidor nuevo que sus clientes aceptarán como propio. Sólo necesitará recuperarlo para rotar posteriormente el certificado del servidor con smp-server cert.
Trate init como un paso único. La huella digital de su dirección procede de la autoridad que genera init, por lo que regenerar esa autoridad produce una dirección diferente y deja sin uso la que distribuyó.
Ejecútelo con systemd como un usuario sin privilegios
Escriba /etc/systemd/system/smp-server.service exactamente como aparece en la documentación:
[Unit]
Description=SMP server systemd service
[Service]
User=smp
Group=smp
Type=simple
ExecStart=/usr/local/bin/smp-server start +RTS -N -RTS
ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex/smp-server-store.log" ] && cp "/var/opt/simplex/smp-server-store.log" "/var/opt/simplex/smp-server-store.log.bak"'
LimitNOFILE=65535
KillSignal=SIGINT
TimeoutStopSec=infinity
[Install]
WantedBy=multi-user.targetLa unidad del proyecto también incluye AmbientCapabilities=CAP_NET_BIND_SERVICE. Esa línea existe porque el proceso se ejecuta como smp y los puertos inferiores a 1024 están cerrados para los procesos que no son root. Sin ella, el daemon no puede enlazarse a 80 ni a 443. Añádala si sirve esos puertos. LimitNOFILE=65535 es importante porque cada cliente suscrito mantiene abierta una conexión TCP y el límite predeterminado es muy inferior al que necesita un relay con mucha carga. ExecStopPost copia el registro del servicio a un archivo .bak en cada detención. Esto proporciona un punto de reversión gratuito.
sudo systemctl daemon-reload
sudo systemctl enable --now smp-server
sudo systemctl status smp-server
sudo journalctl -fu smp-serverUn arranque correcto registra la dirección del servidor. Después, confirme que los sockets están realmente abiertos:
sudo ss -tlnp | grep -E ':(443|5223)'Ambas líneas deben indicar smp-server. Ejecutar el daemon con su propia cuenta, sin permisos de sudo, sigue la misma práctica descrita en cuentas por servicio en un VPS. Esto evita que un error en un daemon de red se convierta en una shell de root.
Qué puertos abrir y cuál mantener cerrado
La documentación enumera tres: 5223/tcp, 443/tcp y 80/tcp. El puerto 5223 es el transporte SMP. La configuración incluida establece port: 5223,443 en [TRANSPORT], por lo que el mismo protocolo también responde en 443. Esto es importante porque muchas redes restrictivas permiten conexiones salientes por 443 y ningún otro puerto. El puerto 80 sólo es necesario para la página de información opcional y su redirección a HTTPS.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5223/tcp
sudo ufw enableNo abra 5224. Es el puerto de control, y la documentación accede a él desde el propio servidor mediante nc 127.0.0.1 5224. Muestra el estado del servidor y elimina colas, por lo que debe permanecer en loopback, con las contraseñas de administrador y de usuario establecidas en [AUTH]. Si no conoce la herramienta, los conceptos básicos de ufw en un VPS explican el orden de las reglas y cómo evitar bloquear el acceso al servidor.
Hay otro control que suele causar problemas. La mayoría de los proveedores ejecuta un firewall de red en el panel, independiente de ufw en el servidor. Un puerto puede estar abierto en ufw y, aun así, el tráfico puede descartarse antes de llegar al servidor.
La dirección del servidor que necesitan sus clientes
smp://<fingerprint>[:<password>]@<public_hostname>[,<onion_hostname>]Esa cadena es toda la configuración del cliente. Péguela en los ajustes del servidor de la aplicación o permita que alguien escanee el código QR que muestra la aplicación. La documentación indica que el código QR incluye la contraseña, por lo que quien lo escanee también podrá recibir mensajes a través de su servidor.
Hay un comportamiento documentado que sorprende a todo el mundo. Añadir su servidor en la aplicación sólo afecta a los contactos que cree a partir de ese momento. Los contactos existentes permanecen en los relays donde se crearon sus colas y no se migran. Por eso tampoco puede desactivar un relay al día siguiente de sustituirlo.
Añadir un relay de archivos XFTP
XFTP (protocolo de transferencia de archivos de SimpleX) es la parte de archivos de la red. Es un daemon independiente con su propia dirección. Según el anuncio de XFTP del proyecto, los relays no reciben metadatos de archivos. Sólo ven fragmentos individuales de 256kb, 1mb o 4mb, cuyo acceso se autoriza mediante credenciales anónimas. El emisor puede distribuir los fragmentos de un archivo entre varios relays. Por tanto, el servidor almacena piezas, no archivos.
sudo useradd -m xftp
sudo install -d -o xftp -g xftp -m 755 /etc/opt/simplex-xftp /var/opt/simplex-xftp /srv/xftp
curl -fL "https://github.com/simplex-chat/simplexmq/releases/download/$VER/xftp-server-ubuntu-24_04-x86-64" -o /tmp/xftp-server
sudo install -m 755 -o root -g root /tmp/xftp-server /usr/local/bin/xftp-server
sudo su xftp -c "xftp-server init -l --fqdn=xftp1.example.com -q '20gb' -p /srv/xftp/"Su configuración está en /etc/opt/simplex-xftp/, su estado en /var/opt/simplex-xftp/ y los fragmentos de archivos en la ruta que indique -p. La unidad de systemd tiene la misma estructura, con User=xftp y ExecStart=/usr/local/bin/xftp-server start +RTS -N -RTS. Durante la inicialización se muestra una dirección xftp:// con el mismo formato que la de SMP y una huella propia en /etc/opt/simplex-xftp/fingerprint.
Hay que prever un conflicto. El puerto documentado del servidor XFTP es 443 y la configuración de SMP también indica 443. Dos procesos no pueden enlazar el mismo puerto en la misma dirección. Por tanto, en un VPS hay que cambiar una de las dos configuraciones. La solución más sencilla es establecer port: 5223 en la sección [TRANSPORT] de SMP y dejar el puerto 443 para el relay de archivos. Esto elimina la alternativa de conexión por 443 para los clientes de redes restrictivas. Las alternativas son añadir una segunda dirección IP al mismo VPS o utilizar un segundo VPS.
Asigne la cuota de forma realista. -q '20gb' representa una cantidad de disco disponible. El relay de archivos es el componente que consume disco y ancho de banda. El relay de mensajes apenas consume ninguno de los dos.
Qué se almacena en disco y qué restaura una copia de seguridad
Hay dos directorios importantes. /etc/opt/simplex/ contiene la identidad: smp-server.ini, el certificado y la clave del servidor, ca.key y fingerprint. /var/opt/simplex/ contiene el estado: smp-server-store.log almacena las colas y, cuando restore_messages: on, los mensajes no entregados, junto con el archivo de estadísticas diarias.
sudo systemctl stop smp-server
sudo tar czf /root/simplex-backup.tgz -C / etc/opt/simplex var/opt/simplex
sudo chmod 600 /root/simplex-backup.tgz
sudo systemctl start smp-serverEs importante saber qué contiene ese archivo. No es un archivo de mensajes: los elementos en cola son texto cifrado para claves que el relay nunca tuvo, y la configuración [STORE_LOG] distribuida elimina los mensajes después de 21 días. Es una copia de la identidad del servidor, incluido ca.key, por lo que cualquiera que obtenga el archivo puede hacerse pasar por su relay ante sus contactos. Cífrelo y manténgalo fuera del servidor.
La ventaja se obtiene al restaurar. Vuelva a colocar /etc/opt/simplex en un VPS nuevo, apunte el mismo nombre DNS hacia él y la huella digital no cambiará, por lo que todas las direcciones que haya distribuido seguirán funcionando. Si pierde ese directorio, no hay recuperación: una instalación nueva genera una huella digital nueva, lo que implica una dirección nueva y significa que se pierden todos los contactos encaminados a través de su relay.
TLS: dos certificados con funciones diferentes
El transporte SMP no utiliza una autoridad certificadora pública. Init genera una autoridad privada y un certificado de servidor. La huella digital de esa autoridad se incluye en la dirección del servidor. El cliente compara lo que presenta el servidor con esa huella fijada. El proyecto describe este mecanismo como una protección de la conexión entre el cliente y el servidor frente a ataques de intermediario. No es necesario ejecutar un cliente ACME (automatic certificate management environment) en ese puerto. La rotación se realiza manualmente con smp-server cert y SMP_SERVER_CFG_PATH configurado.
La página de información opcional utiliza el otro certificado. Su sección [WEB] indica static_path, https: 443, cert: /etc/opt/simplex/web.crt y key: /etc/opt/simplex/web.key. Un navegador no conoce su autoridad privada. Por eso, este es el único lugar donde corresponde utilizar un certificado reconocido públicamente. La guía de inicio rápido de Docker coloca Caddy delante del servidor precisamente para este fin y emite el certificado automáticamente.
Acceso al relay mediante Tor
La documentación incluye una sección sobre Tor que instala Tor desde el repositorio de Tor Project y añade un servicio onion en /etc/tor/torrc:
SOCKSPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
HiddenServiceDir /var/lib/tor/simplex-smp/
HiddenServicePort 5223 localhost:5223
HiddenServicePort 443 localhost:443Lea atentamente las dos líneas de modo. Single hop y non-anonymous significan que la ubicación del relay no queda oculta. La dirección onion es rápida y ofrece a los clientes una forma de conectarse sin revelar su dirección IP, pero el servidor sigue siendo localizable mediante su IP pública. El nombre de host onion de /var/lib/tor/simplex-smp/hostname se añade al final de la dirección del servidor, después de una coma. Si también quiere ocultar la ubicación del servidor, necesita una configuración diferente; ejecutar un servicio onion real en un VPS explica las ventajas y desventajas. La diferencia entre lo que oculta cada herramienta se trata en Tor comparado con una VPN y se aplica directamente en este caso.
Modelo de amenazas: qué cambia al alojar el servicio por cuenta propia
Qué obtiene. Los metadatos (qué colas existen, cuándo se leen y qué direcciones se conectan) se almacenan en una máquina que usted controla, y usted decide cuánto tiempo se conserva cada dato. Tampoco forma parte de un grupo grande cuyos datos se puedan solicitar de una sola vez.
Qué no obtiene, dicho claramente:
- El cifrado no cambia. Los mensajes ya estaban cifrados de extremo a extremo antes de configurar esto y siguen cifrados de extremo a extremo después. El alojamiento por cuenta propia es una decisión sobre los metadatos, no sobre la criptografía.
- Su proveedor de VPS ve el tráfico dirigido a su dirección IP y conserva sus datos de facturación. Ha trasladado la confianza de un operador de mensajería a un operador de alojamiento. No la ha eliminado.
- Su relay es un grupo pequeño. Si presta servicio a un solo hogar, conectarse a él identifica a ese hogar, y su nombre de host aparece dentro de cada enlace de invitación que envía desde él. Un relay público con mucho tráfico le ofrece más anonimato en ese aspecto, y ese es el verdadero intercambio.
- La disponibilidad depende ahora de usted. Un disco lleno o un equipo apagado impide entregar los mensajes, y sus contactos no tienen forma de redirigirlos sin pasar por usted.
El mismo razonamiento se aplica a cualquier servicio privado que instale en un equipo propio, ya sea este relay o una VPN WireGuard en su propio VPS. Está eligiendo qué parte puede ver los metadatos. No está haciendo que desaparezcan.
Cuando no funciona
El servicio se inicia y se detiene inmediatamente. Lea sudo journalctl -u smp-server -n 50. Un fallo de enlace indica el puerto que no pudo ocupar. Después, ejecute sudo ss -tlnp | grep :443 para ver qué proceso ya lo está usando. En un servidor recién instalado, normalmente será nginx, Caddy o el servidor XFTP que instaló hace una hora.
Init no puede escribir su configuración. Ejecutar smp-server init como el usuario smp antes de que exista /etc/opt/simplex produce un error de permisos, porque /etc/opt pertenece a root. Cree primero el directorio con el propietario correcto y vuelva a ejecutar init.
Los clientes no pueden llegar al relay. Compruebe que el nombre resuelva a la dirección correcta con dig +short smp1.example.com. Después, pruebe el puerto desde su portátil, no desde el servidor: nc -vz smp1.example.com 5223. Si la conexión falla desde fuera mientras ss muestra que el socket está abierto en el servidor, el problema está en el firewall de red del proveedor. Es un control independiente de ufw.
Un contacto no puede conectarse a través del relay. La huella digital de la dirección que compartió debe coincidir con el contenido actual de /etc/opt/simplex/fingerprint. Si configuró create_password en [AUTH], la dirección también debe incluir esa contraseña. De lo contrario, el cliente no puede crear una cola.
No se movió nada después de añadir el servidor en la aplicación. Es el comportamiento previsto. Sólo los contactos nuevos usan el relay recién añadido. Los contactos existentes conservan las colas que ya tienen.
FAQ
¿Alojar mi propio servidor SimpleX hace que mis mensajes sean más seguros?
No, y es así por diseño. SimpleX cifra los mensajes de extremo a extremo entre dispositivos, por lo que el relay nunca tiene las claves, independientemente de quién lo ejecute. El alojamiento propio cambia quién observa los metadatos asociados a esos mensajes: qué colas existen, cuándo se leen y qué direcciones IP se conectan. Es una decisión sobre los metadatos. Si el motivo para alojarlo usted mismo es obtener un cifrado más fuerte, el cifrado ya estaba disponible.
¿Qué puede ver realmente el operador de un relay SimpleX?
El protocol/security.md del proyecto lo explica. Un relay no puede leer el contenido ni los tipos de los mensajes, no puede modificarlos de forma individual sin ser detectado y no puede romper el cifrado de extremo a extremo mediante un ataque activo. Sí puede ver cuándo el destinatario de una cola está en línea, contar los mensajes que pasan por una cola, conocer la dirección IP de un destinatario, descartar mensajes futuros de una cola o mentir sobre el estado de esa cola. Esas son las capacidades que obtiene cuando el relay es suyo.
¿Necesito un nombre de dominio y un certificado TLS?
Necesita un dominio para una configuración utilizable, y smp-server init acepta --ip si realmente no tiene ninguno. No necesita un certificado de una autoridad pública para el puerto de mensajería: init genera su propia autoridad y el cliente fija la huella digital que aparece en la dirección smp://. Sólo se necesita un certificado reconocido públicamente para la página web informativa opcional, configurada como cert y key en la sección [WEB] de smp-server.ini.
¿Qué ocurre si pierdo /etc/opt/simplex?
Todas las direcciones que haya distribuido dejarán de funcionar. Ese directorio contiene la autoridad de certificación cuya huella digital está incorporada en la dirección del servidor. Por tanto, una reconstrucción produce una huella digital diferente y, en consecuencia, un servidor diferente. Los contactos cuyas colas estén en ese relay no se pueden reparar desde el cliente. Haga una copia de seguridad cifrada del directorio fuera del servidor y almacene ca.key sin conexión, como indican los documentos, porque quien lo tenga puede suplantar su relay.
¿Puedo ejecutar el relay SMP y el relay de archivos XFTP en el mismo VPS?
Sí, pero debe resolver un conflicto. El puerto documentado del servidor XFTP es 443 y la configuración SMP predeterminada incluye port: 5223,443, por lo que ambos intentan usar el mismo socket. Asigne 443 a uno de ellos: establezca port: 5223 para el servidor SMP o mueva el relay de archivos a una segunda dirección IP o a un segundo VPS. Ajuste también la cuota de almacenamiento al espacio de disco disponible, porque el relay de archivos es el componente que consume disco y ancho de banda.