Современные игровые серверы часто оснащаются веб-интерфейсами и REST/WebSocket API для удалённого администрирования: карты Minecraft (Dynmap, BlueMap), веб-панели управления, REST API Palworld и WebRCON в Rust. По умолчанию эти службы запускаются без шифрования (HTTP и WS) на нестандартных портах. Открытие таких портов наружу подвергает сервер угрозе перехвата паролей администратора в незащищённых сетях и блокировке браузером из-за политик Mixed Content.
В этой статье подробно рассматривается настройка безопасного обратного прокси Nginx с бесплатными SSL-сертификатами Let's Encrypt, изоляция игровых веб-панелей на локальной петле (127.0.0.1) и проксирование WebSocket-соединений.
Почему опасно открывать веб-панели и WebSocket без шифрования#
Когда администратор авторизуется в панели управления или отправляет команды через незащищённый протокол HTTP или WebSocket (ws://):
- Перехват учётных данных (Sniffing): Логины, токены сессий и пароли RCON передаются в открытом виде через интернет и могут быть перехвачены на промежуточных узлах.
- Блокировка браузера (Mixed Content): Если админ-панель открыта по защищённому HTTPS, а сокет RCON пытается подключиться по
ws://, современные браузеры принудительно разрывают соединение. - Отсутствие единой точки аудита: Нестандартные порты (8123, 8212, 28016) увеличивают поверхность атаки и усложняют настройку брандмауэра.
Решение заключается в изоляции игровых портов внутри локального хоста и публикации единой защищённой точки входа на стандартном порту HTTPS (443).
Изоляция игровых веб-сервисов на localhost#
Перед настройкой Nginx настройте игровые серверы так, чтобы их веб-порты слушали только локальный адрес 127.0.0.1, а не 0.0.0.0.
Например, для карты Minecraft Dynmap в plugins/dynmap/configuration.txt:
webserver-bindaddress: 127.0.0.1webserver-port: 8123
Для Palworld REST API в PalWorldSettings.ini:
RESTAPIBindAddress="127.0.0.1"RESTAPIPort=8212
Убедитесь, что порты привязаны исключительно к петлевому интерфейсу:
sudo ss -tlnp | grep -E "8123|8212|28016"
В выводе адрес должен быть строго 127.0.0.1:<порт>.
Установка и настройка Nginx с поддержкой WebSocket#
Установите веб-сервер Nginx и утилиту Certbot для автоматического выпуска SSL-сертификатов:
sudo apt-get update
sudo apt-get install -y nginx certbot python3-certbot-nginx
Создайте конфигурационный файл виртуального хоста /etc/nginx/sites-available/game_panels.conf:
sudo nano /etc/nginx/sites-available/game_panels.conf
Вставьте конфигурацию, включающую поддержку WebSocket и буферизацию:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name panel.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name panel.example.com;
# SSL certificates managed via certbot
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Minecraft Dynmap Web Map
location /map/ {
proxy_pass http://127.0.0.1:8123/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Rust WebRCON with WebSocket upgrade
location /rcon/ {
proxy_pass http://127.0.0.1:28016/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
Активируйте виртуальный хост:
sudo ln -sf /etc/nginx/sites-available/game_panels.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
В специализированной панели управления серверами завершение TLS, выпуск сертификатов и безопасное проксирование веб-консолей серверов изолированы автоматически без необходимости вручную администрировать веб-сервер Nginx.
Выпуск и автоматическое продление SSL-сертификатов Let's Encrypt#
Выпустите доверенный сертификат Let's Encrypt с помощью Certbot:
sudo certbot --nginx -d panel.example.com --non-interactive --agree-tos -m admin@example.com
Certbot автоматически настроит директивы ssl_certificate и ssl_certificate_key в вашем конфиге Nginx и включит таймер автопродления:
sudo systemctl status certbot.timer --no-pager
Проверьте корректность тестового продления сертификатов:
sudo certbot renew --dry-run
Защита административных эндпоинтов: авторизация и rate limiting#
Чтобы защитить API и панели управления от перебора паролей (brute force), добавьте ограничение частоты запросов и ограничение доступа по IP-адресу в Nginx:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
# Authorized administrative IP:
allow 198.51.100.50;
deny all;
proxy_pass http://127.0.0.1:8212/;
}
После применения настроек перезагрузите Nginx:
sudo nginx -t && sudo systemctl reload nginx
Теперь все административные подключения к игровым сервисам защищены надёжным шифрованием TLSv1.3, а внутренние порты серверов надёжно укрыты от внешнего интернета.




