Безопасная установка OpenClaw: Закрываем все порты

Безопасная установка OpenClaw: Закрываем все порты

Пошаговый гайд по установке OpenClaw на VPS с максимальной безопасностью. Настраиваем firewall, SSH и изолируем gateway от внешнего мира.

Безопасная установка OpenClaw

Примечание: OpenClaw ранее назывался MoltBot и Clawdbot. Все команды взаимозаменяемы (openclaw, moltbot, clawdbot).

OpenClaw — мощный AI-ассистент, но любой сервер, торчащий в интернет, это потенциальная уязвимость. В этом гайде настроим OpenClaw так, чтобы ни один порт не был открыт наружу, кроме минимально необходимых.

Что получим в итоге

  • ✅ SSH только через нестандартный порт + ключи (пароли отключены)
  • ✅ OpenClaw gateway на 127.0.0.1 (недоступен извне)
  • ✅ Telegram/WhatsApp работают через исходящие соединения
  • ✅ UFW firewall с минимальными правилами
  • ✅ Fail2ban для защиты от брутфорса

Требования

  • VPS с Ubuntu 22.04+ (DigitalOcean, Hetzner, любой)
  • Доменное имя (опционально, для webhooks)
  • Node.js 22+

Шаг 1: Первоначальная настройка сервера

Создаём пользователя (не работаем под root)

# Подключаемся как root
ssh root@your-server-ip

# Создаём пользователя
adduser clawbot
usermod -aG sudo clawbot

# Копируем SSH ключи
mkdir -p /home/clawbot/.ssh
cp ~/.ssh/authorized_keys /home/clawbot/.ssh/
chown -R clawbot:clawbot /home/clawbot/.ssh
chmod 700 /home/clawbot/.ssh
chmod 600 /home/clawbot/.ssh/authorized_keys

Настраиваем SSH (меняем порт, отключаем пароли)

sudo nano /etc/ssh/sshd_config

Меняем/добавляем:

Port 2222                    # Нестандартный порт
PermitRootLogin no           # Запрет root
PasswordAuthentication no    # Только ключи
PubkeyAuthentication yes
AllowUsers clawbot           # Только наш пользователь
sudo systemctl restart sshd

⚠️ Важно: Не закрывай текущую сессию! Открой новый терминал и проверь подключение:

ssh -p 2222 clawbot@your-server-ip

Шаг 2: Настройка Firewall (UFW)

Базовые правила

# Сбрасываем все правила
sudo ufw --force reset

# Политика по умолчанию: блокировать входящие
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Разрешаем только SSH на нашем порту
sudo ufw allow 2222/tcp comment 'SSH'

# Включаем firewall
sudo ufw enable

# Проверяем
sudo ufw status verbose

Должно быть:

Status: active

To                         Action      From
--                         ------      ----
2222/tcp                   ALLOW       Anywhere

Никаких 80, 443, 18789! OpenClaw не нуждается во входящих соединениях для Telegram.


Шаг 3: Установка OpenClaw

Устанавливаем Node.js 22

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

Устанавливаем OpenClaw

npm install -g openclaw@latest

Запускаем wizard

openclaw onboard --install-daemon

Wizard спросит:

  1. API ключ — вставляем ключ Anthropic/OpenAI
  2. Модель — выбираем (claude-sonnet-4 оптимально)
  3. Каналы — выбираем Telegram

Шаг 4: Конфигурация безопасности OpenClaw

Редактируем конфиг

nano ~/.openclaw/openclaw.yaml

Критически важные настройки:

gateway:
  # Слушаем ТОЛЬКО localhost — недоступен извне
  host: "127.0.0.1"
  port: 18789
  
  # Аутентификация
  auth:
    token: "СГЕНЕРИРУЙ_ДЛИННЫЙ_ТОКЕН_32+_СИМВОЛОВ"
    
  # DM Pairing — одобряем новых пользователей вручную
  dmPairing:
    enabled: true
    approvalMode: "manual"  # или "auto" если доверяешь
    
agent:
  model: "anthropic/claude-sonnet-4"
  
  # Ограничиваем что может делать агент
  tools:
    exec:
      security: "allowlist"  # Только разрешённые команды
      allowedCommands:
        - "ls"
        - "cat"
        - "grep"
        - "npm"
        - "node"
      blockedCommands:
        - "rm -rf"
        - "sudo"
        - "chmod 777"

Генерируем безопасный токен

openssl rand -hex 32

Шаг 5: Настройка Telegram (без открытых портов)

OpenClaw использует long polling для Telegram — это исходящие соединения. Никакие порты открывать не нужно!

Получаем токен бота

  1. Открываем @BotFather в Telegram
  2. /newbot → называем бота
  3. Копируем токен

Добавляем в конфиг

channels:
  telegram:
    enabled: true
    token: "YOUR_BOT_TOKEN"
    # Polling mode — никаких webhooks
    polling: true

Шаг 6: Запускаем как systemd service

Создаём service файл

sudo nano /etc/systemd/system/openclaw.service
[Unit]
Description=OpenClaw Gateway
After=network.target

[Service]
Type=simple
User=clawbot
WorkingDirectory=/home/clawbot
ExecStart=/usr/bin/openclaw gateway
Restart=always
RestartSec=10

# Безопасность
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/clawbot/.openclaw
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Запускаем

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

# Проверяем
sudo systemctl status openclaw

Шаг 7: Fail2ban для SSH

sudo apt install fail2ban -y

sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
sudo systemctl restart fail2ban

Проверка безопасности

Сканируем порты извне

С другого сервера или через онлайн-сканер:

nmap -Pn your-server-ip

Должен показать только порт 2222 (SSH). Если видишь что-то ещё — проверяй UFW.

Проверяем что OpenClaw не слушает наружу

sudo ss -tlnp | grep openclaw

Должно быть 127.0.0.1:18789 — НЕ 0.0.0.0:18789.


Чек-лист безопасности

  • SSH на нестандартном порту (не 22)
  • Вход только по ключам (PasswordAuthentication no)
  • Root login отключен
  • UFW включен, открыт только SSH
  • OpenClaw слушает на 127.0.0.1
  • Fail2ban настроен
  • Токен gateway — длинный и случайный
  • DM Pairing включен

Troubleshooting

OpenClaw не подключается к Telegram

Проверь исходящие соединения:

curl -s https://api.telegram.org/bot<TOKEN>/getMe

Если ошибка — возможно провайдер блокирует Telegram. Используй proxy в конфиге.

Не могу подключиться по SSH

Если заблокировал себя:

  1. Используй консоль VPS провайдера (обычно есть в панели)
  2. Исправь /etc/ssh/sshd_config
  3. sudo systemctl restart sshd

Итог

Теперь у тебя OpenClaw, который:

  • Недоступен напрямую из интернета
  • Защищён firewall и fail2ban
  • Работает через исходящие соединения
  • Готов к продакшену

В следующих гайдах разберём настройку WhatsApp, Discord и продвинутые сценарии.