Перейти к содержанию

Баны и обнаружения

ssAntiCheat разделяет обнаружение читера и его удаление. Обнаружение всегда вызывает оповещение; бан происходит только после достижения порога модуля, и даже тогда он обычно откладывается до следующей волны банов. Эта задержка сделана намеренно — она мешает читеру сопоставить «я сделал X и через секунду был забанен» и вычислить, какая проверка его поймала.

Конвейер

1. a detector fires
2. detection is recorded  ──> in-game admin alert
                          ──> Discord webhook
                          ──> dashboard (if enabled)
3. module reached its BanAfterDetections count?   ── no ──> done
                          │ yes
4. player is queued for a ban
5. the queue is executed on the next ban wave
6. execution: run AutoBan.ExecuteCommand, alert admins,
   and (if IntegratedBanSystem is on) write the ban row and kick
7. on their next join attempt, the ban is enforced at login

Шаги 3–4 задаются для каждого модуля отдельно — см. BanAfterDetections. Модуль без этого ключа обнаруживает и оповещает, но никогда не банит сам по себе.

Волны банов

Бан, стоящий в очереди, выполняется, когда происходит любое из следующего:

Триггер Примечания
Каждые N сохранений мира N задаётся AutoBan."SaveWorld Cycles" — по умолчанию 2. Это обычный путь.
Игрок из очереди отключается Его банят при выходе, а не оставляют свободным до следующей волны.
У модуля установлено InstantBan: true Зарезервировано для обнаружений без правдоподобных ложных срабатываний.
Администратор выполняет ssac.banwave Немедленно выполнить всю очередь.

Между постановкой в очередь и выполнением вы можете просмотреть очередь командой ssac.pendingbans и очистить её командой ssac.clearbanwave. См. Команды.

AutoBan

1
2
3
4
"AutoBan": {
  "SaveWorld Cycles": 2,
  "ExecuteCommand": "banplayer {steamid} "
}
Поле Тип По умолчанию Описание
SaveWorld Cycles number 2 Выполнять волну банов каждые столько сохранений мира. При интервале сохранения в 15 минут 2 означает задержку не более 30 минут.
ExecuteCommand string "banplayer {steamid} " Консольная команда, выполняемая для каждого забаненного игрока. {steamid} заменяется на его SteamID64. Оставьте пустым, чтобы полагаться только на встроенную систему банов.

ExecuteCommand — это способ подключить ssAntiCheat к тому, что вы уже используете. По умолчанию игрок добавляется в собственный бан-лист ARK; вы можете вместо этого вызвать команду бана другого плагина или команду, работающую на весь кластер.

💡 Совет для кластера. banplayer в ARK работает только на уровне одного сервера. Если вы используете кластер, либо направьте ExecuteCommand на команду бана, учитывающую кластер, либо используйте встроенную систему банов с общей базой данных MySQL для всех ваших серверов — тогда каждый сервер будет применять каждый бан при входе.

IntegratedBanSystem

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

1
2
3
4
5
6
7
"IntegratedBanSystem": {
  "Enabled": true,
  "UseIPBans": true,
  "UseHWIDBans": false,
  "Exclude IPS": [],
  "BanMessage": "You are banned from our server\nReason: {reason}\nBan id: {ban_id}\nUnban at: https://store.example.com"
}
Поле Тип По умолчанию Описание
Enabled boolean true Хранить и применять баны в MySQL. Когда false, выполняется только AutoBan.ExecuteCommand.
UseIPBans boolean true Также отказывать в подключении с IP-адреса забаненного игрока. См. ниже.
UseHWIDBans boolean false Также отказывать в подключении по аппаратному ID забаненного игрока. Требует необязательного клиентского мода-компаньона для его захвата — без него эта опция ничего не делает.
Exclude IPS array [] IP-адреса, никогда не считающиеся ассоциацией. Укажите здесь общие/NAT-адреса.
BanMessage string см. выше Сообщение, которое видит игрок.

Баны хранятся в единой таблице (ssAntiCheat_bans), содержащей Steam ID, IP, аппаратный ID, причину, дату бана и срок действия. Направьте несколько серверов на одну и ту же базу данных, и бан будет применяться на всех них.

Сообщение о бане

BanMessage поддерживает два плейсхолдера:

Плейсхолдер Заменяется на
{reason} Причина бана.
{ban_id} Числовой ID бана — значение, нужное администратору для ssac.unban.
"BanMessage": "You are banned from our server\nReason: {reason}\nBan id: {ban_id}\nAppeal at: https://yourserver.example/appeal"

⚠️ Замените ссылку-заглушку. Поставляемое сообщение указывает на store.example.com. Всегда включайте {ban_id} — без него игроку, подающему апелляцию, нечего указать, и вам придётся искать запись в базе данных вручную.

Баны по IP-ассоциации

При включённом UseIPBans игроку, подключающемуся с адреса, принадлежащего активному бану, отказывают во входе, и это фиксируется как его собственный бан, так что альтернативный аккаунт с этого момента забанен по Steam ID. Оповещение уходит в AssociationBans с указанием обоих аккаунтов.

Проверка намеренно консервативна — она срабатывает только тогда, когда IP действительно совпадает, не входит в Exclude IPS и принадлежит другому аккаунту Steam.

⚠️ Баны по IP затрагивают домохозяйства и общие подключения. Братья и сёстры, соседи по квартире, интернет-кафе или общий выход VPN — все они будут выглядеть как один и тот же игрок. Понаблюдайте за каналом ассоциаций некоторое время, прежде чем доверять ему, и добавьте легитимные общие адреса в Exclude IPS.

Длительность банов

Как был создан бан Длительность
ssac.ban с d=… Истекает по прошествии этого периода.
ssac.ban без d=… Перманентный.
Автоматический (по BanAfterDetections модуля) Перманентный.

Чтобы снять любой бан, используйте его ID:

ssac.unban 42

Проверка обнаружения до того, как оно станет баном

Промежуток между обнаружением и волной банов — это ваше окно для проверки. Хорошо работающий алгоритм действий:

  1. Оповещение в Discord (или внутриигровое оповещение администратору) называет игрока и модуль.
  2. ssac.go — сразу же перейдите в режим наблюдения за ним, без аргумента — к последнему обнаружению.
  3. !tracers — посмотрите на его выстрелы; помощь в прицеливании видна невооружённым глазом этим способом.
  4. ssac.pendingbans — проверьте, стоит ли он уже в очереди и за что.
  5. Примите решение: дать волне пройти, выполнить ssac.banwave немедленно или ssac.clearbanwave, если вы считаете это ложным срабатыванием.

Если модуль даёт повторяющиеся ложные срабатывания на вашем сервере, повысьте его порог или установите OnlyAnalysis, а не отключайте его — см. Советы по настройке.


Дальнейшие шаги: