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