MAATRIX GAMES / Блог / Античит: как настроить и что делать при ложных банах

Античит: как настроить и что делать при ложных банах

MAATRIX GAMES

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

Какие античиты вообще стоят на игровых серверах

В большинстве современных многопользовательских игр античит встроен в клиент и работает независимо от того, что настроено на сервере — сервер только принимает решения о киках/банах на основе вердиктов этой системы.

  • EasyAntiCheat (EAC) — стоит в Rust, Squad, Insurgency: Sandstorm и ряде других игр на Unity/Unreal. Работает как драйвер на стороне клиента, проверяет память процесса и известные сигнатуры читов, вердикт (kick/ban) прилетает от EAC-инфраструктуры разработчика игры, а не от твоего сервера.
  • BattlEye — аналогичная система в Arma 3, Arma Reforger, DayZ. Тоже клиентский модуль плюс серверный компонент, который логирует нарушения локально — это важное отличие от EAC, о нём ниже.
  • VAC (Valve Anti-Cheat) — работает в играх на Source/Source 2 (CS2, Team Fortress 2, Left 4 Dead 2). VAC полностью на стороне Valve: он анализирует клиент в фоне и банит аккаунт в Steam глобально, без участия сервера. Ты как владелец сервера вообще не видишь процесс принятия решения и не можешь на него повлиять.

Поверх любого из этих движковых античитов почти все серверы дополнительно ставят собственный слой — плагины через SourceMod (для Source-игр) или Oxide/uMod (для Rust и других) с собственным списком банов, который управляется уже тобой как админом. Разница между "движковым" и "серверным" баном критична для раздела про ложные баны — вернёмся к ней ниже.

Включаем и отключаем встроенный античит через параметры запуска

Здесь у разных игр разная логика, и путать её — частая причина, почему сервер либо ловит читеров хуже, чем мог бы, либо теряет игроков на пустом месте.

Rust. EAC переключается конваром server.secure, который по умолчанию true. В стартовой команде или конфиге панели это выглядит так:

+server.secure true

Если поставить false, сервер перестаёт проверять клиентов через EAC — это резко облегчает жизнь читерам и обычно снижает доверие игроков к серверу (в браузере серверов такие площадки воспринимаются как менее надёжные). Отключать стоит разве что на локальном тестовом стенде для модов, никогда — на публичном сервере с живыми игроками.

Arma 3 / Arma Reforger / DayZ. BattlEye включён по умолчанию. Чтобы поднять сервер без него, добавляют параметр запуска:

-nobattleye

Иногда это нужно, если конкретная связка модов конфликтует с сигнатурами BE и сервер не стартует нормально. Но для публичного сервера с реальными игроками это почти всегда плохая идея — без BE сервер открыт для любых читов без разбора.

CS2 и другие Source-игры. Тут иначе: VAC — это не параметр сервера, его нельзя "включить" или "выключить" конфигом, решение всегда за Valve. Единственное, что можно сделать на сервере — запустить его в режиме -insecure, тогда сервер вообще перестаёт запрашивать у Valve VAC-статус подключающихся клиентов и не отображается как secure в браузере серверов. Используй это только для приватных тестовых серверов, никогда для публичных матчей — на practice это открывает дверь читерам, которых VAC мог бы отсеять. Дополнительно на Source-серверах стоит держать sv_pure 1 (или 2 для строгого режима) — это форсирует у клиентов оригинальные игровые файлы и режет часть визуальных читов вроде прозрачных текстур, не являясь при этом полноценным античитом.

Если поднимаешь сервер через хостинг-панель, часто эти же переключатели вынесены в веб-интерфейс отдельным чекбоксом или переменной окружения (например EAC_ENABLED в некоторых готовых образах для Rust) — суть та же, просто без ручного редактирования командной строки. Как разворачивается сам сервер CS2 с нуля — разбирали в статье про поднятие сервера Counter-Strike 2.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Где смотреть логи после инцидента

Когда прилетает жалоба или просто хочется понять, что произошло, разбор всегда начинается с логов — не с "мне кажется" или скриншота от игрока.

  • Rust: смотри консольный вывод сервера (или docker logs, если сервер в контейнере) — при срабатывании EAC там появляется строка с ID игрока и типом нарушения. Если стоит Oxide/uMod, дополнительно проверь папку oxide/logs — многие античит-плагины пишут туда свой отдельный журнал с деталями (подробнее про установку самого фреймворка — в статье про Oxide и uMod).
  • BattlEye: в подпапке battleye внутри профиля сервера ищи файл вида BEServer_x64.log — там перечислены все кики и баны BattlEye с причиной и GUID игрока. Это тот самый плюс BE перед EAC: у BattlEye есть локальный лог на твоём сервере, у EAC решение чаще всего принимается на стороне разработчика игры и до сервера долетает уже готовый вердикт.
  • CS2 / SourceMod: серверные логи лежат в папке logs внутри директории игры, а плагины SourceMod дополнительно пишут в addons/sourcemod/logs. Если используешь SourceBans или похожий менеджер банов, там же есть отдельная история с причиной и админом, который выдал бан.

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

Демозапись и другие доказательства инцидента

Лог с вердиктом античита — это хорошо, но для спорных случаев (особенно по жалобам от других игроков, а не от самого читера) полезно иметь что-то более наглядное.

В CS2 и других Source-играх для этого есть SourceTV: включаешь tv_enable 1, при желании tv_autorecord 1, и сервер автоматически ведёт запись матча, которую потом можно пересмотреть покадрово, если кто-то жалуется на конкретного игрока. Это отдельная система от VAC — просто удобный способ самому оценить, был ли реальный читерский паттерн (мгновенный флик на голову сквозь дым) или игрока просто обвинили сгоряча после плохого раунда.

В Rust встроенной демозаписи нет. Основной канал доказательств — это репорты через встроенную систему F7 (игрок отправляет отчёт с деталями напрямую разработчикам и в EAC), плюс на стороне сервера — плагины вроде AdminRadar, которые в реальном времени подсвечивают админам подозрительную статистику игрока (аномальный процент попаданий, стрельба сквозь стены на радаре). Живое наблюдение за подозрительным игроком через спектейт — тоже рабочий, просто более трудозатратный способ.

Общее правило для любой игры: прежде чем принимать решение по спорному бану, собери три вещи — строку лога с нарушением, точное время инцидента и идентификатор игрока (SteamID64 или аналог для другой платформы). Без этого набора разговор превращается в "он сказал / она сказала".

Жалоба "меня забанили ни за что" — что делать по шагам

  1. Определи тип бана. Это платформенный бан от движкового античита (VAC/EAC/BattlEye) или серверный бан, выданный вручную или плагином (SourceBans, uMod ban list)? От этого зависит вообще, в твоей ли ты власти что-то менять.
  2. Попроси данные. SteamID64 (или EOS ID/другой идентификатор платформы) и примерное время бана — без этого искать в логе бессмысленно.
  3. Проверь лог. Если бан выписан EAC/BattlEye/VAC — будь честен: это решение не твоё, ты физически не можешь его снять на уровне сервера. Направь игрока в официальную апелляцию — у EAC есть форма support, у Valve вопросы по VAC решаются через help.steampowered.com.
  4. Если бан серверный — смотри демозапись или лог плагина. Если паттерн действительно похож на чит — оставляй бан. Если похоже на ложное срабатывание (например, спайк "аномальной" скорости реакции из-за скачка пинга, или плагин принял легитимную макро-настройку мыши с высокой частотой опроса за читерский клик-скрипт) — снимай бан и не забудь извиниться, доверие игроков стоит дороже принципа "админ всегда прав".
  5. Зафиксируй решение. Короткая запись в админ-логе или тикете — кто, когда, почему разбанил или отказал — экономит время при повторных спорах и защищает тебя же от обвинений в предвзятости.

Почему 100% точности не бывает ни у одного античита

Это стоит сразу проговаривать с комьюнити, а не только держать в голове. Любая система детекции — сигнатурная (EAC/BattlEye ищут известные читы) или статистическая (аномальная точность, скорость реакции) — работает на балансе двух ошибок: пропустить реального читера или наказать честного игрока. Сдвинуть чувствительность в одну сторону — вырастет другая.

На практике ложные срабатывания чаще всего дают: нестабильный пинг или пакетлосс (движок принимает лаг-компенсацию за телепорт/спидхак), нестандартное железо (мыши с полингом 8000 Гц, макросы для игр вроде MMO-мышей), VPN или прокси, из-за которых регион и задержка выглядят подозрительно, и банально хороший день у игрока — резкий скачок точности за один матч сам по себе не доказательство чита. Никакой вендор, включая Valve и разработчиков EAC/BattlEye, не даёт и не может дать гарантию нулевых ложных банов — задача админа не "починить" античит, а держать разумный процесс проверки поверх автоматики.

Второй слой защиты — плагины поведенческого анализа

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

Для Rust — это в первую очередь плагины экосистемы Oxide/uMod: тот же AdminRadar визуализирует подозрительную статистику игроков в реальном времени (процент попаданий в голову, стрельба через стены), не банит автоматически, а даёт админу материал для решения. Обзор топовых плагинов для Rust-сервера, включая варианты для модерации, есть в статье про 10 плагинов для Rust.

Для CS2 и других Source-игр похожую роль играют SourceMod-плагины статистики: они отслеживают резкие скачки точности, неестественно короткое время реакции, подозрительные паттерны прострелов сквозь дым/стены — и, опять же, только флагуют, а не банят автоматически. Ключевая идея такого слоя: он не заменяет EAC/BattlEye/VAC, а закрывает то, что сигнатурный античит физически не видит, ценой того, что финальное решение всегда остаётся за живым админом, который посмотрел флаг и (в идеале) демозапись.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Частые вопросы

Отключение встроенного античита ускорит работу сервера?

Нет. EAC/BattlEye — это в основном клиентская нагрузка, на сервере она почти не заметна. Отключение только снижает защиту от читеров, к производительности сервера отношения не имеет.

Могу ли я как владелец сервера снять VAC-бан игроку?

Нет. VAC полностью управляется Valve на уровне Steam-аккаунта, сервер здесь ничего не решает и не видит подробностей вердикта.

EAC/BattlEye забанил сразу нескольких легитимных игроков — что делать?

Такое бывает при масштабных "волнах" банов от разработчика. Прежде чем разбираться самостоятельно, проверь официальные каналы игры на упоминание проблемы, при необходимости временно занеси доверенных игроков в белый список на сервере и жди решения по апелляции — это не серверный бан, чинить его локально нечем.

Нужен ли отдельный античит-плагин, если EAC или BattlEye уже включены?

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