У меня есть сайт, который подвергался DDOS-атакам в одно и то же время каждый день в течение последнего месяца, и, потратив месяц на изучение и выявление ошибки, мы ввели в действие сценарий bash, который, если соединение достигает 80+ макс. Соединений за одну минуту затем IP забанен и помещен в IPTABLES.
Это отлично работало в течение двух дней, и я почувствовал, что наконец решил проблему.
Но, увы, теперь человек отправляет несколько IP-адресов с одним подключением на каждом (см. Вывод здесь http://pastebin.com/7AJqBfJa). Это приводит к тому, что сайт не работает, как это было, когда один IP-адрес отправлял 150 соединений в минуту.
Это, конечно, совершенно другая игра, когда дело доходит до предотвращения DDOS, и я обращаюсь за помощью к гуру и всем, кто достаточно внимателен, чтобы дать совет. На данный момент я не знаю, как это исправить, и я буду благодарен за любую помощь.
Как упоминал Найл, mod_evasive очень хорошо работает в этой ситуации, и я недавно использовал его, чтобы решить очень похожую проблему, с которой я столкнулся на одном из моих сайтов. Это помогает в ситуации, когда вы не получаете тонну соединений на одном IP-адресе, но видите неестественные закономерности, возникающие на сервере.
В моем случае, о котором я тоже писал в блоге Вот, Я установил mod_evasive и настроил его со следующими настройками:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 100
DOSPageInterval 3
DOSSiteInterval 5
DOSBlockingPeriod 300
DOSLogDir "/var/log/httpd/modevasive/"
DOSEmailNotify your@emailaddress.com
</IfModule>
Обычно, если один IP запрашивает один и тот же ресурс (файл) 3 раза в течение 5 секунд; или 100 обращений к любому файлу за 5 секунд; После этого Apache отклонит дальнейшие запросы к этому файлу.
Если вы хотите улучшить этот сценарий; вы можете запускать системные команды при достижении ваших параметров. В моем случае я добавил эту команду в конфигурацию выше:
DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600"
Это делает мой брандмауэр CSF заблокировать IP на час. Вы могли бы так же легко написать сценарий iptables, чтобы сделать то же самое, но CSF упрощает мне задачу.
В любом случае надеюсь, что это поможет вам справиться с атаками DDOS!
Вы можете использовать iptables, чтобы ограничить количество подключений к сервису на каждый IP-адрес, чтобы предотвратить DDoS-атаки, пока ваш скрипт iptables их не уловит
iptables -A INPUT -p tcp -m limit --limit 3/s --dport DESTINATIONPORT --limit-burst 10 -m state --state NEW -j ACCEPT
Это ограничит количество новых подключений до 3 в секунду при максимальном количестве 10 подключений.
Обязательно настройте это в соответствии с вашими потребностями, 3 соединения в секунду довольно мало, в зависимости от трафика, с которым работает ваш сервер.
Предполагая, что вы используете Apache, mod_evasive может оказаться полезным.