Безопасный деплой OpenClaw на VPS

13 мин чтения·Matthieu|

Установка и защита OpenClaw на VPS: аутентификация шлюза, TLS reverse proxy, Docker-песочница, фаервол и systemd-изоляция. Каждый шаг с командой проверки.

OpenClaw - это open-source, self-hosted AI-ассистент, который подключается к мессенджерам (WhatsApp, Telegram, Discord, Slack, Signal) и провайдерам AI-моделей. Он запускает Gateway-процесс на сервере, принимает сообщения, выполняет действия агента через инструменты и отправляет ответы. Все данные остаются на твоей инфраструктуре.

Этот гайд описывает деплой с акцентом на безопасность на VPS с Ubuntu 24.04. Ты захарденишь ОС, установишь OpenClaw, настроишь аутентификацию шлюза, поднимешь Nginx с TLS как reverse proxy, исправишь обход фаервола Docker/UFW, включишь Docker-песочницу, ограничишь политику инструментов и запустишь шлюз как hardened systemd-сервис.

Почему безопасность OpenClaw важна на VPS?

OpenClaw запускает AI-агентов, которые могут выполнять shell-команды, читать файлы и ходить в интернет с твоего сервера. Неправильно настроенный инстанс дает атакующим те же возможности. Это не теория.

В начале 2026 года исследователи нашли более 42 000 инстансов OpenClaw, торчащих в публичный интернет. 63% были уязвимы для удаленной эксплуатации. CVE-2026-25253 (CVSS 8.8) позволял выполнить удаленный код в один клик через утечку auth-токена по вредоносной ссылке. Атакующий мог украсть токен шлюза, подключиться по WebSocket, отключить подтверждения, выйти из Docker-песочницы и выполнить произвольные команды.

Фикс появился в версии 2026.1.29, но одного патча недостаточно. Безопасность требует эшелонированной защиты: сетевая изоляция, аутентификация, TLS, песочница и ограничение инструментов работают вместе. Один пропущенный слой (например, аутентификация шлюза без фаервола) оставляет прямой путь к компрометации.

Что нужно перед началом?

Требование Детали
VPS Ubuntu 24.04, 4+ vCPU, минимум 8 ГБ RAM
Доменное имя A-запись, указывающая на IP твоего VPS (например, openclaw.example.com)
SSH-доступ Настроена аутентификация по ключам
API-ключ AI-провайдера Anthropic, OpenAI или Google Gemini
Node.js Версия 22 или новее
Docker Engine 20+ с плагином Compose

Если нужна помощь с провижинингом VPS или настройкой SSH-ключей, смотри Secure a Linux VPS.

Как захарденить VPS перед установкой OpenClaw?

Перед установкой чего-либо заблокируй ОС. Если ты уже прошел Secure a Linux VPS и SSH Security Configuration, переходи к следующему разделу.

Создай выделенного пользователя

Запускать сервисы от root - лишний риск. Создай системного пользователя openclaw:

sudo useradd -r -m -s /bin/bash openclaw

Эта команда создает системный аккаунт с домашней директорией. OpenClaw хранит конфигурацию в ~/.openclaw, поэтому домашняя директория обязательна.

Настрой UFW

Установи и включи фаервол до того, как выставлять какие-либо сервисы:

sudo apt update && sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable

Проверь правила:

sudo ufw status verbose

Ты должен увидеть три разрешенных порта и политику deny по умолчанию для входящего трафика. Порт 18789 (шлюз OpenClaw) намеренно отсутствует. Шлюз биндится только на localhost и работает за Nginx.

Установи fail2ban

sudo apt update && sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban

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

sudo systemctl status fail2ban

Вывод должен показать active (running). fail2ban мониторит SSH-логи и банит IP после повторных неудачных попыток входа.

Как установить OpenClaw на Ubuntu?

OpenClaw поддерживает два метода установки: npm (напрямую) и Docker. Оба описаны ниже. Выбери один. Docker рекомендуется для VPS-деплоев, потому что контейнерная изоляция ограничивает зону поражения при компрометации процесса агента.

Вариант A: Установка через Docker (рекомендуется)

Установи Docker, если еще не установлен:

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:

sudo usermod -aG docker openclaw

Важно: членство в группе docker дает эквивалент root-доступа на хосте. Это нужно для Docker-функциональности OpenClaw, но это значит, что пользователь openclaw может управлять всеми контейнерами в системе. Харденинг systemd и изоляция песочницы ниже ограничивают то, что процесс OpenClaw реально может делать.

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

sudo -u openclaw -i

Склонируй репозиторий и запусти setup с официальным pre-built образом:

git clone https://github.com/openclaw/openclaw.git ~/openclaw-src
cd ~/openclaw-src
OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest ./docker-setup.sh

Установка OPENCLAW_IMAGE говорит скрипту тянуть pre-built образ из GitHub Container Registry вместо сборки из исходников. Скрипт запускает onboarding и стартует шлюз через Docker Compose.

Шлюз внутри контейнера биндится на все интерфейсы по умолчанию (режим lan). Это правильно для Docker-деплоев, потому что Docker port mapping должен достучаться до шлюза внутри контейнера. Внешний доступ блокируется на уровне хоста через правила DOCKER-USER в iptables (рассмотрены ниже).

Проверь, что шлюз запущен:

curl -fsS http://127.0.0.1:18789/healthz

Ответ 200 OK подтверждает, что шлюз работает. Эндпоинт /readyz подтверждает готовность принимать соединения:

curl -fsS http://127.0.0.1:18789/readyz

Вариант B: Установка через npm

Установи Node.js 22 через NodeSource:

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

Проверь версию:

node --version

Вывод должен показать v22.x.x или новее.

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

sudo -u openclaw -i
npm install -g openclaw@latest

Запусти onboarding:

openclaw onboard

Выбери loopback для режима привязки. Мастер настройки генерирует auth-токен шлюза и сохраняет его в ~/.openclaw/openclaw.json.

Запусти шлюз:

openclaw gateway start

Проверь:

curl -fsS http://127.0.0.1:18789/healthz

Проверь привязку шлюза

Посмотри, на чем слушает шлюз:

ss -tulpn | grep 18789

Для npm-установок: вывод должен показать 127.0.0.1:18789, а не 0.0.0.0:18789. Если видишь 0.0.0.0, останови шлюз и установи gateway.bind в "loopback" в openclaw.json.

Для Docker-установок: ты увидишь 0.0.0.0:18789 от процесса docker-proxy. Это нормально. Docker port mapping публикует порт на всех интерфейсах хоста, чтобы localhost-трафик мог достучаться до контейнера. Правила DOCKER-USER в iptables (описаны в разделе фаервола ниже) блокируют внешний доступ на сетевом уровне.

Заблокируй права доступа к файлам

Файл конфигурации содержит auth-токен и API-ключи:

chmod 700 /home/openclaw/.openclaw
chmod 600 /home/openclaw/.openclaw/openclaw.json

Проверь:

ls -la /home/openclaw/.openclaw/openclaw.json

Ты должен увидеть -rw-------. Для npm-установок владелец - openclaw. Для Docker-установок владелец может отображаться как uid 1000 (пользователь node внутри контейнера). Это нормально и нужно, чтобы контейнер мог читать конфиг.

Как настроить аутентификацию шлюза?

Шлюз OpenClaw требует аутентификацию по умолчанию. Если не настроен ни токен, ни пароль, шлюз отклоняет WebSocket-соединения (fail-closed). Мастер настройки генерирует токен автоматически.

OpenClaw поддерживает три режима аутентификации:

Режим Как работает Для чего
token Общий bearer-токен в каждом запросе VPS для одного пользователя (рекомендуется)
password Аутентификация по паролю Настройки с несколькими устройствами
trusted-proxy Делегирует аутентификацию reverse proxy Enterprise/SSO

Установи надежный токен

Если хочешь заменить автоматически сгенерированный токен, сгенерируй новый:

openssl rand -base64 32

Сохрани его как переменную окружения вместо хардкода в конфигурационном файле. Создай файл окружения:

sudo mkdir -p /etc/openclaw
sudo tee /etc/openclaw/env > /dev/null << 'EOF'
OPENCLAW_GATEWAY_TOKEN=your-generated-token-here
EOF
sudo chmod 600 /etc/openclaw/env
sudo chown openclaw:openclaw /etc/openclaw/env

Отредактируй ~/.openclaw/openclaw.json, чтобы сослаться на переменную окружения:

{
  gateway: {
    bind: "loopback",  // use "loopback" for npm, keep default for Docker
    port: 18789,
    auth: {
      mode: "token",
      token: "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}

OpenClaw поддерживает подстановку ${VARIABLE} в JSON5-конфиге, так что токен читается из окружения при запуске. Для Docker-установок установи переменную OPENCLAW_GATEWAY_TOKEN в файле .env внутри директории openclaw-src. Скрипт docker-setup.sh генерирует этот файл автоматически.

Перезапусти шлюз и проверь, что неаутентифицированные запросы отклоняются:

curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:18789/healthz

Health-эндпоинт возвращает 200 без авторизации (это health check). Чтобы проверить аутентификацию на WebSocket-эндпоинте, посмотри логи шлюза:

Для systemd/npm-установок:

journalctl -u openclaw-gateway --no-pager -n 20

Для Docker-установок:

cd ~/openclaw-src && docker compose logs openclaw-gateway --tail 20

Ищи записи auth required или connection rejected, подтверждающие fail-closed поведение.

Как настроить Nginx как TLS reverse proxy для OpenClaw?

Шлюз биндится на localhost. Nginx стоит перед ним, терминирует TLS и проксирует WebSocket-соединения к шлюзу. Это дает зашифрованные соединения без выставления порта шлюза наружу.

Подробнее о Nginx reverse proxy смотри Nginx Reverse Proxy. Про настройку TLS с Let's Encrypt смотри Nginx SSL/TLS with Let's Encrypt.

Установи Nginx и Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Получи TLS-сертификат

sudo certbot --nginx -d openclaw.example.com

Замени openclaw.example.com на свой домен. Certbot настраивает автоматическое обновление.

Настрой reverse proxy

Создай серверный блок Nginx:

sudo tee /etc/nginx/sites-available/openclaw.conf > /dev/null << 'NGINX'
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name openclaw.example.com;

    ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Hide Nginx version
    server_tokens off;

    # WebSocket proxy to OpenClaw gateway
    location / {
        proxy_pass http://127.0.0.1:18789;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Overwrite X-Forwarded-For, do not append
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;

        # Timeouts for long-running agent sessions
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name openclaw.example.com;
    return 301 https://$host$request_uri;
}
NGINX

Обрати внимание: proxy_set_header X-Forwarded-For $remote_addr использует $remote_addr (перезапись), а не $proxy_add_x_forwarded_for (дополнение). Это намеренно. Дополнение позволяет клиентам внедрять фальшивые IP в заголовок. Документация OpenClaw специально рекомендует перезапись.

Включи сайт и проверь конфиг:

sudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/
sudo nginx -t

Вывод должен показать syntax is ok и test is successful. Перезагрузи Nginx:

sudo systemctl reload nginx

Настрой OpenClaw для доверия прокси

Скажи шлюзу доверять заголовкам от Nginx, добавив trustedProxies в ~/.openclaw/openclaw.json:

{
  gateway: {
    bind: "loopback",  // use "loopback" for npm, keep default for Docker
    port: 18789,
    trustedProxies: ["127.0.0.1"],
    auth: {
      mode: "token",
      token: "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}

Перезапусти шлюз для применения. Проверь работу TLS со своей локальной машины (не с сервера):

curl -I https://openclaw.example.com/healthz

Ты должен получить ответ 200 по HTTPS. Больше про харденинг Nginx смотри в гайде по безопасности Nginx (скоро).

Как исправить обход фаервола Docker и UFW?

Docker напрямую манипулирует iptables, обходя UFW полностью. Если ты запускаешь OpenClaw с Docker и публикуешь порт, этот порт доступен из интернета, даже если UFW его блокирует. Это одна из самых частых ошибок конфигурации в Docker-деплоях.

Полное объяснение проблемы смотри в Docker UFW Firewall Fix.

Исправление использует цепочку DOCKER-USER, которую Docker обрабатывает до форвардинга трафика в контейнеры.

Заблокируй весь внешний доступ к Docker-портам

sudo iptables -I DOCKER-USER -i eth0 -j DROP

Это дропает весь трафик с внешнего интерфейса (eth0), который Docker иначе перенаправил бы в контейнеры. Поправь имя интерфейса, если у тебя другое (проверь через ip link show).

Разреши трафик через loopback

Nginx на том же хосте должен достучаться до контейнера шлюза через localhost:

sudo iptables -I DOCKER-USER -i lo -j ACCEPT

Разреши установленные соединения

sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Сделай правила постоянными

sudo apt install -y iptables-persistent
sudo netfilter-persistent save

Проверь правила

sudo iptables -L DOCKER-USER -n -v

Ты должен увидеть правила ACCEPT для loopback и установленных соединений выше правила DROP для eth0. Порядок важен: iptables обрабатывает правила сверху вниз.

Проверь с внешней машины, что порт шлюза недоступен:

nmap -p 18789 your-server-ip

Порт 18789 должен показать filtered или closed, а не open.

Как включить Docker-песочницу для OpenClaw?

Docker-песочница запускает выполнение инструментов агента внутри изолированных контейнеров. Когда агент выполняет shell-команду или пишет файл, это происходит в одноразовом контейнере, а не на хосте.

Добавь конфигурацию песочницы в ~/.openclaw/openclaw.json:

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        scope: "session",
        workspaceAccess: "none",
        docker: {
          image: "openclaw-sandbox:bookworm-slim",
          network: "none",
          user: "1000:1000",
          memory: "1g",
          cpus: 1
        }
      }
    }
  }
}

Что делает каждая настройка:

Настройка Значение Эффект
mode "all" Каждая сессия запускается в песочнице, без исключений
scope "session" Каждая чат-сессия получает свой контейнер
workspaceAccess "none" Песочница не видит рабочее пространство агента
network "none" Нет сетевого доступа из песочницы (предотвращает утечку данных)
memory "1g" Ограничивает RAM контейнера до 1 ГБ
cpus 1 Ограничивает контейнер 1 ядром CPU

Собери образ песочницы:

cd ~/openclaw-src
scripts/sandbox-setup.sh

Проверь конфигурацию песочницы:

openclaw sandbox explain

Для Docker-установок запусти через compose:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain

Эта команда выводит эффективный режим песочницы, scope, доступ к рабочему пространству, политику инструментов и переопределения. Убедись, что mode: all и network: none присутствуют в выводе.

Если нужен сетевой доступ для конкретных инструментов (например, web_search), предоставляй его выборочно для конкретного агента, а не меняй глобальный default. Смотри раздел о политике инструментов ниже.

OpenClaw блокирует опасные источники bind mount по умолчанию: /var/run/docker.sock, /etc, /proc, /sys и /dev запрещены. Не переопределяй это кастомными bind mount, которые заново их открывают. Если контейнеру песочницы нужен доступ к данным хоста, используй read-only монтирование с явными путями:

{
  agents: {
    defaults: {
      sandbox: {
        docker: {
          binds: ["/home/openclaw/shared-data:/data:ro"]
        }
      }
    }
  }
}

Суффикс :ro гарантирует, что контейнер может читать данные, но не может их изменять.

Как ограничить политику инструментов OpenClaw?

Политика инструментов контролирует, какие инструменты могут использовать агенты. У песочницы свой фильтр инструментов, отдельный от разрешений на уровне агента. Deny всегда побеждает allow.

Политика deny по умолчанию

Установи ограничительный default в ~/.openclaw/openclaw.json:

{
  tools: {
    deny: ["exec", "write", "edit", "browser"],
    allow: ["read", "web_search"]
  }
}

Это блокирует выполнение команд, запись файлов, редактирование файлов и доступ к браузеру по умолчанию. Агенты все еще могут читать файлы и искать в интернете.

Профили для конкретных агентов

Переопределяй дефолты для агентов, которым нужен больший доступ. Добавь профили в agents.list:

{
  agents: {
    list: [
      {
        name: "coding-agent",
        tools: {
          allow: ["exec", "read", "write", "edit"],
          deny: ["browser"]
        },
        sandbox: {
          mode: "all",
          docker: {
            network: "none"
          }
        }
      },
      {
        name: "messaging-agent",
        tools: {
          allow: ["read", "web_search"],
          deny: ["exec", "write", "edit", "browser"]
        }
      }
    ]
  }
}

coding-agent может выполнять команды, но только внутри контейнера-песочницы без сети. messaging-agent может читать и искать, но не может ничего выполнять.

Отключи elevated mode

Elevated mode позволяет агентам выполнять команды напрямую на хосте шлюза, обходя песочницу. Отключи его:

{
  tools: {
    elevated: {
      enabled: false
    }
  }
}

Если оставишь elevated mode включенным, любой пользователь, который может общаться с агентом, потенциально может выполнять команды на хосте. На VPS это remote code execution.

Multi-user DM-изоляция

Если несколько человек будут писать твоему инстансу OpenClaw, включи per-peer DM scoping. По умолчанию все DM используют одну общую сессию. Это значит, что Пользователь A может видеть контекст из разговора Пользователя B.

{
  session: {
    dmScope: "per-peer"
  }
}

Это дает каждому отправителю собственную сессию с изолированным контекстом и контейнером-песочницей.

Как запустить OpenClaw как hardened systemd-сервис?

Запуск OpenClaw под systemd означает автозапуск при загрузке, перезапуск при падении и изоляцию процесса через директивы харденинга.

Создай unit-файл сервиса

Для Docker-установок создай следующий unit-файл:

sudo tee /etc/systemd/system/openclaw-gateway.service > /dev/null << 'EOF'
[Unit]
Description=OpenClaw Gateway
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw/openclaw-src
EnvironmentFile=/etc/openclaw/env
ExecStart=/usr/bin/docker compose up --no-log-prefix openclaw-gateway
ExecStop=/usr/bin/docker compose down
Restart=always
RestartSec=10

# Security hardening
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.openclaw
CapabilityBoundingSet=
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictSUIDSGID=yes
MemoryMax=4G

[Install]
WantedBy=multi-user.target
EOF

Для npm-установок замени строки ExecStart и ExecStop:

ExecStart=/usr/bin/openclaw gateway start --foreground
ExecStop=/usr/bin/openclaw gateway stop

И убери строку Requires=docker.service.

Что делает каждая директива харденинга:

Директива Защита
NoNewPrivileges Запрещает процессу получать дополнительные привилегии через setuid/setgid
PrivateTmp Дает сервису свой /tmp, невидимый для других процессов
ProtectSystem=strict Монтирует всю файловую систему read-only, кроме явных ReadWritePaths
ProtectHome=read-only Запрещает запись в любую домашнюю директорию, кроме разрешенного пути
CapabilityBoundingSet= Сбрасывает все Linux capabilities (пустое множество)
ProtectKernelTunables Блокирует запись в /proc/sys, /sys
ProtectKernelModules Запрещает загрузку модулей ядра
MemoryMax=4G Убивает сервис при превышении 4 ГБ RAM, предотвращая OOM на хосте

Включи и запусти

sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway

enable заставляет запускаться при загрузке. --now запускает немедленно.

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

sudo systemctl status openclaw-gateway

Вывод должен показать active (running). Проверь логи на ошибки:

journalctl -u openclaw-gateway -f --no-pager -n 50

Как проверить, что весь деплой безопасен?

Пройди этот чеклист после деплоя, чтобы убедиться, что каждый слой работает.

1. Запусти встроенный аудит безопасности OpenClaw

Для npm-установок:

sudo -u openclaw openclaw security audit --deep

Для Docker-установок:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit --deep

Это выявляет типичные ошибки конфигурации: неаутентифицированное сетевое воздействие, повышенные разрешения инструментов, проблемы с правами файлов. Исправь все предупреждения перед продолжением.

2. Проверь привязку шлюза

ss -tulpn | grep 18789

npm-установки: ожидается 127.0.0.1:18789. Не 0.0.0.0:18789.

Docker-установки: ожидается 0.0.0.0:18789 от docker-proxy. Это нормально. Внешний доступ блокируется правилами DOCKER-USER в iptables.

3. Внешнее сканирование портов

С твоей локальной машины (не с сервера):

nmap -p 18789 your-server-ip

Ожидается: filtered или closed.

4. Проверь TLS

curl -I https://openclaw.example.com/healthz

Ожидается: 200 по HTTPS с валидным сертификатом.

5. Проверь аутентификацию

curl -s -o /dev/null -w "%{http_code}" https://openclaw.example.com/

Шлюз должен требовать аутентификацию для не-health эндпоинтов.

6. Проверь изоляцию песочницы

Для npm-установок:

sudo -u openclaw openclaw sandbox explain

Для Docker-установок:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain

Убедись в mode: all, network: none и отсутствии elevated-переопределений.

7. Проверь права доступа к файлам

ls -la /home/openclaw/.openclaw/openclaw.json
ls -la /etc/openclaw/env

Оба должны показывать права 600. Файл env принадлежит openclaw. Для Docker-установок openclaw.json может принадлежать uid 1000 (пользователь node в контейнере).

8. Проверь харденинг systemd

systemd-analyze security openclaw-gateway

Это оценивает свойства безопасности сервиса. Стремись к оценке около 5.0 или ниже (чем ниже, тем безопаснее). Сервисы на Docker обычно получают около 5.0-5.5, потому что Docker требует доступ к пространствам имен и интерфейсам устройств. Директивы харденинга выше снижают оценку с дефолтных ~9.6 до примерно 5.2.

9. Проверь правила UFW и DOCKER-USER

sudo ufw status
sudo iptables -L DOCKER-USER -n -v

UFW должен показать только порты 22, 80 и 443. Цепочка DOCKER-USER должна дропать внешний трафик.

10. Проверь открытые сервисы

ss -tulpn

Должны быть видны только SSH (22), Nginx (80, 443) и OpenClaw (127.0.0.1:18789 для npm или 0.0.0.0:18789 через docker-proxy для Docker).

Как обновлять и бэкапить OpenClaw?

Скрытие версии

Скрой версию OpenClaw в ответах шлюза. Раскрытие версии помогает атакующим нацеливаться на известные уязвимости. В ~/.openclaw/openclaw.json:

{
  gateway: {
    exposeVersion: false
  }
}

В сочетании с директивой server_tokens off;, уже присутствующей в конфиге Nginx, это предотвращает fingerprinting как reverse proxy, так и приложения.

Обновления

OpenClaw выпускает обновления часто. Проверь текущую версию:

openclaw --version

Для Docker-установок:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js --version

Для обновления Docker-установки:

cd ~/openclaw-src
git pull
docker compose pull
docker compose up -d openclaw-gateway

Для обновления npm-установки:

npm update -g openclaw

После обновления перезапусти шлюз и заново запусти аудит безопасности:

sudo systemctl restart openclaw-gateway

Для npm:

sudo -u openclaw openclaw security audit

Для Docker:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit

Читай release notes перед обновлением. Ломающие изменения в формате конфига бывают. Версия 2026.3.7 ввела обязательное поле gateway.auth.mode, когда присутствуют и token, и password. Если пропустишь его после обновления, потеряешь доступ к шлюзу.

Бэкапы

Забэкапь директорию конфигурации:

sudo tar czf /root/openclaw-backup-$(date +%Y%m%d).tar.gz /home/openclaw/.openclaw

Храни бэкапы вне сервера. Директория конфигурации содержит auth-токены, конфигурации агентов и состояние диалогов. Защищай бэкапы так же, как живой конфиг: шифруй их gpg или храни в зашифрованном разделе.

Управление логами

Просмотр логов в реальном времени:

journalctl -u openclaw-gateway -f

Логи OpenClaw могут содержать фрагменты диалогов. Установи retention логов для ограничения экспозиции:

sudo tee /etc/systemd/journald.conf.d/openclaw.conf > /dev/null << 'EOF'
[Journal]
MaxRetentionSec=7d
MaxFileSec=1d
EOF
sudo systemctl restart systemd-journald

Что-то пошло не так?

Симптом Вероятная причина Исправление
Шлюз не запускается Порт 18789 уже занят ss -tulpn | grep 18789 чтобы найти конфликтующий процесс
WebSocket-соединения не проходят через Nginx Отсутствуют заголовки Upgrade и Connection Проверь директивы proxy_set_header в конфиге Nginx
Контейнеры песочницы не запускаются Права на Docker socket Убедись, что пользователь openclaw в группе docker, и перелогинься
openclaw security audit показывает предупреждения Дрифт конфига после обновления Изучи вывод аудита и примени рекомендованные исправления
Шлюз доступен с внешнего IP Обход Docker/UFW Добавь правила DOCKER-USER в iptables, как описано выше
Ошибки TLS-сертификата Не удалось обновить Certbot Запусти sudo certbot renew --dry-run для диагностики
OOM-kills на VPS Отсутствует MemoryMax в unit-файле systemd Добавь MemoryMax=4G в секцию [Service]

Copyright 2026 Virtua.Cloud. Vse prava zashchishcheny.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS