Блог о программировании, электронике и рыбалке

Защита от DDOS атак своими руками

защита от ddosСнова меня DDOS-ят. В этот раз атака не сильная и заметил я ее случайно во время очередного этапа самообразования с целью заполнения пробелов в знаниях в области безопасности.

Если кто-то открыл эту статью просто так, то рекомендую все же ее прочитать. Я все писал "понятным"языком для лучшего восприятия.

DoS-атака (Denial of Service) — закидывание неугодных ресурсов различным флудом, приводящее их к нокдауну. А DDoS-атака — это такая DoS-атака, которую осуществляет не один энтузиаст, а разгневанная толпа, желающая Страшный Суд, Ад и Погибель неправославному ресурсу. Весь профит этого метода заключается в том, что грамотно спланированную атаку невозможно отразить вообще. В результате сервер начинает как минимум безбожно тормозить при ответах на нормальные запросы, а то и вовсе ложится, не вынеся такого издевательства.

Проще говоря, что такое DoS? Это, к примеру, когда ведёшь разговор с кем-то, но тут подходит алкаш, и начинает громко нести бред. Говорить либо невозможно, либо очень сложно. Решение: зовёшь охрану, она скручивает синяка и уводит.

DDoS же отличается тем, что алкашей вбегает толпа многотысячная, и даже если позвать охрану, она банально не сумеет всех скрутить и увести.

Наиболее же эффективная атака такого плана выполняется не тысячами набежавших алкашей (ибо набор добровольцев, организация, синхронизация и прочее), а превращением в зомби уже имеющихся вокруг мирных юзеров. Они уже есть, уже ходят вокруг, уже оборудованы ртом — осталось только заставить их начать орать пациенту в ухо. Всем сразу и независимо от их желания, по команде, с исполнительностью и настойчивостью компьютера. В компьютерном мире такой захват душ обычно выполняется с помощью трояна.

Луркоморье

Для начала нужно посмотреть сколько запросов идет с IP адресов клиентов. Для этого в консоли выполним команду:

netstat -ntu | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | more

защита от ddos

Видно, что с IP 192.230.77.217 поступило 129 обращений. "Алкаш" (смотреть выше) один, значит не DDOS, а просто DOS-атака. Заголовок статьи менять уже не буду - позже поймете почему.

Ради интереса, можно посмотреть на какие порты идут обращения с этого IP адреса выполнив команду:

netstat -na | grep 192.230.77.217

защита от ddos

Ага. 443 порт пользуется популярностью. Я думал как обычно на 80-й будет, но в принципе не важно.

Блокирую по всем портам исходящие и входящие соединения с этого IP адреса командами:

iptables -A INPUT -s 192.230.77.217 -j DROP

iptables -A INPUT -d 192.230.77.217 -j DROP

защита от ddos

Исходящие блокирую "на всякий случай". Вдруг меня взломают и начнут атаковать с моего сервера. Неприятностей потом будет куча, поэтому лучше подстраховаться.

Все порты блокирую на случай, если будет идти подбор паролей к FTP или еще к чему-то.

Проверяем заново текущую ситуацию после применения блокировки командой:

netstat -ntu | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | more

защита от ddos

Все чисто. Враг не пройдет!

Автоматизация защиты при DDoS атаке

Понятно, что все вышеописанное ручками выполнять лениво и не практично. Давайте этот процесс автоматизируем для нашего удобства и оперативности реагирования на атаки.

На основе одного примера, найденного в Интернете, я написал свой скрипт для защиты от DoS и DDoS атак. Он получился простой, но очень эффективный. Скрипт блокирует IP адреса, количество подключений с которых превысило 50. Это значение можно изменять - скрипт хорошо прокомментирован.

Код скрипта:

#!/bin/sh

# Находим все соединения на все порты и записываем их в файл ddos.iplist
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | grep -v "127.0.0.1" > /usr/local/ddos/ddos.iplist

# создаем DROP правила (не выдавать ответа сервера на запросы забаненых) для IP с количеством подключений более 50 и добавляем их в файл
awk '{if ($1 > 50) {print "/sbin/iptables -A INPUT -s " $2 " -j DROP"; print "/sbin/iptables -A INPUT -d " $2 " -j DROP";}}' /usr/local/ddos/ddos.iplist >> /usr/local/ddos/iptables_ban.sh

# запускаем скрипт бана IP атакующих
bash /usr/local/ddos/iptables_ban.sh

# Очищаем скрипт, который производит бан
cat /dev/null > /usr/local/ddos/iptables_ban.sh

Давайте его установим.

Для начала, необходимо создать рабочую папку для нашего скрипта. Вводим в консоли команду:

mkdir /usr/local/ddos

Теперь перейдем в эту папку командой:

cd /usr/local/ddos

Загружаем скрипт в эту папку командой:

wget https://geekelectronics.org/wp-content/files/ddos.sh

Выставляем права 755 на файл скрипта командой:

chmod 777 /usr/local/ddos/ddos.sh

Запускаем скрипт для теста командой:

/bin/sh /usr/local/ddos/ddos.sh

В папке со скриптом появятся два файла:

ddos.iplist - в него скидываются все подключения

iptables_ban.sh - сформированный скрипт для блокировки IP адресов

Теперь открываем файл /etc/crontab и добавляем в него следующие строки

*/5 * * * * root /bin/sh /usr/local/ddos/ddos.sh
@monthly root iptables -F

защита от ddos

  • Первая строка - запускает наш скрипт каждые 5 минут.
  • Вторая - производит раз в месяц очистку всех блокировок (амнистия).

За неделю работы скрипта ситуация с банами IP сложилась следующая (команда iptables -L).

защита от ddos

На этом все. Возникнут вопросы - пишите в комментариях.

Присоединяйтесь к нашей группе в Telegram @GeekElectronics
  • keyboard_arrow_downЗащита от DDOS атак своими руками
    • Автор:
    • Миниатюра: Защита от DDOS атак своими руками
    • Рубрика: Linux помощник
    • Обновлено: 02.06.2022
    • Комментариев: 28
    • Просмотров: 27 681
  • Оцените пожалуйста статью
    1 Star2 Stars3 Stars4 Stars5 Stars
    Загрузка...
  • Поделитесь с друзьями
Geek Electronics

Комментариев: 28

  • Avatar for source
    Mazaxaka:

    Зачем атакуют ? Но ведь это же круто! Он всем будет хвастаться, какой он крутой и доссил сервак. Если честно, не вижу смысла атаковать.. Если бы это был крупняцкий проект, неработоспособность которого приносит много миллионов, миллиардов убытков, а так, просто для шалости. Пусть детишки поиграют)

    • Avatar for source
      source™:

      Сегодня скинули ссылочку на видео, в котором школьники DoS-ят разные сайты. Запускают прогу, вводит адрес, выставляет 99999 потоков и стартуют.
      Потом демонстрируют, что атакуемый сайт не грузится.

      Было видно, как у него Skype на компе отваливается. Ну понятно - канал-то они свой забивают - вот ничего и не грузится.

      Эх..детишки... Учите матчасть :)

      Кстати, я статью обновил.

      • Avatar for source
        AlexS:

        Кстати всегда подобные детостатьи\ролики улыбают) так мило)

      • Avatar for source
        Andrey:

        Получается если пользователь обновит страницу 50 раз его забанит? или подключитсяк игравому серверу 50 раз тоже? в течении какого времени считаютсяэти 50 раз?

        • Avatar for source
          source™:

          50 подключений с одного IP на момент выполнения команды

  • Avatar for source
    Anton:

    Запустил скрипт, а мне выдало следующее:
    root@raspberrypi:~# sudo /bin/sh /usr/local/ddos/ddos.sh
    : not foundddos/ddos.sh: 1: /usr/local/ddos/ddos.sh: #!/bin/sh
    : not foundddos/ddos.sh: 2: /usr/local/ddos/ddos.sh:
    : not foundddos/ddos.sh: 5: /usr/local/ddos/ddos.sh:
    awk: cannot open /usr/local/ddos/ddos.iplist (No such file or directory)
    : not foundddos/ddos.sh: 8: /usr/local/ddos/ddos.sh:
    : not foundddos/ddos.sh: 11: /usr/local/ddos/ddos.sh:

    Указанные файлы появились и скрипт висит в процессах. Это правильно? Привилегии для скрипта изначально задал.

  • Avatar for source
    serj:

    При попытке войти в папку пишет так
    root@project:/usr/local/ddos# /etc/crontab
    -bash: /etc/crontab: Отказано в доступе

    Будет ли работать скрипт , если всё выше по теме я выполнил
    Я так понимаю, что последние действия нужны, чтобы скрипт подтягиваться после рестарта оборудования?

    Спасибо

    • Avatar for source
      source™:

      проверьте владельца папки - скорее всего поэтому не пускает в папку

      после рестарта оборудования ничего не подтягивается
      скрипт просто запускается через указанные промежутки времени и после выполнения закрывается. То есть ничего в памяти постоянно не висит - в этом просто нет необходимости

  • Avatar for source
    Сундук:

    Здравствуй автор! Подскажи как добавить в исключения определённые ip и диапазон ip.

  • Avatar for source
    Александр:

    Подскажите а в этот скриптик можно добавить исключения для ip ? Он кладет сервер при использовании ip самого сервера ..

    • Avatar for source
      source™:

      конечно
      Делается это в строке:
      netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | grep -v "127.0.0.1" > /usr/local/ddos/ddos.iplist
      добавил для примера IP 8.8.8.8 (перед > дописал это: | grep -v "8.8.8.8"):
      netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | grep -v "127.0.0.1" | grep -v "8.8.8.8" > /usr/local/ddos/ddos.iplist
      сейчас при выdоде информации о подключениях просто не будет данных с этим IP
      Сам так десяток IP добавил в исключения.

  • Avatar for source
    Виктор:

    C:\Users\lipen>netstat -ntu | cut -d: -f1 | sort | uniq -c | sort -nr | more
    "cut" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

    • Avatar for source
      Виктор:

      C:\Users\lipen>netstat -ntu | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | more
      "awk" не является внутренней или внешней
      командой, исполняемой программой или пакетным файлом.

      Тоесть так.

      • Avatar for source
        Дмертий:

        Может потому что, netstat и awk это юниксовые утилиты и в винде их как таковой и нет ? :)

  • Avatar for source
    Денис:

    При вызове скрипта файлы вывода получают такие вот кривые имена и как следствие ошибка скрипта - файл не найден. Созданный файл невозможно ни открыть, ни переименовать, только удалить. Подскажите, как исправить?

  • Avatar for source
    Primus:

    Чего-то не выходит, хотя вроде как все доступно, может и вправду мама говорил что это не мое. Может кто-то подскажет по сервисам типа Stormwall? Как они в работе, стоит ли подключаться?

  • Avatar for source
    Dream_Look:

    автор, в твоем скрипте пару ошибок, из за которых у других он не запускается. эти 4 строчки кода в том варианте, что ты предоставил - не работают. мне пришлось их записать одной строкой, разделив знаком ";" - только тогда скрипт заработал без ошибок - вот почему выбивает "not foundddos/ddos.sh: 2 8 11" и "(No such file or directory)". исправьте пожалуйста

  • Avatar for source
    Dream_Look:

    Еще момент. Те, кто уже сидит под рутом (не создавал пользователей) в "crontab -e" пишите эту строку "*/5 * * * * /bin/sh /usr/local/ddos/ddos.sh". Слово "root" писать не надо - как бы, доступ уже есть (только для тех, кто уже под рутом!)

  • Avatar for source
    anon:

    Если атака более серьезная более лучшим вариантом на мой взгляд использование бесплатной услуги от ddos-guard, ваш вариант в моем случает не сработал, после всех манипуляций с nginx и фаерволом, nginx грузил процессор под 100процентов(8 ядер квм) нагрузка сети была 200мегабит при 1гб канале сервера.

  • Avatar for source
    Александр:

    А что делать если ты хочешь настроить защиту на Entware.

  • Avatar for source
    Artem:

    А можно было просто настроить fail2ban:)
    Но опыт полезный, конечно.

Добавить комментарий

arrow_upward