Безопасный деплой OpenClaw на VPS
Установка и защита 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