DDOS Deflate — скрипт, который поможет администратору в защите сервера от простых атак. Серьёзный DDoS конечно же не отобьёт, но сделать так, что бы любители запускать HOIC или slowloris не беспокоили, сможет легко.
Установка и настройка DDOS Deflate.
Ставим скрипт следующим образом:
# cd /usr/local/src/ # wget http://www.inetbase.com/scripts/ddos/install.sh # chmod +x install.sh # ./install.sh
Конфигурационный файл доступен здесь /usr/local/ddos/ddos.conf. Он очень простой. В конфиге мы можем указать пути до бинарников и скриптов, задать частоту проверки, количество соединений после которых IP будет заблокирован, время на которое система заблокирует его и почту, на которую будет уходить уведомление о блокировке. Там же мы можем указать, чем будет производиться блокировка — с помощью apf, или с помощью iptables. Задаём нужные параметры, сохраняем, закрываем.
Белый список IP, которые не будут попадать под ограничение задаётся в файле: /usr/local/ddos/ignore.ip.list В некоторых случаях, там где настроена схема двух веб-серверов (бекенд-фронтенд), имеет смысл в белый список добавить IP сервера.
Задание для cron’a расположено в файле: /etc/cron.d/ddos.cron Его можно создать командой:
# ddos --cron
Сам скрипт, с помощью которого происходит обработка и блокировка: /usr/local/ddos/ddos.sh С ним нам придётся поработать отдельно. Открываем его любимым текстовым редактором и находим там строку вида:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
Копируем её себе, выходим из редактора и выполняем команду в терминале:
# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr 1 servers) 1 Address 10 46.65.23.10
Как видим, в вывод команды попала лишняя информация. Наша задача, скорректировать команду так, что бы ничего лишнего не выводилось. Например:
# netstat -ntu | grep ':' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr 15 46.65.23.10
Либо один из вариантов ниже (в некоторых случаях вывод netstat может отличаться):
netstat -ntu | grep ':' | awk '{print $5}' | sed 's/::ffff://' | cut -f1 -d ':' | sort | uniq -c | sort -nr netstat -ntu | grep ffff | awk '{print $5}' | cut -d: -f4 | sort | uniq -c | sort -nr
В скрипте не забываем перенаправить вывод команды в > $BAD_IP_LIST. Прописываем изменённую строку:
netstat -ntu | grep ':' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
Сохраняем файл, запускаем:
# ddos -c
Ежеминутно выполняясь по крону, скрипт будет проверять вывод команды netstat и блокировать IP, которые превысят заданный лимит. Не дожидаясь выполнения крон задания, заблокировать IP вышедшие за лимит можно командой:
# ddos -k
Удаление DDOS Deflate.
Удалить DDOS Deflate можно либо удалив файлы вручную, либо выполнив команды:
# cd /usr/local/src/ # wget http://www.inetbase.com/scripts/ddos/uninstall.ddos # chmod +x uninstall.ddos # ./uninstall.ddos
Проверка работы DDOS Deflate.
Проверить работу DDOS Deflate можно, например, с помощью slowloris.pl. Скачиваем скрипт на сервер (ip 23.32.9.14) с которого будем выполнять тестовую атаку и запускаем его. Как только нужное количество запросов будет сделано, на сервере, где запущена защита, проверяем iptables, там будет что-то такое:
Chain INPUT (policy ACCEPT)num target prot opt source destination 1 DROP all -- 23.32.9.14 0.0.0.0/0
IP адрес, с которого шла атака был заблокирован на нашем сервере.