Защита Arma-3-сервера от DDoS-атак
Какие из пяти UDP-портов с 2302 по 2306 Arma-3-серверу действительно нужны, как защитить Steam-query, BattlEye-RCon и Headless Client, и с какой интенсивности пакетов помогает только фильтрация в сети перед сервером.
Тот, кто хочет защитить Arma-3-сервер от DDoS-атак, имеет дело ровно с пятью UDP-портами: с 2302 по 2306. Выделенный сервер, который вечером посреди операции пропадает сразу у всех игроков, редко страдает от проблем с железом. Обычно идёт атака именно на этот блок портов, причём ровно тогда, когда в списке серверов стоит максимальное число игроков. В этой статье сначала разобрано, что вы можете закрыть сами и без дополнительных расходов, затем то, где эти меры технически заканчиваются, и в конце то, что должно происходить в сети перед сервером.
Все указания относятся к выделенному Arma-3-серверу (приложение SteamCMD 233780) под Debian 12, Debian 13, Ubuntu 22.04 LTS или Ubuntu 24.04 LTS. Команды написаны для root, если вы работаете под обычным пользователем, добавляйте перед каждой командой sudo. Если атака идёт прямо сейчас: ничего не меняйте в конфигурации и не перезагружайте сервер, а сначала сохраните измерения из раздела «Протоколирование». После атаки их уже не будет.
Почему Arma-3-серверы атакуют и когда нужна защита от DDoS
В Arma 3 сходится сразу несколько свойств, которые делают сервер удобной мишенью. Во-первых, сервер публикует свой адрес сам: он регистрируется на мастер-сервере Steam через порт 2304 UDP и отвечает на порту 2303 UDP на запросы именем, картой, числом игроков и списком модов. Без этих двух портов вас никто не найдёт, а с ними ваш IP-адрес стоит в каждом браузере серверов и на каждой странице статуса, которая этот браузер опрашивает.
Во-вторых, аудитория привязана к определённым часам. Life-ролевые проекты на Altis и Tanoa, Exile, Antistasi и King of the Hill наполняются вечером и по выходным, поэтому сбой в восемь вечера заметен максимально. В-третьих, есть конкуренция между проектами, забаненные игроки и внутренние конфликты, а сама атака не требует от заказчика ни навыков, ни заметных денег.
Технически к этому добавляется решающий момент: Arma 3 работает полностью по UDP, для игрового процесса TCP ей не нужен. В UDP нет установления соединения, которого можно было бы потребовать, а адрес отправителя легко подделать. Значит, атакующему не нужно ни заходить на ваш сервер, ни корректно с ним общаться, чтобы создать нагрузку. К этому добавляется то, что цикл симуляции Arma-3-сервера в своей основе выполняется на одном вычислительном ядре: тот, кто шлёт достаточно пакетов, отнимает у этого одного ядра процессорное время независимо от того, сколько ядер у машины вообще. Что такое DDoS-атака с технической стороны, объясняет статья Что такое DDoS-атака.
Порты, о которых на самом деле идёт речь
Arma-3-сервер занимает по умолчанию блок с 2302 по 2306 UDP. Параметр запуска -port=2302 задаёт только первый порт, остальные четыре жёстко следуют из него, а именно как игровой порт плюс 1 и далее до плюс 4. Поэтому тот, кто держит несколько экземпляров на одной машине, оставляет между ними не менее 100 портов (2302, 2402, 2502), иначе экземпляры отбирают друг у друга последующие порты.
| Порт | Протокол | Для чего | Нужен ли в открытой сети |
|---|---|---|---|
| 2302 (игровой порт) | UDP | игровой трафик и VON, встроенная передача голоса | да |
| 2303 (игровой порт плюс 1) | UDP | Steam-query: отвечает на A2S-запросы именем, картой, числом игроков, списком модов и подписей | да, иначе пропадёт запись в браузере серверов |
| 2304 (игровой порт плюс 2) | UDP | Steam-master: регистрация сервера на мастер-сервере Steam | да |
| 2305 (игровой порт плюс 3) | UDP | VON, по данным Bohemia зарезервирован и сейчас не используется | нет |
| 2306 (игровой порт плюс 4) | UDP | трафик BattlEye, в том числе интерфейс RCon (RConPort в beserver_x64.cfg) |
нет, только ваши админские адреса |
| 2344 и 2345 (исходящие) | TCP и UDP | соединение BattlEye от сервера к arma31.battleye.com | исходящие разрешить, входящие не открывать |
| 3306 | TCP | MySQL для extDB3, подключение к базе данных любого Life-фреймворка | нет, привязать к 127.0.0.1 |
| 22 | TCP | доступ по SSH | нет, только ваши собственные адреса |
Из этих восьми строк в открытый интернет относятся ровно три: 2302, 2303 и 2304 UDP. Всё остальное — это управление, а открытые административные порты и есть самая частая ошибка на Arma-3-серверах, которой можно было бы избежать.
Что вы можете сделать сами, прежде чем тратить деньги
Этот раздел самый длинный, и так задумано. Аккуратно настроенный Arma-3-сервер выдерживает небольшие и средние атаки собственными силами, независимо от того, у какого провайдера он стоит.
1. Инвентаризация: что слушает на сервере?
Прежде чем написать хотя бы одно правило, посмотрите, что ваш сервер предлагает наружу. Не гадайте, а смотрите:
ss -lntup
Интерес представляет колонка с локальным адресом. 0.0.0.0:2302 означает «доступен из всего интернета», 127.0.0.1:3306 означает «только локально» и правила файрвола не требует. Рядом с игрой на Life-сервере регулярно обнаруживаются MariaDB, веб-сервер для страницы фракции, TeamSpeak или другая голосовая служба и давно забытая панель. Взгляд атакующего даёт скан портов снаружи:
nmap -Pn -sU -p 2300-2320 ВАШ.IP.АДРЕС.СЕРВЕРА
nmap -Pn -p- --min-rate 1000 ВАШ.IP.АДРЕС.СЕРВЕРА
Первая команда показывает UDP-блок игры, вторая всё, что открыто на TCP. Для игрового процесса Arma-3-серверу не нужен ни один открытый TCP-порт.
2. Оставьте открытыми только те порты, которые Arma 3 действительно нужны
Наружу достаточно трёх UDP-портов, всё остальное ограничивается. В UFW это выглядит так, причём именно в таком порядке, чтобы не закрыть доступ самому себе:
ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH'
ufw allow 2302:2304/udp comment 'Arma 3 игра, Steam-query, Steam-master'
ufw allow from 203.0.113.10 to any port 2306 proto udp comment 'BattlEye RCon'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Замените 203.0.113.10 на свой собственный адрес. Порт 2305 остаётся закрытым, потому что Bohemia числит его зарезервированным и сейчас не используемым. Важна строка ufw default allow outgoing: BattlEye открывает с сервера соединение к arma31.battleye.com и для этого требует исходящих 2344 на TCP и UDP, а также 2345 на TCP. Тот, кто закрывает исходящие без разбора, закрывает собственный анти-чит. После перенастройки проверьте реальным заходом в игру, что BattlEye по-прежнему пропускает ваших игроков. Полная инструкция вместе с запасным путём есть в статье Настройка файрвола UFW без потери доступа.
База данных не должна попадать в открытую сеть ни при каких обстоятельствах. Altis Life и остальные Life-фреймворки общаются с базой MySQL через расширение extDB3, а учётные данные лежат в открытом виде в @extDB3/extdb3-conf.ini. Проверьте в /etc/mysql/mariadb.conf.d/50-server.cnf, что там стоит:
bind-address = 127.0.0.1
3. Обезвредить Steam-query-порт, не вылетев из браузера серверов
Порт 2303 UDP — самое чувствительное место публичного Arma-3-сервера. Он отвечает на A2S-запросы, то есть на стандартный запрос браузера серверов Steam: A2S_INFO отдаёт имя, карту и число игроков, A2S_PLAYERS список игроков, A2S_RULES список модов и подписей. Запрос — это маленький UDP-пакет, а ответ в разы больше. US-CERT числит протокол Steam в предупреждении TA14-017A с коэффициентом усиления полосы 5,5, а у Arma 3 ответ получается особенно большим, потому что вместе с ним отдаётся полный список модов.
Из этого следуют две вещи. Во-первых, ваш сервер может быть использован как усилитель против третьих лиц, если атакующий шлёт запросы с подделанным адресом отправителя. Во-вторых, и для вас это важнее, каждый запрос стоит процессорного времени на том единственном ядре, которое тянет симуляцию. Bohemia ведёт по этому поводу тикет с 2015 года (T83469): поддельные UDP-пакеты на игровой порт или на Steam-query-порт разгоняли CPU до 100 процентов и подвешивали сервер, а для успешной атаки через порт запросов хватало уже 4 Мбит/с. Именно поэтому в Arma 3 интенсивность пакетов опаснее полосы.
Первый рычаг — размер ответа. Директива steamProtocolMaxDataSize в server.cfg задаёт, сколько байт сервер вправе положить в свой ответ на запрос. Владельцы больших списков модов поднимают её до 2048 и выше, иначе в журнале появляется предупреждение «Query data overflow, Mods/Signatures will not be correctly received by clients». Но каждое повышение увеличивает ровно тот ответ, который усиливает атакующий. Поэтому ставьте значение настолько низким, насколько это ещё позволяет ваш список модов, и убирайте неиспользуемые моды из команды запуска:
steamProtocolMaxDataSize = 2048;
Второй рычаг — ограничение интенсивности по каждому адресу источника, которое затрагивает только порт запросов. Не блокируйте 2303 UDP целиком: без ответа на запрос ваш сервер исчезает из браузера серверов и с каждой страницы статуса, и новые игроки его больше не находят. Нормальный браузер серверов опрашивает несколько раз в минуту, а не сотни раз в секунду.
4. Убрать BattlEye-RCon из открытой сети
BattlEye — это анти-чит Arma 3, он включается в server.cfg строкой BattlEye = 1;. Относящееся к нему средство удалённого управления, BattlEye RCon, представляет собой отдельный UDP-протокол и настраивается в BattlEye/beserver_x64.cfg (файл с добавкой _x64 относится к arma3server_x64, то есть к обычному сегодня серверу):
RConPassword ВашАлфавитноЦифровойПароль
RConPort 2306
RConIP 127.0.0.1
MaxPing 350
RestrictRCon 0
Решающих моментов три. Пароль RCon должен состоять исключительно из букв и цифр: спецсимволы тихо сбивают разбор протокола в BattlEye, а доступ RCon с тихой ошибкой — это доступ, которого в критической ситуации у вас нет. RConIP задаёт, на каком адресе слушает RCon: если там стоит 127.0.0.1, интерфейс доступен только локально, и ваш инструмент RCon достаёт его через проброс порта по SSH. А RConPort должен лежать выше игрового блока, обычно это игровой порт плюс 4, то есть 2306. Тот, кому приходится открывать RCon наружу, отдаёт порт только фиксированному адресу своей админ-команды.
Одно при этом должно быть ясно: BattlEye — это анти-чит, а не защита от DDoS. Он проверяет игроков, которые уже подключены. Атакующий, который заливает ваш сервер трафиком, подключаться вообще не хочет.
5. Жёстко привязать Headless Client
Headless Client — это второй экземпляр Arma 3 без графики, который подключается к серверу как игрок и снимает с него расчёт ИИ. На больших миссиях это самый значимый прирост производительности вообще, потому что иначе ИИ лежит на том же ядре, что и симуляция. Разрешается он в server.cfg:
headlessClients[] = {"127.0.0.1"};
localClient[] = {"127.0.0.1"};
Без этих записей сервер не допускает ни одного подключения Headless Client, и это хорошая новость. Плохая: localClient[] выдаёт указанному адресу неограниченную полосу и практически отменяет для него проверку задержки. Вносите туда исключительно 127.0.0.1 или фиксированный адрес вашей собственной машины с Headless Client, но никогда целый диапазон адресов. Запускается клиент командой -client -connect=127.0.0.1 -port=2302 -password=..., и он занимает слот из maxPlayers. Заложите это в расчёт, иначе ваши игроки упрутся в полный сервер.
6. Ужесточить вход, подписи и голосования
Эти настройки защищают не ваш канал, но они закрывают всё, что идёт обычным путём входа: изменённые клиенты, выполнение скриптов в игре и злоупотребление голосованиями. Следующие строки должны быть в каждой server.cfg публичного сервера:
verifySignatures = 2;
BattlEye = 1;
kickDuplicate = 1;
allowedFilePatching = 0;
maxPlayers = 64;
disconnectTimeout = 30;
maxPing = 200;
maxDesync = 150;
maxPacketLoss = 50;
kickClientsOnSlowNetwork[] = {1, 1, 1, 1};
voteThreshold = 1.5;
voteMissionPlayers = 100;
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";
verifySignatures = 2 принудительно включает проверку подписей версии 2 для всех аддонов и является минимальным требованием для любого публичного сервера с модами. allowedFilePatching = 0 отказывает во входе клиентам, запущенным с -filePatching (значение 1 разрешает это только Headless Client, значение 2 всем). kickDuplicate = 1 выбрасывает второе подключение с тем же идентификатором. kickClientsOnSlowNetwork[] решает по каждой записи, будут ли четыре порога из maxPing, maxPacketLoss, maxDesync и disconnectTimeout только записываться в журнал (0) или применяться (1). disconnectTimeout принимает значения от 5 до 90 секунд. voteThreshold выше 1 делает голосования недостижимыми и закрывает тем самым самый популярный способ сорвать сервер без единого атакующего пакета: смену миссии голосованием.
7. Ограничить интенсивность пакетов и соединений по адресу источника
Против небольших атак и неаккуратных ботов помогает верхний предел на каждый адрес источника. Поскольку Arma 3 идёт чисто по UDP, работают с hashlimit, и порт запросов получает заметно более узкий предел, чем игровой порт:
iptables -I INPUT -p udp --dport 2303 -m hashlimit --hashlimit-name a3_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 2302 -m hashlimit --hashlimit-name a3_game --hashlimit-mode srcip --hashlimit-above 900/sec --hashlimit-burst 1200 -j DROP
iptables -I INPUT -p udp --dport 2302:2306 -m length --length 0:27 -j DROP
Первое правило отбрасывает запросы из того же источника, если их устойчиво больше десяти в секунду, второе игровые пакеты начиная с устойчивых 900 в секунду, третье UDP-пакеты без пригодной полезной нагрузки. Все три цифры — стартовые значения, а не истина в последней инстанции: полный Life-сервер на 80 игроков создаёт заметно больше пакетов, чем партия Antistasi вшестером, а слишком жёсткая настройка выбрасывает ваших же игроков. Сначала померьте неделю в обычном режиме.
Два замечания к этому. Просто добавленные правила iptables после перезагрузки исчезают, в Debian и Ubuntu их сохраняют так:
apt-get install -y iptables-persistent
netfilter-persistent save
А при работе с UFW такие правила помещают в /etc/ufw/before.rules, иначе они пропадут при следующем ufw reload. Ещё одно часто упускаемое узкое место — отслеживание соединений в ядре: записи там заводит и UDP, а флуд запросов с множества поддельных адресов заполняет таблицу за секунды. Когда она переполняется, сервер отбрасывает и легитимные пакеты, а в журнале появляется «nf_conntrack: table full». Текущее значение и верхний предел показывает:
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
8. basic.cfg: полоса, размеры пакетов и дополнительные файлы
Второй конфигурационный файл Arma-3-сервера называется basic.cfg и загружается параметром -cfg=, тогда как -config= загружает server.cfg. Он управляет поведением в сети и содержит ровно одно значение, которое напрямую относится к безопасности:
MaxMsgSend = 1024;
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
MinBandwidth = 15000000;
MaxBandwidth = 100000000;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;
MaxCustomFileSize = 0;
class sockets { maxPacketSize = 1400; };
MaxCustomFileSize — это максимальный размер в байтах для файлов лиц и звуков, которые приносят с собой игроки и которые сервер раздаёт всем остальным. Значение 0 отключает такую раздачу. Тем самым отпадает путь, на котором один-единственный клиент занимает полосу вашего сервера вообще без какой-либо атакующей инфраструктуры. MinBandwidth — это полоса, которую сервер считает гарантированной, ориентир здесь число игроков умножить на 256 кбит/с, то есть около 16 Мбит/с на 64 слота. Слишком оптимистичные значения повышают нагрузку и рассинхронизацию, потому что сервер создаёт сообщения, которые затем отбрасывает. MaxMsgSend ограничивает число пакетов на шаг симуляции и является первым рычагом против рассинхронизации, причём стандартное значение 128 для современных серверов занижено.
9. Протоколирование, чтобы во время атаки не гадать
Самый важный шаг — тот, который почти никто не делает заранее: собрать базу для сравнения, пока всё работает нормально. Без нормального значения вы после инцидента не скажете, много ли это, 40 000 пакетов в секунду, или это просто вечер субботы. С apt-get install -y vnstat sysstat измерение идёт постоянно в фоне, а logFile = "arma3server.log"; в server.cfg даёт к этому взгляд со стороны сервера. Во время инцидента хватает четырёх команд:
sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp portrange 2302-2306 -c 200 -q
Показательно сравнение портов. Если нагрузка лежит почти целиком на 2303, это флуд запросов, и бьёт он по процессорному времени. Если она равномерно распределена с 2302 по 2306 и адреса отправителей всё время новые, это поддельный UDP-flood, и бьёт он по каналу. Для tcpdump правило одно: всегда ограничивайте объём через -c, ведь захват трафика под полной нагрузкой дополнительно нагружает и без того перегруженный сервер. Как разобрать полученные значения, описано в статье Как определить DDoS-атаку. Как вообще правильно установить и обновлять сервер, описано в статье Установка игрового сервера через SteamCMD.
Где эти меры заканчиваются
Теперь та часть, которую не решит ни один конфигурационный файл. Все описанные выше меры работают на вашем сервере, то есть в конце канала. Правило файрвола принимает решение о пакете, который уже прошёл по кабелю. Вы можете его отбросить, но не можете сделать неотправленным.
Давайте посчитаем. Типовой игровой сервер подключён на 1 Гбит/с, это 125 мегабайт в секунду, и канал заполнен, как только кто-то отправит больше. Вторая величина — интенсивность пакетов, и в Arma 3 она почти всегда упирается первой. При маленьких пакетах по 64 байта в канал на 1 Гбит/с помещается около 1,49 миллиона пакетов в секунду. Обычное серверное ядро в зависимости от CPU и сетевой карты обрабатывает несколько сотен тысяч из них, прежде чем начинает отбрасывать, а симуляция Arma 3 вдобавок висит на одном-единственном вычислительном ядре.
| Показатель | Значение |
|---|---|
| Стандартный блок портов | с 2302 по 2306 UDP, для игрового процесса TCP не нужен |
| Порт запросов | игровой порт плюс 1, по умолчанию 2303 UDP |
| Порт RCon (BattlEye) | задаётся через RConPort, обычно игровой порт плюс 4, то есть 2306 UDP |
| Шаг между портами при нескольких экземплярах | не менее 100 (2302, 2402, 2502) |
| Ориентир по полосе в обычном режиме | число игроков умножить на 256 кбит/с, то есть около 16 Мбит/с при 64 слотах |
| Коэффициент усиления протокола Steam | 5,5 по данным US-CERT, предупреждение TA14-017A |
| Задокументированный нижний порог действующей атаки | 4 Мбит/с на порт запросов хватало, чтобы подвесить Arma-3-сервер (тикет Bohemia T83469) |
| 1 Гбит/с в пакетах | около 1,49 миллиона пакетов в секунду при размере пакета 64 байта |
| Отфильтрованные в KernelHost пики | 473,4 Гбит/с при 41,5 миллиона пакетов в секунду, отдельно UDP-flood на 112,2 Гбит/с |
Строка про 4 Мбит/с — самая неприятная. Атака в Arma 3 не обязана быть большой, чтобы подействовать: ей достаточно отправить достаточно пакетов на нужный порт. Владельцы серверов описывают это словами «загрузка ведь была совсем не высокой, а всё равно всё легло». И наоборот, для объёмных атак действует простая физика: при 473,4 Гбит/с любая локальная настройка бессмысленна, потому что пакеты ваших игроков не доходят ещё раньше. Объёмные атаки должны заканчиваться в сети перед сервером.
Что KernelHost этому противопоставляет
Постоянная защита, которая включена в каждый сервер
Защита от DDoS в KernelHost построена в два уровня и активна постоянно, вам не нужно ничего включать, заказывать или настраивать:
- Уровень 1: 17 Тбит/с ёмкости mitigation в глобальной scrubbing-сети. Объёмные атаки вычищаются близко к источнику, ещё до того как они дойдут до дата-центра.
- Уровень 2: фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне. Непосредственно перед сервером распознаются и отбрасываются схемы, характерные для конкретных протоколов, пакет за пакетом.
Решают два свойства. Защита работает постоянно и не должна сначала отреагировать на атаку, поэтому нет тех первых минут, когда сервер недоступен. И null-routing не применяется: ваш IP-адрес остаётся в сети, отбрасываются только вредоносные пакеты. Тот, кто убирает IP-адрес из сети, добивается для вас того же результата, что и атакующий. Какие игры и протоколы покрыты, перечисляет статья Защита игровых серверов от DDoS в реальном времени.
Advanced DDoS Protection для проектов под постоянным обстрелом
Некоторые проекты атакуют не время от времени, а прицельно и неделями. Life-сервер с постоянной аудиторией и конкурирующей сценой вокруг — это правило, а не исключение. Для них есть Advanced DDoS Protection от 50,00 € в месяц, по модели PrePaid, без минимального срока и без платы за подключение. Разница не в большей ёмкости, а в контроле:
- Выделенный защищённый IP-адрес из франкфуртского ядра сети, на который ваш сервер переводится внутри нашей сети. С вашей стороны ничего перестраивать не нужно.
- Самостоятельно управляемые правила защиты по портам и протоколам в личном кабинете: вы отдельно задаёте, что разрешено на 2302 UDP и что на 2303 UDP, и можете вести порт запросов заметно строже, чем игровой порт.
- Изменения вступают в силу в реальном времени, поэтому подстраивать их можно прямо во время идущей атаки, а не ждать окна обслуживания.
- Профиль защиты под конкретную игру, равно как и для модифицированных и собственных приложений на любых портах TCP или UDP.
Сравнение двух уровней
| Характеристика | Включённая постоянная защита от DDoS | Advanced DDoS Protection |
|---|---|---|
| Цена | входит в каждый серверный тариф без доплаты | от 50,00 € в месяц, PrePaid |
| Ёмкость фильтрации | 17 Тбит/с глобального scrubbing плюс фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне | та же двухуровневая фильтрация |
| IP-адрес | IP-адрес вашего сервера | дополнительный выделенный защищённый IP |
| Набор правил | автоматические профили, настраивать ничего не нужно | собственные правила по портам и протоколам в личном кабинете, например 2302 и 2303 раздельно |
| Изменения | применяются автоматически | вступают в силу в реальном времени, в том числе во время атаки |
| Игровой профиль | оптимизированные профили для распространённых игр | профиль под конкретную игру, в том числе для модифицированных приложений |
| Null-routing | нет | нет |
| Срок | привязан к серверному тарифу | PrePaid, без минимального срока, без срока расторжения, без платы за подключение |
Большинству Arma-3-проектов хватает включённой постоянной защиты вместе с аккуратной настройкой сервера. Advanced DDoS Protection — это ответ на ситуацию, когда кто-то воспринимает происходящее лично.
Частые ошибки и что с ними делать
«Я перенёс порт с 2302 на 2402, а атака продолжилась»: этого и следовало ожидать. Сервер сам регистрирует свой новый порт на мастер-сервере Steam, и список серверов тут же публикует его снова. Смена порта помогает только против того, кто пользуется старым адресом со старого скриншота.
«Я полностью закрыл 2303, и теперь нас никто не находит»: именно это и происходит. Без ответа на Steam-query-порту запись в браузере серверов отсутствует, и любая страница статуса и любой Discord-бот показывают сервер как офлайн. Правильное решение — ограничение интенсивности по адресу источника, а не блокировка.
«В журнале стоит NetServer::SendMsg: cannot find channel»: это сообщение появляется, когда сервер хочет писать в соединение, которого уже нет. Как правило, оно сопровождает обрывающиеся подключения игроков и просадки производительности (Bohemia ведёт это под T83936), а не обязательно атаку. Сначала проверьте, выглядит ли интенсивность пакетов на интерфейсе вообще необычной.
«Мои правила iptables не срабатывают»: частых причин три. Правила стоят позади цепочек UFW, и дело до них не доходит. Либо они пропали после последней перезагрузки (тогда помогут netfilter-persistent save или запись в /etc/ufw/before.rules). Либо атака объёмная, и правило работает корректно, только канал уже забит. Проверьте командой iptables -L INPUT -n -v, растут ли счётчики совпадений. Если они остаются на нуле, правило не достигается.
«После нового файрвола BattlEye выкидывает всех игроков»: сервер больше не достаёт arma31.battleye.com. Исходящие порты 2344 на TCP и UDP, а также 2345 на TCP должны оставаться открытыми, иначе связь анти-чита с сервером обрывается.
«Мой прежний провайдер заблокировал мой IP-адрес»: это и есть null-routing. Так провайдер защищает собственную сеть, а для вас результат ничем не отличается от успешной атаки, обычно ещё на несколько часов после неё. Если сомневаетесь, спросите напрямую: трафик фильтруют или адрес уводят в null-routing. Ответ определяет вашу доступность сильнее, чем любые характеристики железа.
«В tcpdump я не вижу ничего подозрительного»: если трафик отфильтрован ещё в сети перед сервером, то до самого сервера, как и ожидается, ничего не доходит. При работающей фильтрации это нормальная картина. Верно и обратное: при насыщенном канале до вас может не дойти даже та SSH-сессия, из которой вы собирались снимать измерения. Тогда используйте VNC-консоль в личном кабинете, она работает независимо от сети гостевой системы.
Коротко о главном
- Arma-3-серверу нужны наружу ровно три UDP-порта: 2302 для игры и голоса, 2303 для Steam-query и 2304 для регистрации на мастер-сервере Steam. TCP игре не нужен.
- Порт 2306 UDP несёт BattlEye и интерфейс RCon и относится исключительно к вашим собственным админским адресам, что задаётся через
RConPortиRConIPвbeserver_x64.cfg. - Steam-query-порт 2303 — самое чувствительное место: по данным US-CERT TA14-017A протокол Steam имеет коэффициент усиления 5,5, а каждый запрос стоит процессорного времени на ядре, которое тянет симуляцию. Ограничивать, а не блокировать.
steamProtocolMaxDataSizeдержать настолько малым, насколько позволяет список модов, и выставитьMaxCustomFileSize = 0;вbasic.cfg: и то и другое уменьшает объём данных, который ваш сервер отдаёт без спроса.- В Arma 3 решает интенсивность пакетов, а не полоса. Bohemia с 2015 года документирует под T83469, что уже 4 Мбит/с на порт запросов хватало, чтобы подвесить сервер.
- Локальные меры заканчиваются на канале. Начиная с объёма атаки в 1 Гбит/с или с нескольких сотен тысяч пакетов в секунду решает исключительно фильтрация в сети перед сервером.
- В KernelHost двухуровневая постоянная защита входит в каждый серверный тариф без доплаты и активна с момента развёртывания, без null-routing. Advanced DDoS Protection дополняет её от 50,00 € в месяц выделенным защищённым IP-адресом и самостоятельно управляемыми правилами по портам.
Если ваш проект уже работает в KernelHost, фильтрация активна, и делать для этого ничего не нужно. Если вы всё же замечаете странности, откройте тикет в поддержку, чтобы правила фильтрации подстроили под ваш IP-адрес. Во время идущей атаки с нами дополнительно можно связаться через экстренный чат WhatsApp по номеру +43 650 8209883.
Частые вопросы
Мой Arma-3-сервер сейчас офлайн. Как понять, что это DDoS-атака?
Какие порты на самом деле нужны Arma-3-серверу?
Можно ли просто заблокировать Steam-query-порт 2303?
Что такое отражение Steam-запросов и почему оно бьёт по Arma-3-серверам?
Защищает ли BattlEye мой Arma-3-сервер от DDoS-атак?
Поможет ли быстро сменить IP-адрес или порт прямо сейчас?
Можно ли отбиться от DDoS-атаки средствами iptables или UFW?
С какого объёма атаки мой Arma-3-сервер уже не справится сам?
Как правильно защитить Headless Client?
Уйдёт ли мой сервер в KernelHost в офлайн во время атаки?
Стоит ли защита от DDoS в KernelHost отдельных денег и когда нужна Advanced DDoS Protection?
2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

