Laboratorio 11: Clawdbot (OpenClaw) + Telegram + Tailscale (Seguridad)
Unidad: 4/7/12 - Docker, Redes y Seguridad, Troubleshooting
Duracion Estimada: 150-210 minutos
Dificultad: Avanzado
Objetivos
- Levantar OpenClaw Gateway en Docker sobre Ubuntu Server LTS.
- Conectar un bot de Telegram (BotFather) al gateway.
- Aplicar postura minima de seguridad (pairing, mention gating, allowlists).
- Implementar acceso administrativo por Tailscale (red privada) y endurecer firewall.
Requisitos Previos
- VM Ubuntu Server LTS (22.04 o 24.04) con acceso SSH.
- Lab 4B completado (Docker + Docker Compose v2 instalados) o equivalente.
- Cuenta de Telegram.
- Cuenta de Tailscale (admin del tailnet) o acceso a un tailnet existente.
Vas a trabajar con tokens/keys (Telegram y Tailscale).
Lo que podria salir mal: - Si se filtra el token del bot, un atacante puede controlar el bot. - Si se filtra un auth key de Tailscale, un atacante puede unir dispositivos a tu tailnet.
Como prevenirlo: 1. Usa placeholders en apuntes: **TELEGRAM_BOT_TOKEN**, **TAILSCALE_AUTHKEY**. 2. Guarda secretos en archivos 600 (root-only) y no los subas al repo. 3. Usa claves efimeras (ephemeral) y tags/ACLs en Tailscale.
Arquitectura del laboratorio (simplificada)
- Ubuntu Server LTS (VM): host donde corre Docker y Tailscale.
- OpenClaw Gateway (Docker): hace polling al Bot API de Telegram (no requiere puertos entrantes desde Internet).
- Tailscale: acceso privado al host para administracion (SSH, logs, health checks).
Paso 1: Preparar el servidor (actualizacion + utilidades)
- 1
- apt update actualiza el indice de paquetes.
- 2
- apt upgrade aplica actualizaciones del sistema.
- 3
- apt install instala utilidades para el resto del lab.
Paso 2: Descargar OpenClaw y levantar el Gateway en Docker
- 1
- git clone descarga el repo oficial de OpenClaw.
- 2
- cd openclaw entra al directorio del proyecto.
- 3
-
docker-setup.sh deja el gateway listo via Docker Compose (y genera
.env).
Verifica que el contenedor este arriba:
BASH
1$ docker compose ps- 1
- docker compose ps confirma servicios, estado y puertos publicados.
Paso 3: Crear el bot de Telegram (BotFather) y guardar el token
En Telegram:
- Busca
@BotFather. - Ejecuta
/newbot. - BotFather te entrega un token tipo
123456789:AA....
En el servidor, guarda el token como secreto (archivo root-only):
BASH
- 1
- install -d crea un directorio solo accesible por root.
- 2
- secrets.env guarda el token (placeholder en el ebook; en tu VM usa el token real).
- 3
-
ls -la verifica permisos (deberia ser
-rw-------).
Paso 4: Conectar Telegram al Gateway
Ejecuta el comando de registro del canal Telegram usando el CLI de OpenClaw.
BASH
- 1
- set -a exporta variables del shell (para este ejemplo).
- 2
- source secrets.env carga el token desde el archivo.
- 3
- set +a vuelve al modo normal.
Ahora registra el canal:
BASH
1$ sudo bash -lc 'source /etc/clawdbot/secrets.env; cd openclaw && docker compose run --rm openclaw-cli channels add --channel telegram --token "$TELEGRAM_BOT_TOKEN"'- 1
- channels add (telegram) registra el token para que el gateway haga polling al Bot API.
Paso 5: Postura minima de seguridad (pairing + mention gating + allowlists)
Aplica (o valida) estos criterios minimos:
- DMs en modo pairing.
- Grupos con requireMention: true.
- Grupos/usuarios restringidos por allowlist (segun tu politica).
Config conceptual (referencia):
JSON5
{
channels: {
telegram: {
enabled: true,
dmPolicy: "pairing",
groups: { "*": { requireMention: true } },
},
},
}
- 1
- dmPolicy + requireMention reduce superficie: no responde a DMs desconocidos ni a grupos sin mencion.
Prueba el flujo de pairing:
- Desde Telegram, manda un DM al bot.
- En el servidor, lista solicitudes:
- 1
- cd openclaw usa el compose correcto.
- 2
- pairing list muestra solicitudes pendientes.
Aprueba el codigo (usa el codigo real que te entregue el CLI):
BASH
- 1
- cd openclaw mantiene contexto.
- 2
- pairing approve habilita el DM para ese usuario.
Paso 6: Instalar Tailscale en Ubuntu Server LTS
- 1
- install.sh instala Tailscale desde el repositorio oficial.
- 2
- tailscale version valida que quedo instalado.
Une el servidor al tailnet (usa un auth key real en tu VM):
BASH
- 1
-
tailscale up une el host al tailnet;
--sshhabilita Tailscale SSH (opcional). - 2
- tailscale status muestra nodos y estado.
- 3
- tailscale ip -4 entrega la IP privada del host en el tailnet.
Para seguridad, usa auth keys efimeras (ephemeral) y tags/ACLs.
Casos de uso: - Laboratorios temporales (evitar llaves permanentes). - Separar servidores por rol con tags (tag:clawdbot).
Cuando aplicar: - Cada vez que agregas un servidor a tu tailnet.
Paso 7: Endurecer acceso de red (UFW + solo Tailscale)
Objetivo: dejar el host accesible para administracion solo por Tailscale.
- Activa UFW en modo seguro:
BASH
- 1
- default deny incoming cierra trafico entrante por defecto.
- 2
- default allow outgoing permite salidas (Docker pulls, Telegram polling, updates).
- 3
- allow in on tailscale0 permite SSH solo por la interfaz privada de Tailscale.
- 4
- ufw enable activa el firewall.
- 5
- ufw status verbose evidencia reglas y estado.
- Confirma que OpenClaw no necesita puertos publicados al publico:
- 1
- cd ubica el stack.
- 2
- docker compose ps revisa si hay puertos expuestos innecesarios.
- 3
- ss -lntp evidencia puertos en escucha.
Paso 8: Verificacion (salud + logs)
BASH
- 1
- cd mantiene contexto del compose.
- 2
- health valida que el gateway responde correctamente.
- 3
- docker compose logs muestra errores de token, rate limits, red, etc.
Paso 9 (opcional): Acceso por Tailscale desde tu equipo (Multi-OS)
BASH
- 1
- install.sh instala el cliente.
- 2
- tailscale up autentica el equipo en tu tailnet.
- 3
- ssh conecta usando la IP privada de Tailscale.
BASH
- 1
- brew install –cask instala la app.
- 2
- open -a abre Tailscale para login.
- 3
- ssh conecta via tailnet.
Entregables (Evidencia)
docker compose psdel stack OpenClaw.- Evidencia de canal Telegram registrado (salida de
channels addochannels status). - Evidencia de pairing (list + approve).
tailscale statusytailscale ip -4.ufw status verbosemostrando SSH permitido solo portailscale0.- Logs del gateway (
docker compose logs -n 200 openclaw-gateway).