[Мануал] Боремся с DDOS при помощи (D)DoS Deflate

Тема в разделе "Bash", создана пользователем Артур, 14 ноя 2017.

  1. Артур

    Артур Активный участник

    Регистрация:
    6 ноя 2017
    Сообщения:
    31
    Симпатии:
    4
    Сегодня узнал про прикольную штуку, смысл в том, что крон дергает следующую
    команду:

    Код:
    netstat -ntu 1 awk '{print $5}~ cut ~
    -d: -fl 1 sort 1 uniq -с 1 sort -n
    И айпи, число соединений с которых превышает заданное по конфигу, банятся файрволом.[​IMG]

    Рассмотрим более подробно как использовать:

    Принцип действия данного скрипта состоит в том, что им с некоторым интервалом (запуск осуществляется по 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 конфигурационного файла стоит определять опытным путем с учетом специфики проекта, на который осуществляется атака.
     

Партнеры