Monta tu propio nodo
Guía completa paso a paso para levantar tu propio nodo MILITAR: un buzón que custodia mensajes y ficheros cifrados. Ni tú, como operador, puedes leer nada.
Qué es un nodo
A — Instalación rápida con script (1 línea)
El nodo corre en un VPS LINUX (Ubuntu/Debian). Conéctate por SSH desde tu ordenador (Windows PowerShell, Linux o Mac) y pega el comando. El script hace todo automáticamente.
ssh root@IP_DE_TU_VPS
curl -sS https://militar.chat/builds/install-node.sh | bash
Ejecútalo como root en un VPS Ubuntu/Debian recién contratado. Instala todo automáticamente: descarga milnode.py, crea el usuario, configura systemd y abre el cortafuegos. Luego solo necesitas guardar el adminSecret y configurar HTTPS. Si prefieres hacerlo paso a paso, sigue los pasos a-h debajo.
Con esto tu nodo YA funciona
Queda accesible en http://TU_IP:8780 y ya puedes registrarlo. El script NO instala HTTPS, y no es un olvido: el HTTPS necesita un dominio, y el dominio se crea después. Es un paso OPCIONAL (apartado g). Sin él tus mensajes siguen cifrados de extremo a extremo.
B — Paso a paso (hazlo tú mismo)
El mismo resultado que el script, pero ejecutando cada orden manualmente. Así ves exactamente qué se instala y cómo funciona.
Un buzón cifrado, nada más
Un nodo es un buzón (mailbox) que custodia mensajes y ficheros CIFRADOS de extremo a extremo, separados por usuario. El operador del nodo NO puede leer nada: solo custodia blobs sellados. Es un único fichero Python (milnode.py), sin dependencias externas, con su propia base de datos SQLite (node.sqlite). Levantarlo es cuestión de minutos.
Requisitos
Lo mínimo indispensable
VPS Linux con IP pública.
Mínimo 1 vCPU, 1 GB de RAM y 20 GB de disco.
Python 3.8 o superior (suele venir preinstalado en la mayoría de distribuciones Linux).
Puerto 8780 accesible desde Internet.
Pasos detallados
a) Contratar un VPS Linux
Contrata un servidor virtual Linux (por ejemplo Ubuntu Server o Debian) con IP pública en cualquier proveedor. Cualquier plan modesto sirve de sobra.
b) Colocar el fichero del nodo
Descarga el fichero del nodo (un único Python, sin dependencias) a /opt/milnode/. Descárgalo directamente en el servidor:
mkdir -p /opt/milnode
wget -O /opt/milnode/milnode.py https://militar.chat/builds/milnode.py.txt
c) Arrancarlo una vez a mano
Ejecuta el nodo manualmente la primera vez:
python3 /opt/milnode/milnode.py 8780 /opt/milnode/data
Este comando crea la carpeta de datos, genera el fichero node.sqlite e imprime un adminSecret. Guarda ese secreto en un lugar seguro: te da acceso de administración del nodo.
d) Crear un servicio systemd
Para que el nodo arranque solo y se reinicie si falla, crea un servicio systemd. Por seguridad, NO lo ejecutes como root: crea primero un usuario sin privilegios y dale la propiedad de la carpeta del nodo:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin milnode
sudo chown -R milnode:milnode /opt/milnode
Después define el servicio con ese usuario:
[Unit]
After=network.target
[Service]
WorkingDirectory=/opt/milnode
ExecStart=/usr/bin/python3 /opt/milnode/milnode.py 8780 /opt/milnode/data
Restart=always
User=milnode
[Install]
WantedBy=multi-user.target
Después actívalo y arráncalo con: systemctl enable --now milnode
e) Abrir el cortafuegos
Permite SSH (para no quedarte fuera) y el puerto del nodo. IMPORTANTE: el 22 SIEMPRE antes de activar ufw.
ufw allow 22/tcp
ufw allow 8780/tcp
ufw enable
Con el 8780 abierto tu nodo ya es accesible como http://TU_IP:8780 — suficiente para registrarlo y usarlo, aunque no tengas dominio. Si luego pones HTTPS con dominio (paso g), podrás cerrarlo con: ufw delete allow 8780/tcp
f) Comprobar la salud del nodo
Verifica que el nodo responde:
curl http://TU_IP:8780/health
Debería devolver algo como: {"ok":true,"version":"3.0.0",...}. Si lo ves, el nodo está vivo.
g) HTTPS con dominio (OPCIONAL — el nodo ya funciona sin esto)
Este paso NO lo hace el script de instalación rápida, porque el HTTPS necesita un dominio y el dominio se crea aquí. Hazlo solo si quieres que tu nodo responda por https://tudominio en vez de http://TU_IP:8780.
Para uso real, pon un proxy inverso con HTTPS delante del nodo. Lo más simple es Caddy: obtiene y renueva el certificado de Let's Encrypt automáticamente. Así el tráfico app↔nodo viaja cifrado por TLS además del cifrado de extremo a extremo del contenido.
1. DNS. Apunta un (sub)dominio a la IP de tu VPS en tu proveedor de DNS: un registro A a la IPv4 y, si tienes, un AAAA a la IPv6. Let's Encrypt emite certificados para dominios, no para IPs sueltas.
2. Instala Caddy.
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddy
3. Configura el proxy. Edita /etc/caddy/Caddyfile y déjalo así (cambia nodo.tudominio.com por el tuyo):
nodo.tudominio.com {
reverse_proxy 127.0.0.1:8780
}
Recarga Caddy (obtendrá el certificado solo la primera vez):
systemctl reload caddy
4. Cortafuegos. SOLO si ya tienes Caddy con dominio: deja entrar SSH y HTTP/HTTPS, y cierra el 8780 (Caddy lo alcanza en local). Si NO tienes dominio, deja el 8780 abierto o tu nodo quedará inaccesible. IMPORTANTE: permite el 22 (SSH) ANTES de activar ufw o perderás el acceso al servidor.
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
# y solo si YA funciona el HTTPS:
ufw delete allow 8780/tcp
5. Comprueba.
curl https://nodo.tudominio.com/health
Debe devolver el JSON de salud por HTTPS. A partir de aquí la URL de tu nodo es https://nodo.tudominio.com — esa es la que se registra en la red.
h) Registrar el nodo en la red
Por último, une tu nodo a la red: envía su URL a MILITAR o configúralo en la app. A partir de ahí los usuarios podrán elegir tu nodo como buzón.
Cómo funciona por dentro
Directorio, depósito y recogida
La central actúa de DIRECTORIO: guarda qué nodo aloja a cada usuario y un depositToken público. Otros usuarios depositan mensajes cifrados en el buzón del destinatario usando ese token público. El dueño del buzón recoge sus mensajes con su ownerToken secreto, que solo vive dentro de su app y nunca sale de ella. Cuotas por defecto: 8 GB por usuario y ficheros de hasta 5 MB.
Privacidad
El nodo solo almacena blobs cifrados de extremo a extremo. Ni el operador ni nadie más puede leer su contenido: sin la clave privada del destinatario, que jamás abandona su dispositivo, los datos son ilegibles.
Garantías de confianza
No hace falta confiar en el operador
La confidencialidad la garantiza la criptografía, no la buena fe: el nodo solo custodia sobres cifrados de extremo a extremo. El operador no puede leer ni falsificar nada, sea quien sea.
Vigilancia automática (watchdog)
La central sondea cada nodo cada 10 minutos: comprueba que responde y, además, deposita un sobre de prueba y verifica que el nodo lo devuelve intacto. Un nodo caído, o que pierda o manipule lo depositado, se desactiva automáticamente y deja de ofrecerse; si se recupera, vuelve solo.
Valoración de la comunidad (1–5 estrellas)
Los usuarios valoran cada nodo de 1 a 5 estrellas (un voto por persona, editable). El watchdog mide lo objetivo —disponibilidad y honestidad— y las estrellas lo subjetivo —la experiencia real—. Además, cada usuario elige su nodo y puede cambiarlo cuando quiera: un nodo que se porta mal pierde usuarios.