RE:NODE

Безопасность13 мин чтения

BattlEye и Easy Anti-Cheat на серверах

Что на самом деле делают BattlEye и Easy Anti-Cheat на выделенном сервере, какие настройки и файлы принадлежат вам, как работают баны и чего не поймает ни одна из систем.

0 прочтений

На выделенном сервере с BattlEye или Easy Anti-Cheat вы контролируете на удивление мало: включён ли античит, несколько настроек вокруг него и - только у BattlEye - локальный бан-лист, интерфейс RCon и набор фильтров скриптов в некоторых играх. Само обнаружение, сигнатуры и все глобальные баны принадлежат разработчику античита и разработчику игры. Вы не можете разбанить того, кого забанили они, не можете узнать, почему игрока кикнуло, кроме короткого сообщения, и не можете добавить собственные правила обнаружения. Точное понимание того, где проходит эта граница, отличает нормальную настройку от вечера, потраченного на поиск несуществующих параметров.

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

Что делает античит уровня ядра и при чём тут сервер#

BattlEye и Easy Anti-Cheat (EAC, теперь часть Epic Online Services) - прежде всего клиентские системы. Основная часть работает на компьютере игрока, в современных версиях на уровне ядра, и ищет известное читерское ПО, вмешательство в память, внедрённые модули и неподписанные драйверы. Серверная часть сравнительно тонкая: она проверяет, что у каждого подключающегося клиента запущен античит, передаёт отчёты клиента на бэкенд разработчика античита и кикает клиента, когда бэкенд так решил.

У такой архитектуры есть три следствия, которые стоит проговорить прямо:

  • Обнаружение происходит не у вас. Ваш сервер ничего не сканирует. Он лишь исполняет вердикт, вынесенный на машине игрока и на серверах разработчика античита.
  • Сервер может только требовать античит, но не улучшить его. Не существует «строгого режима», который можно купить или настроить. Все серверы на одной сборке игры получают одни и те же правила обнаружения.
  • Отключение - это полностью. Сервер с выключенным античитом принимает клиентов, у которых он вообще не запущен, а значит, можно всё.

Valve Anti-Cheat (VAC) - третья система, которая встретится вам в играх на Source и в CS2. VAC работает иначе - отложенные баны от Valve, никакого драйвера ядра, никакого взаимодействия с сервером, кроме того, что сервер помечен как «secure», - но ответ на вопрос о том, кому что принадлежит, тот же: решает Valve, а вы выбираете, участвует ли в этом ваш сервер.

Какие игры используют какую систему#

Это со временем меняется, и разработчики иногда переходят к другому поставщику, поэтому считайте таблицу отправной точкой и проверяйте актуальную серверную документацию игры, прежде чем на неё полагаться.

ИграАнтичитПереключатель на сервере
Arma 3BattlEyeBattlEye = 1; в server.cfg
DayZBattlEyeПо умолчанию включён на публичных серверах
Arma ReforgerBattlEyebattlEye в JSON-конфиге
ARK: Survival EvolvedBattlEyeПараметр запуска -NoBattlEye отключает его
7 Days to DieEACEACEnabled в serverconfig.xml
RustEACserver.secure (включён по умолчанию)
CS2, TF2, GMod, L4D2VACПараметр запуска -insecure отключает его

О некоторых из них стоит сказать по предложению. У Arma 3 и DayZ самая глубокая серверная интеграция BattlEye, с фильтрами и RCon, о которых ниже. 7 Days to Die - типичный случай, когда античит отключают сознательно: моды с собственным кодом (DLL-моды) не загружаются при включённом EAC, а модлеты только на XML загружаются - остальное об этом файле есть в статье настройки сервера 7 Days to Die. Комьюнити-серверы Rust запускают EAC как само собой разумеющееся; сервер Rust с server.secure false - курьёз, на который большинство игроков не пойдёт.

В играх на Source VAC включён, если сервер не запущен с -insecure или если sv_lan 1 не делает его LAN-сервером. Небезопасный сервер не показывается игрокам с VAC обычным образом, а аккаунты с VAC-баном могут на него заходить, - на публичном сервере это редко то, что вам нужно.

Переключатели, которые действительно ваши#

Вот полный список решений по античиту, которые в большинстве игр принимаете вы:

  1. Включён или выключен. Самый важный выбор. Для любого публичного сервера оставляйте его включённым. Отключайте только для закрытой группы, которой нужны моды, блокируемые античитом, и смиритесь с тем, что теперь вы полагаетесь на доверие.
  2. Проверка подписей и файлов в играх, где она есть. Это не сам античит, но работает рядом с ним, и в некоторых играх значит больше.
  3. Лимиты пинга и таймаутов, которые BattlEye открывает в некоторых играх.
  4. Ваш локальный бан-лист и доступ к RCon в играх с BattlEye.
  5. Фильтры скриптов в играх семейства Arma.

В Arma 3 нужная часть server.cfg выглядит так:

server.cfg
BattlEye = 1;              // require BattlEyeverifySignatures = 2;      // reject clients with unsigned or mismatched addonskickDuplicate = 1;         // kick a second connection from the same IDallowedFilePatching = 0;   // clients may not load loose files over packed data

verifySignatures = 2 - настройка, которая больше всего делает против бытового читерства в Arma 3. Она требует, чтобы каждый аддон, загружаемый клиентом, был подписан ключом, лежащим на сервере в папке keys, и не даёт игроку загрузить изменённый PBO, который сервер никогда не одобрял. BattlEye ловит читерское ПО, проверка подписей - читерский контент. Остальное об этом файле - в статье server.cfg и миссии Arma 3.

BattlEye на сервере: файлы, RCon и фильтры#

Серверная часть BattlEye живёт в папке BattlEye, обычно внутри каталога профиля сервера. Редактируемый файл - BEServer_x64.cfg (или BEServer.cfg на старых 32-битных сборках). Он короткий:

BattlEye/BEServer_x64.cfg
RConPassword a-long-generated-passwordRConPort 2306MaxPing 250

RConPassword и RConPort включают собственную удалённую консоль BattlEye - протокол поверх UDP, отдельный от игрового. MaxPing кикает игроков с пингом выше заданного, и это грубее, чем кажется: игрока со скачком пинга выкинет посреди боя, поэтому ставьте значение с запасом или не задавайте его вовсе. Некоторые сборки при запуске переписывают этот файл с суффиксом _active_ в имени; редактируйте исходный файл, а не сгенерированный.

Через BattlEye RCon с серверами Arma и DayZ общается почти любой сторонний инструмент администрирования. Команд немного, и их стоит знать напрямую:

КомандаДействие
playersСписок игроков с номером, IP, пингом и BattlEye GUID
kick <number> [reason]Кик по номеру игрока
ban <number> [minutes] [reason]Бан подключённого игрока, 0 или без значения - навсегда
addBan <GUID or IP> [minutes] [reason]Бан того, кто сейчас не подключён
removeBan <ban number>Снимает бан по его позиции в bans
bansПоказывает бан-лист с номерами
writeBans / loadBansСохраняет список на диск / перечитывает его
say -1 <message>Сообщение всем
loadScripts / loadEventsПеречитывает файлы фильтров после правки

К BattlEye RCon применимы те же правила, что и к любой удалённой консоли: длинный случайный пароль, порт открыт только если он действительно нужен инструменту, и доступ у как можно меньшего числа людей. Логика объяснена в статье безопасный RCON, а инструменты для DayZ - в статье инструменты администратора DayZ и BattlEye RCon.

BattlEye GUID в выводе players - не секретный идентификатор. Он вычисляется из SteamID64 игрока - это MD5-хеш байтов BE, за которыми идёт 64-битный ID, - поэтому инструмент для банов может получить его из SteamID, а бан по GUID по сути равен бану по аккаунту Steam.

Фильтры скриптов в Arma

В Arma 3 BattlEye умеет ещё и фильтровать скриптовый трафик: файлы вроде remoteexec.txt, createvehicle.txt, publicvariable.txt и setvariable.txt в папке BattlEye содержат правила, которые пишут в лог или кикают, когда клиент отправляет что-то, подходящее под шаблон. Хорошо сделанные фильтры останавливают большой класс атак с внедрением скриптов, которые компонент уровня ядра никогда бы не увидел, потому что «чит» здесь - это обычная игровая команда, отправленная клиентом, который не должен был её отправлять.

Фильтры - это ещё и самый простой способ сломать миссию. Фильтр, достаточно строгий, чтобы останавливать внедрённый код, начнёт кикать честных игроков, как только миссия или мод сделает что-то, чего автор фильтра не предусмотрел. Рабочий подход такой: возьмите фильтры, опубликованные для вашей миссии или набора модов, запустите их в режиме только логирования, сыграйте несколько сессий, прочитайте, кого бы они кикнули, и только после этого включайте кики. loadScripts и loadEvents перечитывают их без перезапуска.

Как устроены баны на каждом уровне#

В игре с античитом есть три вида банов, и путаница между ними порождает большую часть растерянных обращений, которые владельцы серверов отправляют не туда.

все серверывсе серверытолько ваш серверГлобальный банBattlEye или EACБан разработчикаво всей игреБан на сервереbans.txt или список игрыИгрок
Кто может снять какой бан

Ваш только нижний блок.

  • Глобальные баны античита выдаёт BattlEye или разработчик через EAC; они действуют на всех серверах этой игры, и снять их вы не можете. Игрок видит сообщение о глобальном бане. Если он считает, что это ошибка, апелляция идёт к поставщику античита или разработчику, а не к вам, и стоит сказать ему об этом, не вступая в дальнейшее обсуждение.
  • Игровые баны в играх Valve (VAC и game bans) выдаёт Valve. Правило то же: снимать их не вам, и сервер с VAC такой аккаунт не пустит.
  • Ваши локальные баны целиком ваши. В играх с BattlEye они лежат в bans.txt в папке BattlEye, по строке на бан: GUID или IP, срок окончания (или -1 для постоянного) и причина. В играх с EAC и VAC они хранятся в собственном бан-листе игры, который у каждой игры свой.

Локальный бан хорош ровно настолько, насколько хорош идентификатор за ним. Баны по GUID и Steam следуют за аккаунтом, а упорный читер просто заводит новый. IP-баны привязаны к адресу, которым может пользоваться целая семья или университет и который меняется при следующей перезагрузке роутера. Какой идентификатор банить и что делать со вторым аккаунтом, разобрано в статье читеры и бан-листы.

Чего античит не поймает никогда#

Это самое важное для ваших ожиданий. Античит уровня ядра хорошо ловит известное читерское ПО на клиенте. По своему устройству он не способен поймать:

  • Скрытое читерство с хорошими читами. Приватные, хорошо финансируемые читы месяцами уходят от обнаружения. Игрок с аккуратным аимботом и естественной манерой игры может долго оставаться незамеченным.
  • Аппаратные и внешние читы. Устройства, которые считывают экран вторым компьютером, или модифицированные устройства ввода вообще не касаются процесса игры.
  • Информацию извне игры. Кто-то смотрит стрим вашего сервера, тиммейт сидит в голосовом канале другой команды или друг подсказывает позиции.
  • Эксплойты самой игры. Проваливание под карту, баги с дюпом, злоупотребление сломанной логикой мода. Игра это допускает, поэтому античит видит обычного клиента, который делает обычные вещи.
  • Злоупотребления на стороне сервера. Администратор с RCon спавнит предметы друзьям. У античита нет мнения о вашей команде.
  • Гриферство и токсичность. Это вообще не читерство в понимании античита.

Именно поэтому античит - это базовый уровень, а не решение. Поверх него вам всё равно нужны логи, по которым можно разобрать произошедшее, администраторы, которые наблюдают за игрой, понятный свод правил и процесс банов, который выдерживает проверку. Организационная сторона описана в статье правила сервера, модерация и команда, а сторона багов, а не читеров, - в статье эксплойты и краш-баги игровых серверов.

Моды, античит и компромисс закрытого сервера#

Самая частая причина, по которой владелец сервера трогает переключатель античита, - моды. Правила зависят от игры, но схема повторяется:

  • Моды, меняющие только данные, обычно работают с включённым античитом. Изменения конфигурации, XML-модлеты в 7 Days to Die, подписанный и проверенный контент из Workshop в Arma и DayZ.
  • Моды, внедряющие код в клиент, обычно не работают. DLL-моды 7 Days to Die, клиентские фреймворки, которые цепляются к процессу игры, всё, что для античита выглядит в точности как чит, потому что технически это тот же приём.
  • Серверные моды для античита невидимы. Плагины Oxide или Carbon в Rust, серверные скрипты DayZ, инструменты администрирования - ничто из этого не касается клиентов, поэтому античит о них не знает и знать не хочет.

Если вашей группе нужен клиентский мод с кодом, который античит блокирует, честных вариантов два: запустить такой сервер с выключенным античитом и паролем или белым списком, чтобы заходили только знакомые вам люди, или отказаться от мода. Чего делать не стоит, так это держать публичный сервер в списке с отключённым античитом, потому что он понадобился одному моду. Такой сервер становится местом назначения именно для тех игроков, которых забанили везде.

Серверные моды для администрирования и логирования, напротив, стоит иметь в любой игре с античитом. Они дают доказательства, которых античит не даст никогда: кто кого убил и откуда, кто что подобрал, кто что сказал. В DayZ это обычно инструмент администратора, читающий админ-лог сервера, в Rust - плагины для логирования и репортов.

Работа на арендованном сервере#

Ни BattlEye, ни EAC не требуют особого хостинга. Серверные компоненты поставляются вместе с файлами выделенного сервера и обновляются вместе с ними. Важно вот что:

  • Порты. BattlEye RCon нужен собственный UDP-порт, если вы пользуетесь внешними инструментами. На RE:NODE в каждом тарифе указано, сколько портов выделено, и вы можете добавить порт на вкладке Network и указать его в RConPort. Если внешними RCon-инструментами вы не пользуетесь, не задавайте его и работайте через консоль панели.
  • Обновления. Версии античита привязаны к версиям игры. Сервер, который обновился с опозданием, получает отказы клиентам, или наоборот; в Arma и DayZ обновите сервер, когда обновилась игра, и проблема исчезнет. Как делать это в тихий час, описано в статье расписания перезапусков, которые помогают.
  • Учётные данные. Для установки Arma 3, DayZ и 7 Days to Die на RE:NODE нужен вход в Steam, который хранится в том виде, в каком вы его ввели, поэтому используйте запасной аккаунт Steam, а не тот, на котором играете. Сервер создаётся сразу, а установка ждёт на вкладке Setup, пока вы не введёте данные.
  • Логи. BattlEye пишет собственные логи в папку BattlEye, и это первое место, куда стоит смотреть, когда игроки жалуются на кик с сообщением BattlEye.

Решение проблем с киками и ошибками античита#

«BattlEye: Client not responding». Служба BattlEye на клиенте перестала общаться с сервером. Обычно проблема на стороне игрока: файрвол, упавшая служба BE или очень плохое соединение. Если это случается у всех игроков сразу, файлы BattlEye на сервере не соответствуют версии игры - обновите сервер.

«BattlEye: Global Ban». Поставщик античита забанил аккаунт. С вашей стороны делать нечего.

Игроков кикает за script restriction в Arma. Сработал фильтр. В сообщении о кике есть файл фильтра и номер строки; прочитайте эту строку, решите, был ли это чит или ваша миссия, и поправьте правило или добавьте исключение.

Не прошла проверка подписей в Arma. У клиента есть аддон, для которого на сервере нет ключа, или другая версия мода. Убедитесь, что сервер и клиент загружают одни и те же версии модов и что соответствующий .bikey лежит в keys.

EAC кикает всех игроков в 7 Days to Die после установки мода. В моде есть собственный код. Либо удалите его, либо выставьте EACEnabled в false - и если выбрали второе, поставьте на сервер пароль.

После обновления игры никто не может зайти. Клиентский античит обновился вместе с игрой, а сервер нет. Обновите сервер; на сервере с модами обновите и моды.

FAQ#

Можно ли забанить кого-то через BattlEye так, чтобы он не мог зайти ни на один сервер?

Нет. Ваши баны действуют только на вашем сервере. Глобальные баны выдают BattlEye или разработчик на основе собственного обнаружения. В некоторых играх можно сообщить о читере поставщику античита с доказательствами, но прямого способа запустить глобальный бан у вас нет.

Можно ли разбанить игрока, которого глобально забанили по ошибке?

Нет, и не пытайтесь обойти это, отключив античит. Игрок подаёт апелляцию поставщику античита или разработчику игры. Вы можете подсказать, куда обращаться, и на этом ваше участие заканчивается.

Снижает ли античит производительность сервера?

Совсем немного. Серверные компоненты почти не нагружают сервер по сравнению с симуляцией игры. Фильтры скриптов BattlEye в Arma добавляют некоторую нагрузку на загруженном сервере со сложными фильтрами, но редко настолько, чтобы это было заметно.

Сервер с выключенным античитом автоматически полон читеров?

Нет, если на него никто не может зайти. Закрытый сервер с паролем или белым списком для группы, где все друг друга знают, - вполне разумный способ играть с модами, которые блокирует античит. Проблема - это публичный сервер с выключенным античитом.

Конфликтуют ли серверные плагины с BattlEye или EAC?

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


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000