Rust Руководство

WebRCON в Rust: настройка и безопасность удалённого управления

Настройка безопасного WebRCON в Rust: включение протокола rcon.web, изоляция локального порта и проксирование через Nginx с шифрованием WSS.

WebRCON в Rust: настройка и безопасность удалённого управления

Протокол удалённого управления RCON позволяет администраторам выделенных серверов Facepunch Rust выполнять консольные команды, управлять вайпами, блокировать читеров и транслировать сообщения игрокам без необходимости заходить на сервер через игровой клиент.

В современных сборках Rust устаревший бинарный протокол Source RCON заменён на протокол WebRCON, работающий поверх WebSocket с форматом сообщений JSON. Прямое открытие порта WebRCON в интернет с простым паролем несёт огромные риски: трафик передаётся в открытом виде, а боты непрерывно сканируют порт 28016 методом перебора паролей. В этой статье показано, как настроить WebRCON, изолировать его на локальном интерфейсе и защитить шифрованием WSS через Nginx.

Конфигурация параметров WebRCON при запуске Rust#

Для активации WebRCON используются специфические аргументы командной строки в скрипте запуска сервера Rust (RustDedicated).

Убедитесь, что сервер запускается со следующими параметрами:

bash
./RustDedicated -batchmode \
  +server.port 28015 \
  +rcon.port 28016 \
  +rcon.web 1 \
  +rcon.ip 127.0.0.1 \
  +rcon.password "STRONG_RCON_PASSWORD_HERE"

Ключевой параметр безопасности — +rcon.ip 127.0.0.1. Он привязывает веб-сокет RCON исключительно к локальному интерфейсу (loopback), предотвращая любые попытки подключения к порту 28016 из внешней сети.

Проверьте, что сокет RCON слушает только локальный адрес:

bash
ss -tulpn | grep 28016

Настройка обратного прокси Nginx с шифрованием WSS#

Чтобы безопасно подключаться к WebRCON через веб-клиенты (например, RustAdmin Web или кастомные боты) из дома, трафик должен быть зашифрован протоколом TLS (WSS вместо обычного WS).

Создайте конфигурационный блок виртуального хоста в Nginx:

bash
cat << 'EOF' | sudo tee /etc/nginx/sites-available/rust-rcon
server {
    listen 443 ssl http2;
    server_name rcon.example.com;

    ssl_certificate /etc/letsencrypt/live/rcon.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/rcon.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:28016;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}
EOF

Активируйте виртуальный хост и перезагрузите конфигурацию Nginx:

bash
sudo ln -sf /etc/nginx/sites-available/rust-rcon /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Директивы proxy_set_header Upgrade и Connection "upgrade" критически важны: без них Nginx попытается обработать соединение как обычный HTTP-запрос и оборвёт WebSocket-рукопожатие с ошибкой 400 Bad Request.

Ограничение доступа по белому списку IP-адресов#

Дополнительный уровень защиты заключается в ограничении доступа к RCON только с доверенных IP-адресов администраторов.

Добавьте правила allow и deny непосредственно в секцию location в Nginx:

bash
cat << 'EOF' | sudo tee -a /etc/nginx/sites-available/rust-rcon

# IP Whitelist example
# allow 203.0.113.50;
# deny all;
EOF

Либо заблокируйте несанкционированные попытки на уровне межсетевого экрана UFW:

bash
sudo ufw allow from 203.0.113.50 to any port 443 proto tcp

Формат сообщений WebRCON и тестирование подключения#

WebRCON использует текстовый формат JSON для обмена командами и логами. Каждое входящее сообщение имеет следующую структуру:

  • Identifier: числовой ID команды для сопоставления ответа.
  • Message: исполняемая консольная команда (например, status, serverinfo, kick).
  • Name: имя отправителя (обычно WebRcon).

Протестируйте локальное подключение к WebSocket с помощью консольной утилиты wscat:

bash
wscat -c "ws://127.0.0.1:28016/STRONG_RCON_PASSWORD_HERE"

После успешного подключения отправьте тестовую команду serverinfo и убедитесь, что сервер возвращает JSON со статистикой онлайна и частотой кадров.

Для гибкого администрирования сообществ и автоматизации задач по расписанию (вайпы, кики, бэкапы) без ручной настройки Nginx и SSL-сертификатов удобно использовать возможности панели управления серверами, где защищённый доступ к консоли уже встроен в единый интерфейс.

Источники#