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.

⬇ Descargar script (léelo antes de ejecutar)

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.

Requisitos para aportar un nodo Registrar tu nodo en la red Nodos abiertos Ofrecer un nodo