Доброго времени суток.Предыстория:
Я являюсь одним из мамонтов, что дожил до наших дней, держащий сервер игры Metin2. Проекту исполняется 2 года через 10 дней, нынешнему серверу - год. Две недели назад началась DDoS-атака, которой я, к сожалению, пока не смог противостоять и решил попытать счастье в поисках помощи у вас. К делу...Немного информации:
Сервер - Core i5 3.8ГГц (4 ядра) / 8Гб RAM / 2x500Гб SATA;
ОС - FreeBSD 10;
Firewall - Packet Filter.Так вот, ранее PF надежно защищал меня и я с командой спокойно занимались развитием сервера, но две недели назад начались DDoS-атаки, которые он просто не вывозит (подозреваю, что это botnet). Сообщения от хостера при каждой блокировке примерно в таком духе:
На момент блокировки зафиксирован средний входящий трафик 1.6 G бит в секунду со средним размером пакетов 338.
Основные источники трафика:
152.subnet118-97-77.static.astinet.telkom.net.id118.97.77.152 29.9M байт в секунду с размером пакета 1383 байт на 0 порт.
1.199.79.115 18.4M байт в секунду с размером пакета 287 байт на 13001 порт.
c-76-101-92-152.hsd1.fl.comcast.net76.101.92.152 17.9M байт в секунду с размером пакета 330 байт на 13001 порт.
116.231.142.73 17.7M байт в секунду с размером пакета 335 байт на 13001 порт.
116.226.17.126 17.7M байт в секунду с размером пакета 335 байт на 13001 порт.
116.231.133.210 17.7M байт в секунду с размером пакета 335 байт на 13001 порт.
62.217.41.81 17.1M байт в секунду с размером пакета 334 байт на 13001 порт.
141.70.80.99 17.1M байт в секунду с размером пакета 334 байт на 13001 порт.
39.73.197.141 16.7M байт в секунду с размером пакета 321 байт на 13001 порт.
89-162-96-137.fiber.signal.no89.162.96.137 12.3M байт в секунду с размером пакета 1375 байт на 0 порт.
83.20-broadband.acttv.in202.83.20.144 11.9M байт в секунду с размером пакета 1375 байт на 0 порт.
212-83-136-198.rev.poneytelecom.eu212.83.136.198 11.3M байт в секунду с размером пакета 1375 байт на 0 порт.
61.150.43.7 10.9M байт в секунду с размером пакета 1375 байт на 0 порт.
124.68.5.171 10.9M байт в секунду с размером пакета 340 байт на 13001 порт.
111.17.216.35 9.8M байт в секунду с размером пакета 1375 байт на 0 порт.Присутствует забавная нотка: атака идёт на игровые порты, однако они не падают. То есть, все, кто находились в игре, играют, но новые люди зайти не могут. Всех выбрасывает, когда хостер блочит интернет на сервере.
Пара кусочков из правил PF:
set limit { states 40000, frags 40000, src-nodes 4000, table-entries 400000 }
set timeout { tcp.first 30, tcp.opening 15, tcp.established 60 }pass in on $ext_if proto tcp from any to $ext_if port 11002 flags S/SA keep state \ (max-src-conn 35, max-src-conn-rate 8/15, overload <in_game> flush)
pass out on $ext_if proto { tcp, udp } all
Не уверен, что правильно понимаю, но в моём представлении происходит так: атакующие забивают очередь -> PF их не блокирует -> Хостер блочит сервер.
Может ли кто-нибудь помочь?
Заранее спасибо за отзывчивость.
> На момент блокировки зафиксирован средний входящий трафик 1.6 G бит в секунду
> со средним размером пакетов 338.
> Основные источники трафика:как-то нелогично.
Вы перечисляете ~20 источников. Если вы можете перечислить источники трафика, значит это ни разу не ботнет и их легко зафильтровать.
>Не уверен, что правильно понимаю, но в моём представлении происходит так: атакующие
>забивают очередь -> PF их не блокирует -> Хостер блочит сервер.Поясните, как связано забивание очереди и блокировка сервера хостером?
--------
Воспользуйтесь stateless-режимом файрволла для фильтрации 20 указанных вами источников трафика.
> Поясните, как связано забивание очереди и блокировка сервера хостером?Вы немного ошибаетесь, да и слегка не поняли меня. Источники, что были прикреплены - лишь основные на один из дней атак, ай-пи адреса постоянно меняются. Никакой связи между забиванием очереди и блокировкой хостером я не указывал. Очереди на пропуск забиваются в файрволле, принимая кучу трафика, но не блокируясь автоматически после чего хостер блокирует сервер.
> Очереди на пропуск забиваются в файрволле, принимая кучу трафика,
> но не блокируясь автоматически после чего хостер блокирует сервер.А какая хостеру разница что вы сделаете с траффиком? В смысле, заблокируете его или нет. Как максимум незаблокированный траффик может провоцировать какой-то ответный, но для этого атакующие должны как минимум протокол атаковать.
У вас сервер используется совместно с другими клиентами хостера, чтобы хостера состояние вашей системы вообще волновало? Потому что остальному оборудованию хостера вообще все-равно что там в вашей операционке творится. Единственное что их может волновать - если вы в ответ на флуд ответно флудите, генерируя много траффика. Или их волнует сам факт DDoS который от файрвола не зависит - до того как вы прибьете пакеты файрволом, они через хостера всяко пролетят. А дальше хостеру мало разницы что вы там на своей машине с ними уже сделали.
> Очереди на пропуск забиваются в файрволле, принимая кучу трафика,
> но не блокируясь автоматически после чего хостер блокирует сервер.да, непонятно, как выше справедливо заметили,
а какое дело хостеру до вашего сервера, до правил файервола на нём и т.п.
трафик через него (хостера) до вас уже прошел.у вас виртуальный дедик или чистый, физический?
если VDS, то тогда да, конечно, претензии будут.
> у вас виртуальный дедик или чистый, физический?
> если VDS, то тогда да, конечно, претензии будут.Выделенный сервер.
> Выделенный сервер.Тогда наиболее вероятно что у хостера забиваются каналы и они вырубают мишень атаки. После этого атакующие скорее всего или прекращают атаку или снижают интенсивность, посчитав что их миссия выполнена и больше тратить на вас ресурсы незачем. Хостер бурно радуется и все так и оставляет - проблемы у 1 клиента для них лучше чем проблемы у всех их клиентов вообще. А какие такие очереди у них могут забиться, если у вас отдельная железная машина?
Силами одной только настройки файрвола или софта вы ничего скорее всего не сделаете (кроме случая когда неудовольствие вызывают ответные пакеты с вашей машины). Если атакующие упорные - придется потратиться на услуги антиDDoS-фронтэнда. Еще можно попробовать договориться с аплинками хостера о блокировке траффика из проблемных подсетей на их стороне, что упростит жизнь хостеру, но это уже как повезет.
> На момент блокировки зафиксирован средний входящий трафик 1.6 G бит в секунду
> со средним размером пакетов 338.Ставьте фронтенды с антиддос.
У хостера скорее хилая инфраструктура и некомпетентная тех поддержка.
Защитой от DDOS по идее должен заниматься хостер на своем пограничном рутере. Наезжайте на него. Если он этого не делает, то и блочить вас не должен.
Коль вы на FreeBSD, там есть юзерспейсный ipfw (nmap-based ipfw). Он легко пережует такой траффик.
> Коль вы на FreeBSD, там есть юзерспейсный ipfw (nmap-based ipfw). Он легко
> пережует такой траффик.netmap, sorry :-)
Переесжайте в ДЦ который предоставляет АНТИDDOS, во всех остальных случая разговора с вами не будет.Есть ряд хостеров у которых стоит оборудование и они могут фильтровать, а есть те которые не обязаны это делать.
Услуга DDOS фильтра зависит исключительно только от услуг компании хостера или ДЦ,
Также:
вам влетает пачка мелких пакетов, вы смотрели их содержимое? Рекомендую изучить содержимое пакетов и разобраться в типе атаки, только после этого можно будет говорить о построении какой-то защиты.Многие хостеры оговаривают сколько pps должно быть на порту клиентов, 1.6G довольно не хилая цифра рисуется, в инфраструктуре хостера аплинк порт стойки должен быть 10G, с учетом резервирования это два по 10, это все еще должно и агрероваться, такая структура стоит хороших денег.
В первую очередь не рекомендую конфликтовать с хостером, грубить, вам надо добиться от него максимально детальной информации и помощи, а грубостью вы никогда этого не сделаете. Только вежливое общение и адекватные вопросы могут помочь вам для того чтобы хостер не забил на вас большой болт.
Вы не дали информации о типе трафика, UDP или TCP.
Если это tcp то скорее всего synfin пакеты валят.
Собственно, я немного продвинулся в теории и заметил, что если прописать pfctl -sS, то он вернет список IP (вот все адреса с последней атаки: http://pastebin.ru/8v0qqMvS). Вот, например, 10 строк оттуда:155.161.26.94 -> 0.0.0.0 ( states 1, connections 0, rate 0.0/60s )
112.179.85.156 -> 0.0.0.0 ( states 1, connections 0, rate 0.0/60s )
82.216.51.216 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )
68.237.18.102 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )
2.163.78.173 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )
74.121.255.220 -> 0.0.0.0 ( states 1, connections 1, rate 0.4/60s )
128.30.228.253 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )
95.176.103.18 -> 0.0.0.0 ( states 1, connections 0, rate 0.0/60s )
76.26.177.0 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )
218.147.234.9 -> 0.0.0.0 ( states 0, connections 0, rate 0.0/60s )Почти все атакующие IP имеют connections 0, а "живые" коннекты - 1 и более. Более того, все IP-адреса явно не принадлежат к какой-либо физической машине. Я считаю, что это что-то вроде подмены IP, когда IP адрес выбирается совершенно рандомно. Каждый атакующий IP не создает более одного подключения к серверу. Если я в чём-то не прав - извиняйте, я не очень силён в этом.
Есть ли какие-то предположения или идеи, как блокировать коннекты, у которых connections равен нулю? Или я вообще не в правильном направлении мыслю?
> Есть ли какие-то предположения или идеи, как блокировать коннекты, у которых connections
> равен нулю? Или я вообще не в правильном направлении мыслю?хостер блокирует вашу машину из-за общего трафика, идущего на ваш сервер - блокировкой вы никак нагрузку (количество приходящих к вам пакетов) на свой сервер не уменьшите - пакеты то уже у вас.
как вариант:если "Проекту исполняется 2 года через 10 дней, нынешнему серверу - год", то список айпи постояннных пользователей имеется.
разрешаем трафик от провайдеров постоянных клиентов и блокируем все остальное(например клиент 123.123.123.10, разрешаем 123.123.123.0\24). затем настраиваем процедуру регистрации на вебморде так чтобы адрес регистрируемого добавлялся в правила фаера(с вводом капчи и сообщением регеру о том что доступ с его айпи разрешен с других блокирован, добавляем без "\24"). профит.