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

Правило iptables для остановки DDOS

Мой сервер подвергается атаке ddos, трафик в моих журналах apache выглядит так:

ip address - - [11/Apr/2013:01:01:04 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"

Как я могу заблокировать это с помощью таблиц IP? Я использую:

-A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j DROP

но это, похоже, ничего не делает. Я думаю, мне нужно что-то в этом роде.

Спасибо

Я не уверен, как это можно сделать в iptables, но я бы порекомендовал вам взглянуть на OSSEC, который автоматически блокирует повторных нарушителей. Вы также можете взглянуть на CloudFare, у них также есть бесплатный пакет и они специализируются на предотвращении DDoS-атак, поскольку вам нужно отбросить трафик. перед оно доходит до вас. Если адрес - это всего лишь один IP-адрес, я бы просто удалил его навсегда.

Я изменил правило iptable с Вот, посмотри:

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent   --update --seconds 60 --hitcount 50 -j DROP

Не видя всех ваших iptables и некоторого анализа, показывающего, что скорость превышает указанные вами пределы, невозможно сказать, почему это происходит - например, может быть просто так, что вы получаете много запросов через одно соединение.

Даже если вы не используете пакеты keepalive, брандмауэр с отслеживанием состояния (сам по себе) не является очень эффективным инструментом для предотвращения атак DOS. Формирование трафика помогает - но это очень быстро усложняется. Есть несколько модулей apache, которые поддерживают минимальную гарантию пропускной способности, которую намного проще настроить, чем QOS ядра. Но я бы рекомендовал использовать fail2ban для блокировки IP-адресов, вызывающих проблему.

Несколько проблем:

  1. Использование брандмауэра с отслеживанием состояния для защиты от dDoS-атак часто является плохой идеей: вы помогаете злоумышленнику, позволяя ему выделять состояние (то есть память) на вашем компьютере. Модуль состояния следует заменить просто чем-то вроде --tcp-flags SYN SYN
  2. В -j DROP в конце - ошибка, это означает отбрасывание всех пакетов, которые находятся ниже thershold. Так должно быть -j ACCEPT и после этого иметь правило DROP. (Если вы не заметили эффекта, это может быть связано с тем, что позже у вас будет другое правило ACCEPT или общая политика ACCEPT.)
  3. Я предпочитаю модуль hashlimit, который может работать с префиксами, а не только с отдельными IP-адресами. --tcp-flags SYN SYN -m hashlimit --hashlimit-name Web --hashlimit-above 3/second --hashlimit-mode srcip --hashlimit-burst 7 --hashlimit-srcmask 28 -j DROP