Централизованный бан
Централизованный бан — это функция, которая позволяет владельцам серверов создавать синхронизированный внешний список банов, доступный на нескольких серверах.
Как это работает?
Вам понадобится веб-сервер (HTTP или HTTPS), на котором будет размещен централизованный API для блокировки. Мы не предоставляем реализацию этого API, но реализовать его относительно просто. Некоторые сторонние реализации перечислены в разделе «Часто задаваемые вопросы» ниже.
Чтобы включить его на своем сервере, просто укажите в переменной server.bansServerEndpoint конечную точку API вашего веб-сервера. Например:
server.bansServerEndpoint "https://domain.tld/api/rustBans/"
После настройки сервер будет опрашивать этот API, чтобы проверять, не забанены ли игроки на момент их подключения к серверу.
Настройка централизованного бана на сервере
Если server.bansServerEndpoint настроено на что-то вроде "https://domain.tld/api/rustBans/", ваш веб-сервер будет получать от игровго сервера подобные запросы.
GET /api/rustBans/{steamID64}
Возвращает статус бана для 64-битного SteamID в формате JSON.
Примечание
URI для этого запроса генерируется путем добавления 64-разрядного SteamID к значению server.bansServerEndpoint. Это означает, что вы могли бы установить server.bansServerEndpoint значение "https://domain.tld/api/rustBans?steamId =" и он передаст SteamID в параметрах URL, как и ожидалось. A / будет добавлено в конец вашей строки, если она не заканчивается на / или =.
Пример ответа:
{ "steamId": "76561197960287930", "reason": "точно не читерство", "expiryDate": 1608611830, "isMute": false, }
| Поле | Описание |
|---|---|
| SteamID | 64-битный SteamID, на который наложен запрет. Используется для проверки того, что реализация API возвращает корректные данные о запретах. |
| Причина | Причина блокировки. Это сообщение будет показано игроку при подключении к серверу. |
| Срок годности | Временная метка Unix, указывающая срок действия бана. Это значение будет отображаться при подключении игрока к серверу, чтобы показать, сколько времени осталось до окончания бана. Значения меньше или равные нулю означают, что бан бессрочный. |
| Измут | Если установлено значение true, это означает, что игрок должен быть отключен от игры, но не забанен. Для определения срока отключения будет использоваться значение expiryDate. Значения меньше или равные нулю означают, что отключение от игры будет постоянным. |
Сервер Rust также проверяет код ответа веб-сервера:
| Код состояния | Значение |
|---|---|
| 2xx | Коды успешного выполнения (2xx) требуют, чтобы в теле ответа использовался указанный выше формат JSON. |
| 404 | Сообщение «Не найдено» означает, что запрошенный 64-битный SteamID не заблокирован. |
| Другое | Перенаправление должно обрабатываться Unity, но коды ошибок приводят к сбою (см. server.bansServerFailureMode convar в разделе «Часто задаваемые вопросы»). |
FAQ
Будут ли игроки изгнаны с серверов, если в конечную точку будет добавлен бан?
Нет, централизованный бан только не позволит игрокам заходить на сервер.
Если вы хотите, чтобы их немедленно удалили с сервера, вам нужно будет использовать команду kick на том сервере, на котором они находятся.
Что происходит, когда конечная точка API недоступна или работает некорректно?
Если централизованная система блокировки столкнется с ошибкой, на консоли сервера Rust появится соответствующее сообщение.
Отдельный конвар (server.bansServerFailureMode) определяет, что происходит с игроками, которые не прошли проверку:
| Значение bansServerFailureMode | Значение |
|---|---|
| 0 | Игроки допускаются на сервер при возникновении ошибки (сообщение регистрируется в консоли сервера). |
| 1 | Игрокам отказывают в подключении к серверу при возникновении ошибки (сообщение регистрируется в консоли сервера и отображается для игрока) |
Время ожидания запросов к конечной точке моего API истекло. Что я могу сделать?
Тайм-аут по умолчанию для всех централизованных запросов на бан составляет пять секунд.
Этого должно быть более чем достаточно, но если возникают проблемы, вы можете изменить это значение с помощью server.bansServerTimeout переменной convar (значение указывается в секундах).
Помните, что чем дольше обрабатываются запросы, тем дольше игрокам придется ждать, прежде чем они смогут присоединиться к вашему серверу.
Постарайтесь ускорить работу API, а не увеличивать тайм-аут.
Нужно ли перезапускать сервер после изменения любого из параметров convars?
Вам не нужно перезапускать сервер после изменения bansServerEndpoint, bansServerFailureMode или bansServerTimeout.
Однако игроки, уже находящиеся на сервере, не будут выгнаны при включении или изменении bansServerEndpoint.
Я запускаю серверы на Rust и хочу использовать централизованный бан, но не знаю ни одного программиста.
Есть ли какие-нибудь общедоступные реализации?
API спроектирован таким образом, что его можно использовать даже при наличии только HTTP-сервера.
Вы можете загрузить файлы JSON в папку, и сервер на Rust будет их считывать.
Это менее удобно, так как управлять всеми файлами будет сложно, но это все равно будет работать.
Ниже приведён список известных реализаций, которые вы можете использовать:
- https://github.com/AdriaanBoshoff/RustCentralBanServer (бесплатно — лицензия GPL)
- https://lone.design/product/better-battlemetrics-bans-to-discord/ (платный — плагин для сайта)
- https://lone.design/product/easy-admin-rust-plugin/ (платный — плагин для сайта)
- https://codefling.com/tools/centralized-banning (бесплатно — лицензия MIT)
- https://store.lethal.network/p/ao-steambans/ (платный плагин для сайта)
- https://gameservertools.com (только платно)
- https://serverarmour.com/centralized-bans (бесплатно и платно)