Назад | Перейти на главную страницу

Ddos-атака через iptables

Я использовал свои собственные «правила iptables» для блокирования всех основных типов DDOS-атак на игровые серверы, потому что эти атаки были специфичными для приложения / игрового сервера, а не для общих DDOS-атак. Мне потребовалось почти 3 года, чтобы изучить эти атаки и отреагировать этими правилами. До сих пор я использовал ограничение скорости для iptables, которое автоматически удаляло IP-адрес, если он составлял 250 просмотров в секунду, поскольку скорость клиента намного ниже, чем эта (максимальная скорость равна 500 кбит / с). Это связано с тем, что злоумышленники обычно отправляют большое количество счетчиков попаданий с пакетами длиной 15:30, поскольку это общая длина пакета, при которой игровой сервер хорошо отвечает. Это работало очень хорошо, пока кто-то сегодня не атаковал что-то другое, чтобы пройти через это правило.

-A INPUT -p udp -m udp --dport 16000:29000 -m recent --set 
-A INPUT -p udp -m udp --dport 16000:29000 -m recent --update --seconds 1 --hitcount 250 -j DROP 

Недавно я наблюдал атаки, которые легко делали входные данные 1-3 МБ / с, как видно через iftop на мои серверы, и приведенные выше правила не блокировали их, потому что мой игровой сервер отвечал «.... отключиться». пакеты для всех входящих подключений. Это происходит, когда игровой сервер не распознает входную строку или длину пакета. Вот содержимое пакета:

http://paste.ubuntu.com/6000381/

Теперь, как вы могли видеть, пакет имел огромную длину. Согласно Wireshark, где я взял пакет, длина пакета была 700, а размер / длина данных - около 5000 байт. И я видел это раньше, что если у вас более высокая длина данных / размер пакета, вы все равно можете иметь более высокую скорость даже с меньшим количеством совпадений.. Возможно, это объясняет, почему у него было входное значение около 3 МБ / с, и он не блокировался через счетчики обращений, потому что он никогда не имел счетчиков обращений больше 250 ..

Теперь мне нужно что-то, что больше зависело бы от пропускной способности, чем количество пакетов в секунду. Мне требуется правило iptables, которое автоматически блокировало бы ввод> 1 МБ / с, и при необходимости оно может использовать длину пакета. Общий размер / длина данных клиента честного игрового сервера обычно будет иметь длину пакета и размер данных менее 500 байт, но в некоторых случаях он может быть больше, но никогда не будет занимать пропускную способность более 500 кб / с.

Этот вопрос отличается от остальных вопросов, на которые ранее были даны ответы, потому что он в первую очередь зависит от приложения. Во-вторых, я спрашиваю решение iptables, которое запрещает любой ввод> 1 МБ / с?

Обновить:

Я провел некоторую теоретическую работу, чтобы объяснить, почему входная полоса пропускания 3 Мбит / с не превышает 250 просмотров в секунду, и вот работа:

3 Мб = 3х1024х1024 = 3145728 бит / сек = 393216 байт / сек

Следовательно,

Если размер пакета составляет 5000 байт, максимальное количество пакетов в секунду должно быть:

393216/5000 = 78,6 пакетов в секунду

А это значит, что если бы правила iptables работали, пакет должен был быть меньше 393216/250 = 1516 байт.

Вы смотрели fail2ban? Это может помочь вам отреагировать на входящие атаки, отбросив исходные IP-адреса на брандмауэре.