Канал

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

Запуск OpenClaw на VPS даёт главное преимущество --- агент работает 24/7, доступен из любого мессенджера и не зависит от того, включён ли ваш компьютер. Но это же создаёт серьёзную проблему: ваш агент оказывается в интернете, доступный для всех. Без правильной настройки он станет одним из тех 42 665 открытых экземпляров, которые обнаружили исследователи безопасности.

Этот гайд проведёт вас через все шаги --- от чистого сервера до полностью защищённого агента. Каждый шаг обязателен. Пропуск любого из них оставляет дыру в безопасности.

Что понадобится

  • VPS с Ubuntu 22.04 или новее --- подойдёт любой провайдер: Timeweb, Selectel, Hetzner, DigitalOcean и другие.
  • Минимум 2 ГБ оперативной памяти --- для Docker, Nginx и самого OpenClaw.
  • Root-доступ к серверу --- нужен для первоначальной настройки.
  • Доменное имя (опционально, но рекомендуется) --- для настройки HTTPS через Let’s Encrypt.

Если у вас ещё не установлен OpenClaw локально и вы хотите сначала познакомиться с ним, начните с инструкции по установке на Mac, Windows или Linux.

Шаг 1. Создание отдельного пользователя

Никогда не запускайте OpenClaw от имени root. Если агент или его скилл скомпрометирован, злоумышленник получит root-доступ ко всему серверу. Отдельный пользователь с ограниченными правами --- первый барьер защиты.

Подключитесь к серверу и создайте пользователя:

adduser openclaw

Система попросит задать пароль и заполнить информацию о пользователе. Пароль задайте сложный (16+ символов), остальные поля можно пропустить.

Добавьте пользователя в группу sudo для выполнения административных команд и в группу docker, которая понадобится позже:

usermod -aG sudo openclaw
usermod -aG docker openclaw

Проверьте, что пользователь создан корректно:

su - openclaw
whoami

Вывод должен быть openclaw. Вернитесь в root-сессию командой exit.

После этого шага у вас отдельный пользователь openclaw с ограниченными правами, от имени которого будет работать агент.

Шаг 2. SSH-ключи и отключение входа по паролю

Пароль для SSH --- это слабое звено. Его можно подобрать брутфорсом. SSH-ключи --- криптографически стойкая альтернатива, которую невозможно угадать.

Генерация ключей на вашем компьютере

На вашем локальном компьютере (не на сервере) выполните:

ssh-keygen -t ed25519 -C "openclaw-vps"

Нажмите Enter, чтобы сохранить ключ в стандартном расположении. Задайте пароль для ключа (passphrase) --- это дополнительный слой защиты на случай, если файл ключа украдут.

Копирование ключа на сервер

ssh-copy-id openclaw@your-server-ip

Замените your-server-ip на IP-адрес вашего сервера. Команда попросит пароль пользователя openclaw --- введите тот, что задали в шаге 1.

Проверьте, что вход по ключу работает:

ssh openclaw@your-server-ip

Если вход произошёл без запроса пароля сервера (только passphrase ключа, если вы его задали) --- ключ настроен верно.

Отключение входа по паролю

Теперь отключите возможность входа по паролю и запретите вход под root. На сервере отредактируйте конфигурацию SSH:

sudo nano /etc/ssh/sshd_config

Найдите и измените (или добавьте) следующие строки:

PasswordAuthentication no
PermitRootLogin no

Перезапустите SSH-сервер:

sudo systemctl restart sshd

Важно: не закрывайте текущую SSH-сессию, пока не убедитесь, что вход по ключу работает. Откройте новый терминал и попробуйте подключиться. Если всё в порядке --- старую сессию можно закрыть.

После этого шага у вас вход на сервер только по SSH-ключу. Пароль отключён, root-доступ по SSH запрещён. Брутфорс-атаки больше не представляют угрозы.

Шаг 3. Настройка файрвола UFW

UFW (Uncomplicated Firewall) --- простой в настройке файрвол для Ubuntu. Он блокирует все входящие соединения, кроме явно разрешённых.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Разберём каждую строку:

  • deny incoming --- по умолчанию блокировать все входящие соединения.
  • allow outgoing --- разрешить все исходящие (агенту нужен доступ к API языковых моделей).
  • allow ssh --- разрешить SSH (порт 22), чтобы вы не потеряли доступ к серверу.
  • allow 80/tcp и allow 443/tcp --- разрешить HTTP и HTTPS для Nginx.
  • enable --- включить файрвол.

Проверьте статус:

sudo ufw status

Вы должны увидеть список разрешённых портов: 22, 80 и 443.

Критически важно: не открывайте порт 18789 (порт gateway OpenClaw по умолчанию) для внешнего доступа. Доступ к нему будет организован через Nginx, который мы настроим в шаге 6.

После этого шага у вас файрвол, который пропускает только SSH, HTTP и HTTPS. Все остальные порты --- включая порт 18789 OpenClaw --- закрыты для внешнего мира.

Шаг 4. Установка Docker

Docker нужен для двух целей: запуск OpenClaw в изолированном контейнере и работа режима песочницы (sandbox).

Установите Docker по официальной инструкции для Ubuntu:

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Убедитесь, что пользователь openclaw добавлен в группу docker (мы сделали это в шаге 1). Если нет:

sudo usermod -aG docker openclaw

Для применения изменений группы нужно перелогиниться:

su - openclaw

Проверьте, что Docker работает без sudo:

docker run hello-world

После этого шага у вас установлен Docker, и пользователь openclaw может запускать контейнеры без root-прав.

Шаг 5. Запуск OpenClaw в Docker

Источник: порядок деплоя основан на официальной документации Docker и гайде по Hetzner VPS.

Переключитесь на пользователя openclaw:

su - openclaw

Подготовка директорий

Создайте директории для конфигурации и рабочей области. Владелец --- uid 1000 (пользователь node внутри контейнера):

mkdir -p ~/.openclaw/workspace
sudo chown -R 1000:1000 ~/.openclaw

Клонирование и сборка

Официальный способ --- клонировать репозиторий OpenClaw и собрать Docker-образ локально:

git clone https://github.com/openclaw/openclaw.git ~/openclaw-repo
cd ~/openclaw-repo

Запуск через docker-setup.sh

./docker-setup.sh

Скрипт автоматически:

  1. Соберёт Docker-образ gateway
  2. Запустит мастер настройки (onboarding) --- здесь вы укажете API-ключ и подключите мессенджер
  3. Запустит gateway через Docker Compose
  4. Сгенерирует токен gateway и запишет его в .env

После завершения gateway будет доступен по адресу http://127.0.0.1:18789/.

Ключевой момент безопасности

В официальном docker-compose.yml gateway по умолчанию привязан к lan. Для VPS критически важно, чтобы порт 18789 не был открыт извне. Доступ к дашборду организуем через Nginx (шаг 6) или SSH-туннель.

Подключение каналов

После запуска gateway настройте мессенджеры через CLI-контейнер:

cd ~/openclaw-repo

# Telegram
docker compose run --rm openclaw-cli channels add --channel telegram --token "<ваш-токен-бота>"

# WhatsApp (по QR-коду)
docker compose run --rm openclaw-cli channels login

Конфигурация песочницы

Добавьте в ~/.openclaw/openclaw.json настройку песочницы для дополнительной изоляции:

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",
      },
    },
  },
}

Проверка

cd ~/openclaw-repo
docker compose logs -f

Вы должны увидеть сообщения о запуске gateway. Нажмите Ctrl + C, чтобы выйти из просмотра логов (контейнер продолжит работать).

После этого шага у вас OpenClaw работает в Docker-контейнере от пользователя node (не root). Порт 18789 доступен только локально.

Шаг 6. Nginx + HTTPS

Nginx выступает обратным прокси: принимает внешние запросы по HTTPS и перенаправляет их на OpenClaw по локальному порту. Это добавляет шифрование и дополнительный слой контроля.

Установка Nginx

sudo apt install -y nginx

Конфигурация

Создайте файл конфигурации:

sudo nano /etc/nginx/sites-available/openclaw

Содержимое:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:18789;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }
}

Замените your-domain.com на ваш домен. Если у вас нет домена, можно использовать IP-адрес, но тогда HTTPS настроить через Let’s Encrypt не получится --- понадобится самоподписанный сертификат.

Активируйте конфигурацию:

sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Команда nginx -t проверяет синтаксис конфигурации. Если она выдаёт ошибку --- не перезапускайте Nginx, сначала исправьте конфигурацию.

Сертификат Let’s Encrypt

Установите Certbot и получите бесплатный SSL-сертификат:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Certbot автоматически настроит обновление сертификата. Проверьте, что автообновление работает:

sudo certbot renew --dry-run

После этого шага у вас Nginx проксирует внешние запросы на OpenClaw через HTTPS. Трафик между клиентами и сервером зашифрован. Прямой доступ к порту 18789 извне по-прежнему закрыт файрволом.

Шаг 7. Мониторинг и автоматические обновления

Сервер настроен и защищён, но безопасность --- это непрерывный процесс. Нужно следить за состоянием агента и своевременно обновлять его.

Просмотр логов

docker compose logs -f --tail 100

Обращайте внимание на: сообщения об ошибках, подозрительные входящие запросы, неожиданные обращения к файловой системе.

Обновление OpenClaw

Поскольку образ собирается локально из репозитория, для обновления:

cd ~/openclaw-repo
git pull
./docker-setup.sh

Скрипт пересоберёт образ и перезапустит gateway. Конфигурация и данные в ~/.openclaw/ сохранятся.

Обновление системных пакетов

Не забывайте обновлять и сам сервер:

sudo apt update && sudo apt upgrade -y

Рекомендуется настроить автоматические обновления безопасности:

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

После этого шага у вас настроено автоматическое обновление контейнера OpenClaw и системных пакетов. Логи доступны для мониторинга.

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

Перед тем как считать настройку завершённой, пройдитесь по этому списку. Каждый пункт должен быть выполнен:

  • Создан отдельный пользователь openclaw (не root)
  • SSH-вход настроен по ключу, вход по паролю отключён
  • PermitRootLogin установлен в no
  • UFW включён, разрешены только порты 22, 80 и 443
  • Порт 18789 не открыт в файрволе
  • Docker установлен, OpenClaw работает в контейнере
  • Порт 18789 слушает только 127.0.0.1 (не 0.0.0.0)
  • Sandbox mode включён в openclaw.json
  • API-ключи хранятся в .env файле с правами 600
  • Nginx настроен как обратный прокси
  • HTTPS-сертификат получен и автообновление работает
  • Watchtower настроен для автоматического обновления контейнера

Если какой-либо пункт не выполнен --- вернитесь к соответствующему шагу. Не запускайте агент в продакшене с незакрытыми пунктами.

Что дальше

Серверная безопасность требует постоянного внимания. Периодически проверяйте логи, следите за обновлениями OpenClaw и обновлениями безопасности Ubuntu. Если вы заметили подозрительную активность --- остановите агента (docker compose down), проанализируйте логи и устраните проблему до повторного запуска.

Следите за OpenClaw на русском

Разбираем обновления, пишем гайды, делимся кейсами

Подписаться на канал Задать вопрос в чате
Присоединяйтесь к сообществу