Простая защита от организованных DDoS Pingback атак

Пару месяцев назад проснулся ранним утром от внезапного звонка, на той линии попросили проверить сервер, висит не отвечает и только ветер труп его качает. Зайдя на сервер, увидел кучу процессов apache и загруженный проц на 100%, сразу стало понятно, это DDoS.


Начал с того что открыл server-status(Если не знаете, что это, то гугл в помощь ), ведь надо определить какой сайт DDoS'ят. Открыв логи что бы увидеть запросы я увидел нечто подобное:
54.248.91.179 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 499 "-" "WordPress/3.9.2; http://tpy.tw; verifying pingback from 80.82.65.17"
107.20.136.153 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 500 "-" "WordPress/3.5; http://enter.seasite.com"
176.34.202.158 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 499 "-" "WordPress/3.9.1; http://ec2-176-34-202-158.eu-west-1.compute.amazonaws.com; verifying pingback from 80.82.65.17"
46.137.97.25 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 499 "-" "WordPress/3.7.4; http://46.137.97.25; verifying pingback from 80.82.65.17"
176.34.202.158 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 500 "-" "WordPress/3.9.1; http://ec2-176-34-202-158.eu-west-1.compute.amazonaws.com; verifying pingback from 80.82.65.17"
54.248.91.179 - - [11/Oct/2014:19:40:06 +0200] "GET / HTTP/1.1" 403 499 "-" "WordPress/3.9.2; http://tpy.tw; verifying pingback from 80.82.65.17"
Решение нужно было принимать быстро, на сервере располагается множество сайтов и большинство из них просто не открываются.
Если DDoS'ят определенный сайт, то все решается буквально в одну строчку.
while true; do tail -1000 /var/log/httpd/access_log | sort | grep pingback | uniq -c | awk '{print $2}' | xargs -tl -I _ ipset -A ddos _;sleep 10; done
Для работы данной «команды» необходимо что бы на сервере был установлен ipset, во всех приличных дистрибутивах данная утилита есть в репозиториях, и не составит большого труба вырубить apache и установить ipset, и создать таблицу хэшей и правила командами:
ipset -N ddos iphash
iptables -A INPUT -p tcp -m tcp --dport 80 -m set --set ddos src -j DROP

Ну а теперь разъясню что делает наша «волшебная строчка».
while true; do done — данная конструция создает вечный цикл
tail -1000 /var/log/httpd/access_log — читаем последние 1000 строк из access лога apache
sort — сортируем
grep pingback — вырезаем обращения только с pingback
uniq -c — оставляем только уникальные строки(параметр -c не обязателен, он выводит кол-во повторений, если его убрать то следующая команда будет выглядеть как awk '{print $1}')
awk '{print $2}' — обрезаем все лишнее, оставляем только ip адрес
xargs -tl -I _ ipset -A ddos _ — вызываем xargs и добавляем ip адреса в таблицу ddos

Вроде ничего сложного, а работает эффективно, буквально за 30 минут, в таблицу было добавлено свыше 7к IP адресов, DDoS'ящих сервер.

Источник информации и полезных советов http://firstwiki.ru/index.php/Ddos, здорово выручило в тот самый момент.

Поменьше DDoS'a в вашей жизни.

Комментарии ()

    Есть вопрос или предложение пиши в Telegram @cloudsv

    Прямой эфир

    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 0
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0
    cloudsv 01 июня 2018, 01:39
    Telegram Настройка прокси mtproto для Telegram 28
    cloudsv 22 января 2018, 21:59
    Web Локальное зеркало обновлений Dr.web 0
    cloudsv 03 октября 2017, 10:55
    Web Пароль от резервной копии Bitrix 1
    cloudsv 09 июля 2017, 23:02
    Arch Linux Let's Encrypt это легко и просто 0