Как я посмотрел твои правила, то при такой атаке - у тебя полностью перестанет сервер отвечать на A2S + забьётся канал, если хостинг не предоставляет защиту. Обычно они ограничивают порт, а если так, то начнёт лагать и все игроки повылетают, т. к. Трафик будет забит мусором (валидными игровыми пакетами). Так же у тебя будут ошибки по переполнению таблицы hash limit.
В правилах есть несколько упущений связанных с алгоритмом bm в качестве проверки строки. Правила выглядят избыточными их можно нормализовать, чтобы не привязываться к конкретному порту, а сделать универсальными.
Обычно атаки до 1 Гбит/с являются детской игрой, так как любой стрессер бесплатно тебе выдаст такую производительность, а вот атаки более умные - вот это уже поинтереснее.
Если тебе интересно протестировать свою защиту, то я могу найти уязвимости в ней и эксплуатировать, но это потребует аренды тачки, за твой счёт
Напомню, что фаер твой не отбрасывает игровые пакеты тем способом, что я написал, а значит они все пройдут проверки и попадут на srcds
"Напомню, что фаер твой не отбрасывает игровые пакеты тем способом, что я написал, а значит они все пройдут проверки и попадут на srcds"
Если сделать правило универсальным для всех портов:
- Атака на один порт (например, 27015) будет применять лимиты и фильтры ко всем игровым серверам.
- В результате, пока один сервер под атакой, легитимный трафик на другие порты (43335, 27050 и т.д.) тоже начнёт резаться.
- Игроки на соседних серверах начнут вылетать, хотя их сервер даже не атакуют.
Зачем универсальность? Твое правило про 120 пакетов в секунду с IP адреса не учитывает СЕМЬЮ. Они могут играть с одного IP адреса, и ты ломаешь им игру. А по по поводу универсальности - Только под конкретную сигнатуру, не больше. Каждый порт — свои правила. Избыточность тут на руку, учитывая реальную производительность железа и таблицы RAW. nf_tables, который я отправил через транслятор, — ну и хрен с ним, главное работает, и я знаю, какие правила работают нормально и в таком убогом режиме.
К тому же конфиг уже устарел давно.
NOTRACK я реализовал и сильно углубился в трафик A2S. Пакеты установки соединения, разрыва соединения — если их слишком много, они отправляются в Вальгаллу. Conntrack не забивается.
Внешний фильтр атаку любой мощности режет до
10 Мбит в секунду на порт. Легитимные игровые пакеты? Если речь об A2S — защищено новым конфигом с KMP-алгоритмом, сильно ограничены или заблокированы части A2S-протокола. Обычный пинг — тоже под лимитом и жёстко фильтруется хэш-таблицей. Если превышение порога с одного IP — адрес блокируется и отправляется в самые первые правила RAW: блокировать всё из списка.
Про порт Source Engine 27005 — тут похоже, никто не слышал, а именно его надо открывать. На открытых сетях мгновенно сохраняешь 50% онлайна.
Чтобы не потерять онлайн, через агент телеметрии я вывел, откуда чаще всего подключаются знакомые игроки, и добавил их диапазоны DHCP в списки защиты.
BGP View + GeoIP.
В случае атаки реализовано
2 механизма:
- Сервер открыт и защищён больше чем наполовину.
- Полная изоляция только по белым спискам и порту 27005 для серьёзных атак.
- Особо хреновые вещи - адовые - уже уровень хостинга - Blackhole. И правильно - лучше пару дней посидеть в оффлайне чем убитый сервер.
Детские атаки блокируются по умолчанию.
Какова вероятность спуфинга порта 27005? Никакая, минимально. DNS/NTP/etc методы стандартные не проходят из-за защиты на самом хостинге.
Эфемерные порты — нужно знать конкретику: какой диапазон, где эта дыра, и бить конкретным методом, легитимными пакетами. UDP туда смысла бить нет — там rate limit на внешнем сервере.
TCP SYN — я вас умоляю. У меня лимит на установку новых подключений, и работает внешний сервер защиты — SYN_LIMIT. До меня даже TCP не доходит просто если внешний сервер защиты тебя не проверил - а там целая сеть фильтров.
В белых списках также IP-адреса и DNS-имена мастер-серверов, главных серверов моего проекта, API и так далее.
По TTL — ну удачи. >128 — ушёл в лимит, поздравляю, DROP. Менее 32 — удачи, DROP.
A2S? Да боже мой, я вас умоляю — мне пофигу.
Валидные игровые пакеты? Пффф. Учитывая, что на одном порту допустим 10 тысяч левых игровых пакетов и мощное железо — смысл? Серверу пофигу, он это DROP-нет спокойно.
Краш-пакеты? tcpdump — блокируешь сигнатуру краш-пакета в RAW — забил хрен.
2.5 МЛН пакетов в секунду — 20% одного ядра, с внешкой — 1%. Сервер живёт спокойно.
Да господи, сама аренда тачки уже говорит о том, что на мой сервер надо тратить бабки, а я сделал всё бесплатно. Из 32 человек вылетит 6–8. Какая потеря? Онлайн всё равно восстановится через 20 минут, потому что сервер на слуху.
Ты зайдёшь на сервер и будешь слать лаг-пакеты? Удачи, net_chan_limit_msec 150 тебе привет передаёт.
Будешь с одного IP отсылать валидный мусор - удачи.
Множество IP - удачи. Если они из одного ASN/BGP/Страны - удачи господи.
IP Spoofing? Ладно. Атака будет погашена в любом случае. Какова вероятность что из белых списков постучатся? 0.083% вероятности?
Проблему с HashLimit я решил — она довольно легко решаема. Подключил кастомные цепочки в RAW — норм работает.
И да, нужно понимать:
это насколько нужно быть потерянным в жизни, чтобы атаковать сервер в Team Fortress 2 и надеяться, что он ляжет? Не спорю, такое заблуждение есть. Если кому-то не нравится, как ты администрируешь, — но за 11 лет ведения своего проекта настолько серьёзные DDoS-атаки я встречаю впервые.
Обычно это выглядит так:
- Кто-то обиделся на бане.
- Нажал кнопку на стрессере.
- Увидел, что сервер не лёг.
- Пошёл дальше, потому что тратить ресурсы на цель, которая не умирает, — это невыгодно.
Я вообще к чему:
Мой сервер Team Fortress 2— не цель уровня «положить любой ценой». Это хобби-проект от ноунейма, который живёт 11 лет. Если для атаки на него нужно арендовать железо, изучать конфиг, подбирать лимиты и сигнатуры — значит, моя защита уже выполнила свою задачу. Атакующий либо отвалится на этапе разведки, либо потратит ресурсы, которые не окупятся результатом, (20 тысяч потратили - я РОВНО 0) ибо игроки вернутся, защита будет выстроена ещё хитроумнее (Я себя знаю, и слишком упрямый), а я ничего не потеряю.
А по поводу обиженных - могу сказать что моя система PARSEC с анти-твинком - работает просто изумительно. До такой степени что меня даже пугает эффективность. Просто читеры пытаются, пытаются - по 7 человек заходят, самобанятся, и потом поток уходит в ноль. Щас так и происходит - все кто забанился разово - никогда на сервер не зайдут. Их система выкашивает.
По поводу вылета игроков - Ну вылетят 25% игроков, и что? Мастер-сервера в белых списках + 27005 порт.
A2S - ну да, заблокируется, и что? У меня задача сохранять онлайн существующий в часы пика максимально, обеспечивая плавный игровой геймплей, но нужно иметь понимание - что 100% защиты никогда не существовало, всегда и везде есть лазейки. И если надо для блокировки валидного трафика вписать 1 правило в таблицу RAW - извольте. У меня главное - ядро онлайна защищено - остальное - наживное.
Да и к тому же - не может 1 человек выполнять работу как на Anti-DDoS хостингах - там оборудование посерьезнее, и фильтры тоже. А я это все сделал бесплатно :)