Сегодня узнал про прикольную штуку, смысл в том, что крон дергает следующую команду: Код: netstat -ntu 1 awk '{print $5}~ cut ~ -d: -fl 1 sort 1 uniq -с 1 sort -n И айпи, число соединений с которых превышает заданное по конфигу, банятся файрволом. Рассмотрим более подробно как использовать: Принцип действия данного скрипта состоит в том, что им с некоторым интервалом (запуск осуществляется по cron) определяются IP, с которых превышен лимит на соединения к серверу. Такие IP блокируются через iptables или apf на некоторое время и по истечению этого времени происходит их вынесение из запрещающих правил. Разблокировка IP через некоторое время в таком случае дает два положительных момента: 1) При вынесении таблица правил не содержит очень большое количество записей, а только те, с которых недавно осуществлялась атака, это дает большую производительность фильтра пакетов (iptables или apf); 2) Снижается нагрузка на CPU путем предотвращения перебора большого количества правил для входящего пакета. Установка (D)DoS Deflate: Качаем установочный скрипт, даем ему права на выполнение и запускаем его Код: wget http://www.inetbase.com/scripts/ddos/install.sh chmod 0700 install.sh ./install.sh В ходе установки в директорию /usr/local/ddos/ вносится сам скрипт, конфигурационные файлы и добавляется задание в cron. В debian-подобных системах задание, внесенное в cron установочным скриптом не всегда выполняется (в данном случае именно так и произошло), поэтому нужно самостоятельно добавить выполнение скрипта с помощью команды: Код: crontab -e Внести в редакторе заданий следующую строку: Код: */1 * * * * nice -n -5 /usr/local/ddos/ddos.sh Где */1 * * * * — указывает на выполнение скрипта с интервалом в 1 минуту. Проверить, выполняется ли скрипт по cron можно с помощью просмотра /var/log/syslog. В нем должны содержаться строки вида Код: May 10 20:07:02 astreus /USR/SBIN/CRON[30284]: (root) CMD (nice -n -5 /usr/local/ddos/ddos.sh) Далее проверяем вывод команды iptables-save и удостоверяемся, что в ее выводе содержатся запрещающие правила: Код: -A INPUT -s 41.72.34.212/32 -j DROP ... -A INPUT -s 85.159.201.54/32 -j DROP Общее количество запрещающих правил можно посмотреть с помощью команды Код: iptables-save | grep -c DROP Файл конфигурации скрипта /usr/local/ddos/ddos.conf имеет следующую структуру: Код: ##### Путь к основным составляющим работы скрипта PROGDIR="/usr/local/ddos" PROG="/usr/local/ddos/ddos.sh" IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" # список игнорируемых IP CRON="/etc/cron.d/ddos.cron" APF="/etc/apf/apf" IPT="/sbin/iptables" ##### Интервал запуска скрипта в минутах FREQ=1 ##### Количество максимальных соединений с одного IP NO_OF_CONNECTIONS=90 ##### Если используем iptables - ставим 0 ##### Если используем apf - устанавливаем его и ставим 1 APF_BAN=0 ##### При запуске задания через cron, ##### разработчики рекомендуют значение этой опции 1 KILL=1 ##### E-mail, на который отправляется уведомление о бане ##### Если отправка не нужна, ставим значение "" EMAIL_TO="root" ##### Время бана в секундах BAN_PERIOD=3600 Для отправки уведомлений на e-mail используется команда mail -s «IP addresses banned on …» $EMAIL_TO. Стоит проверить с командной строки отправку письма с помощью этой команды. Возможно, понадобится установка пакета mailx (если он не установлен). Если нужно исключить блокировку скриптом определенных IP, они вносятся в /usr/local/ddos/ignore.ip.list по одному в строку. Например: Код: 10.10.10.1 10.10.10.100 При настройке (D)DoS Deflate в дистрибутивах на базе RedHat нужно учесть такие особенности: Задание по cron добавляется и выполняется корректно, поэтому вручную добавлять его не нужно ! После смены интервала запуска скрипта (параметр FREQ) нужно единоразово выполнить скрипт с опцией —cron (/usr/local/ddos/ddos.sh —cron), в самом скрипте для корректной работы в связи с отличием вывода команды netstat в Debian и RedHat нужно часть: Код: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST заменить на Код: netstat -ntu | grep ':' | awk '{print $5}' | sed 's/::ffff://' | cut -f1 -d ':' | sort | uniq -c | sort -nr > $BAD_IP_LIST Параметр NO_OF_CONNECTIONS конфигурационного файла стоит определять опытным путем с учетом специфики проекта, на который осуществляется атака.