Skip to content
InicioSobre míVenturesPodcastCasos de ÉxitoBlogContáctame
EN|ES|PT
Todas las publicaciones
13 de febrero de 2026

Cómo Instalar OpenClaw en un VPS: La Guía Completa Centrada en la Seguridad

"Solo usa un VPS. Es como una instalación con un clic." Este es el consejo que escucharás en cada foro, cada servidor de Discord y cada tutorial. Y es técnicamente cierto — de la misma forma que cocinar la cena es solo "aplicar calor a la comida." La instalación de OpenClaw en sí es sencilla. Todo lo que viene antes es donde la gente se destruye.

He configurado esto múltiples veces, ayudé a otros a hacer lo mismo, y vi a suficiente gente inutilizar sus servidores o ser comprometida en cuestión de horas como para saber que el consejo de "solo levanta un VPS" es peligrosamente incompleto. Esta guía cubre cada paso desde un servidor nuevo hasta una instancia de OpenClaw en funcionamiento, con la seguridad tratada como una preocupación de primer nivel — no como una ocurrencia tardía.

Antes de comenzar

Esta guía asume Ubuntu 22.04+ en un VPS en la nube (DigitalOcean, Hetzner, Linode, Vultr — cualquier proveedor funciona). Necesitarás: 1 vCPU, 4 GB de RAM, 100 GB de almacenamiento y una terminal con acceso SSH. Costo total: aproximadamente $6–24/mes dependiendo del proveedor.

Por qué la seguridad va primero

En el momento en que tu VPS obtiene una dirección IP pública, está bajo ataque. Esto no es una exageración. A los segundos de aprovisionarlo, escáneres automatizados encontrarán tu servidor y empezarán a intentar forzar el acceso SSH por fuerza bruta. He visto intentos de inicio de sesión comenzar dentro de los 12 segundos de que un nuevo servidor entra en línea.

OpenClaw es un agente de IA con acceso a tus datos personales, tus plataformas de mensajería, potencialmente tu correo, y cualquier otra cosa que le conectes. Si alguien compromete tu servidor, no solo obtiene una máquina Linux — obtiene tu asistente de IA y todo a lo que este tiene acceso. Por eso aseguramos el servidor antes de instalar cualquier cosa.

1 Actualiza el sistema

Conéctate por SSH a tu servidor nuevo como root e inmediatamente actualiza todo. Tu imagen de VPS casi con certeza está ejecutando paquetes con vulnerabilidades conocidas.

apt update && apt upgrade -y

Esto puede tomar algunos minutos. No te saltes el upgrade — tu trabajo es mantener tu sistema parcheado mientras los atacantes escanean activamente en busca de servidores sin parchar.

2 Instala herramientas esenciales de seguridad y red

Una instalación nueva de Ubuntu es deliberadamente mínima. Linux fue diseñado para ser componible y ligero — no para venir precargado con todo lo que podrías necesitar. Instala lo esencial:

apt install -y curl wget ufw fail2ban ca-certificates gnupg git
  • ufw — Uncomplicated Firewall, nuestra capa de defensa principal
  • fail2ban — Banea automáticamente las IPs que fallan la autenticación
  • ca-certificates & gnupg — Para verificar firmas de paquetes y HTTPS
  • curl & wget — Para descargar paquetes y scripts
  • git — Para clonar el repositorio de OpenClaw

3 Crea un usuario no-root

Ejecutar todo como root es como los servidores quedan completamente comprometidos a partir de un solo exploit. Crea un usuario dedicado con privilegios sudo:

adduser openclaw
usermod -aG sudo openclaw

Usa una contraseña fuerte y única. No la contraseña que usas en todas partes. No una variación de ella. Una contraseña genuinamente aleatoria. No necesitarás escribirla con frecuencia porque estamos a punto de eliminar por completo el acceso basado en contraseñas.

4 Configura la autenticación por clave SSH

Las contraseñas son adivinables. Las claves SSH no. En tu máquina local (no en el servidor), genera un par de claves si aún no tienes uno:

# On your local machine
ssh-keygen -t ed25519 -C "openclaw-vps"

Copia la clave pública a tu servidor:

# On your local machine
ssh-copy-id -i ~/.ssh/id_ed25519.pub openclaw@your-server-ip

Guarda tu clave SSH

Si pierdes tu clave privada y deshabilitamos la autenticación por contraseña (lo cual estamos a punto de hacer), quedas bloqueado permanentemente. Respalda tu par de claves ahora. Guárdalo en un lugar seguro. No continúes hasta que hayas verificado que puedes iniciar sesión con la clave.

Prueba el inicio de sesión basado en clave antes de continuar:

# On your local machine
ssh openclaw@your-server-ip

Si entras sin que te pidan una contraseña, estás bien. Si no, detente y arréglalo antes de continuar.

5 Endurece SSH

Ahora bloqueamos el daemon de SSH. Edita la configuración de SSH:

sudo nano /etc/ssh/sshd_config

Encuentra y define estos valores (algunos pueden necesitar ser descomentados o agregados):

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

Estamos cambiando el puerto SSH del predeterminado 22 a 2222. Esto no es seguridad — es reducción de ruido. Cada escáner automatizado golpea el puerto 22 primero. Mover a un puerto no estándar elimina el 99% de los ataques automatizados de bajo esfuerzo y mantiene tus logs legibles.

Verifica la configuración de SSH antes de reiniciar. Si configuras esto mal y reinicias, quedas bloqueado. Ejecuta: sudo sshd -t

Si la prueba pasa sin salida, reinicia SSH:

sudo systemctl restart sshd

No cierres tu sesión actual. Abre una nueva terminal y prueba la conexión con el nuevo puerto:

# On your local machine — in a NEW terminal
ssh -p 2222 openclaw@your-server-ip

Solo cierra la sesión original después de confirmar que la nueva funciona.

6 Configura el firewall

Esto es una dieta de eliminación para el tráfico de red. Bloqueamos todo, luego permitimos selectivamente solo lo que necesitamos.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment 'SSH'

Eso es todo por ahora. Una puerta abierta — nuestro puerto SSH personalizado. Todo lo demás está bloqueado. Activa el firewall:

sudo ufw enable

Verifica las reglas:

sudo ufw status verbose

7 Configura Fail2ban

"¿No habíamos deshabilitado las contraseñas?" Sí lo hiciste — hoy. Pero la seguridad no es un evento único. Fail2ban agrega defensa en profundidad baneando automáticamente las IPs que fallan repetidamente la autenticación, protegiendo contra ataques de fuerza bruta a tu autenticación por clave SSH y a cualquier servicio futuro que expongas.

Crea un archivo de configuración local (nunca edites la configuración principal — se sobrescribe en las actualizaciones):

sudo nano /etc/fail2ban/jail.local

Agrega esta configuración:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

Inicia y habilita fail2ban:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Verifica que esté corriendo:

sudo fail2ban-client status sshd

8 Habilita las actualizaciones automáticas de seguridad

Tu servidor necesita parcharse solo sin esperar a que te acuerdes de conectarte por SSH y ejecutar apt upgrade. Configura las actualizaciones desatendidas:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Verifica que el origen de seguridad esté habilitado en /etc/apt/apt.conf.d/50unattended-upgrades. La línea que contiene ${distro_id}:${distro_codename}-security debe estar descomentada.

Opcionalmente, configura reinicios automáticos para las actualizaciones del kernel:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Encuentra y define:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

Tu servidor ahora puede reiniciarse solo a las 3 AM cuando los parches del kernel lo requieran. Dormirás mejor.

9 Cordura básica del SO

Antes de instalar cualquier otra cosa, define tu zona horaria y asegúrate de que el reloj del sistema esté sincronizado. La deriva de tiempo causa bugs sutiles y enloquecedores en sistemas distribuidos y en el registro de logs:

sudo timedatectl set-timezone UTC
sudo timedatectl set-ntp on

Verifica:

timedatectl status

10 Instala Tailscale VPN

Aquí es donde la configuración se pone genuinamente interesante. Tailscale crea una VPN de malla privada entre tus dispositivos — tu laptop, tu teléfono, tu servidor — usando WireGuard por debajo. Una vez que Tailscale está corriendo, podemos eliminar todo el acceso público al servidor y solo permitir conexiones a través de la malla VPN cifrada.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Obtendrás una URL de autenticación. Ábrela en tu navegador, inicia sesión en tu cuenta de Tailscale y autoriza el dispositivo. Una vez conectado, obtén la IP de Tailscale de tu servidor:

tailscale ip -4

Esto te da algo como 100.x.x.x — una IP privada que solo es alcanzable a través de tu red Tailscale. Prueba la conexión desde tu máquina local (que también debería tener Tailscale instalado):

# On your local machine (with Tailscale running)
ssh -p 2222 openclaw@100.x.x.x

11 Restringe solo a Tailscale

Ahora hacemos algo que parece imprudente pero en realidad es la configuración más segura posible: eliminamos por completo el acceso SSH público.

# Remove public SSH rule
sudo ufw delete allow 2222/tcp

# Allow SSH only through Tailscale
sudo ufw allow in on tailscale0 to any port 2222 proto tcp comment 'SSH via Tailscale'

El SSH público ahora se fue. Todo el tráfico entrante público se fue. El servidor solo es alcanzable a través de tu malla Tailscale privada. Para un endurecimiento extra, deshabilita IPv6 en UFW y aplica configuraciones a nivel de kernel:

# Disable IPv6 in UFW
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw

# Apply kernel hardening
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

Recarga el firewall:

sudo ufw reload
sudo ufw status verbose

Verifica que aún puedes conectarte vía Tailscale. Si puedes — felicidades, tu servidor ahora es invisible para el internet público.

12 Instala Node.js

OpenClaw requiere Node.js. Nunca uses la versión de Node que viene con el gestor de paquetes de tu distro — siempre está desactualizada. Instala desde el repositorio oficial de NodeSource:

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

Verifica la instalación:

node --version
npm --version

13 Instala OpenClaw

Crea un directorio dedicado para la aplicación — no arrojes apps de producción en el directorio home:

sudo mkdir -p /opt/openclaw
sudo chown openclaw:openclaw /opt/openclaw
cd /opt/openclaw

Clona el repositorio:

git clone https://github.com/openclaw/openclaw.git .
npm install

Corrige los permisos del directorio (vienen rotos por defecto — como es tradición):

sudo chown -R openclaw:openclaw /opt/openclaw

Crea un directorio de credenciales:

mkdir -p /opt/openclaw/credentials
chmod 700 /opt/openclaw/credentials

Copia el archivo de entorno de ejemplo y configúralo con tus claves de API y ajustes:

cp .env.example .env
nano .env

Ejecuta el comando doctor integrado para verificar que todo esté configurado correctamente:

npm run doctor

14 Crea un servicio de systemd

Systemd asegura que OpenClaw inicie en el arranque, se reinicie ante un crash y registre logs correctamente. Crea el archivo de servicio:

sudo nano /etc/systemd/system/openclaw.service

Agrega esta configuración de unit:

[Unit]
Description=OpenClaw AI Agent
After=network.target

[Service]
Type=simple
User=openclaw
WorkingDirectory=/opt/openclaw
ExecStart=/usr/bin/node /opt/openclaw/index.js
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

Habilita e inicia el servicio:

sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw

Verifica que esté corriendo:

sudo systemctl status openclaw

Mira los logs para observar el comportamiento en tiempo de ejecución:

sudo journalctl -u openclaw -f

15 Respaldos y monitoreo

Tu instancia de OpenClaw ahora está corriendo y acumulando datos — memorias, conversaciones, configuraciones. Protégela.

Configura un script básico de respaldo:

sudo nano /opt/openclaw/backup.sh
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/openclaw/backups"
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/openclaw_$TIMESTAMP.tar.gz \
    --exclude='node_modules' \
    --exclude='backups' \
    /opt/openclaw/
# Keep only last 7 backups
ls -t $BACKUP_DIR/openclaw_*.tar.gz | tail -n +8 | xargs -r rm
echo "Backup completed: openclaw_$TIMESTAMP.tar.gz"
chmod +x /opt/openclaw/backup.sh

Automatízalo con un cron job (diario a las 2 AM):

crontab -e
# Add this line:
0 2 * * * /opt/openclaw/backup.sh >> /var/log/openclaw-backup.log 2>&1

Si OpenClaw incluye una auditoría de seguridad integrada, ejecútala:

npm audit

La arquitectura final

Repasemos lo que has construido. Tu servidor ahora tiene:

  • Sin SSH público — solo accesible vía Tailscale VPN
  • Sin puertos web públicos — nada expuesto a internet
  • Solo autenticación por clave — sin contraseñas que forzar por fuerza bruta
  • Actualizaciones automáticas de seguridad — parches aplicados sin intervención
  • Monitoreo con Fail2ban — IPs abusivas bloqueadas automáticamente
  • Gestión con systemd — reinicio automático ante crash, registro de logs adecuado
  • Respaldos diarios — tus datos están protegidos contra fallos

El servidor solo es alcanzable a través de tu red Tailscale privada. Cada conexión está cifrada de extremo a extremo con WireGuard. Esto es significativamente más seguro que la configuración por defecto con la que la mayoría de los tutoriales te dejan.

La seguridad no es algo que haces una vez. Necesita vivir gratis en tu mente en todo momento.

La alternativa: solo usa un Mac Mini

Después de todo esto — después del hardening de SSH, las reglas del firewall, la malla VPN, los servicios de systemd — debería decirte algo. También podrías simplemente ejecutar OpenClaw en un Mac Mini aislado en tu red local. Sin IP pública. Sin superficie de ataque. Sin factura de VPS. Conéctalo, instala Node.js, clona el repo, ejecútalo.

El enfoque del VPS tiene sentido cuando necesitas acceso remoto desde cualquier lugar, disponibilidad 24/7, o estás ejecutando múltiples servicios. Pero si solo quieres un asistente personal de IA que funcione cuando estás en casa y tienes una máquina de sobra — la opción más simple y segura es un dispositivo en tu red local que no tenga exposición alguna al internet público.

Hay una ironía en gastar dos horas endureciendo un servidor público cuando la configuración más segura es una computadora en tu clóset que el internet no puede ver en absoluto. Elige el enfoque que se ajuste a tus requisitos reales, no el que parezca más impresionante.

La mejor arquitectura de servidor es la que coincide con tu modelo de amenazas, no la que tiene más pasos.

Si quieres ayuda para configurar OpenClaw para tu caso de uso específico — ya sea en un VPS, una máquina local, o una arquitectura multi-servicio más compleja — hago consultoría exactamente en este tipo de infraestructura de IA.

Relacionado: 6 Casos de Uso de OpenClaw: Construye un Segundo Cerebro, Fábrica de Contenido y Más