Помогите грамотно реагировать на ddos

1 234 5
mstar
На сайте с 19.12.2005
Offline
133
#21
Andreyka:
Любые скрипты от настоящего ddos не спасут

А настоящий - это когда канал по ширине забивается, или когда сетки айпишников побанить нельзя из-за того, что они правилам не поддаются и по сути размазаны по всему миру?

Или что значит "настоящий" по-вашему?

Разработка сайтов (http://www.mstarproject.com/?action=tecdoc_mysql_site) - удобные веб приложения по разумной цене.
Andreyka
На сайте с 19.02.2005
Offline
822
#22

Настоящий начинается тогда, когда от запросов на 80-ый порт не спасает nginx на полную катушку со статикой (over 500k запросов в секунду)

Ну и конечно ip со всего мира, иначе это не ddos а флуд

Не стоит плодить сущности без необходимости
I
На сайте с 21.05.2009
Offline
0
#23
Boris A Dolgov:
Перегоняйте / раз в 3 минуты в статику и отдавайте как статику.
Потом парсите логи на адреса, систематически запрашивающие / и ничего больше, и баньте фаирволлом.
Вместо первого можно попробовать кеш в nginx.

Вариант с кэшированием мне все-таки видется более полезным при большой посещаемости реальными пользователями, а не борьбы с ddos.

Art569:
innix, хочу предложить такое решение (временное) с помощью iptables.
iptables -A INPUT -p tcp --dport 80 -m string --string 'GET / ' --algo bm --from 40 --to 46 -m connlimit --connlimit-above 4 -j DROP

Не более 4 одновременных запросов к главной странице с одного IP. На остальные страницы ограничение не действует.
Это реализация в Linux :(, наверное такое же можно сделать и в FreeBSD 6.1

Спасибо, но все же сервер под FreeBSD.

Interitus:
Разные домены запрашивают.

Кусок лога, приведен для одного домена.

Andreyka:
Какой же это ddos...

В моем случае, да, определение http-flood подходит лучше, но тема создавалась все-таки для получения более широкого круга информации, а http-flood и ddos вроде бы достаточно схожи по реализации все же.

Andreyka:
Любые скрипты от настоящего ddos не спасут

Каковы ваши советы, рекомендации по спасению от настоящего DDoS?

Analitic82:
как еще один вариант решения для размышления
http://deflate.medialayer.com/

Спасибо, достаточно любопытно - посмотрю внимательнее.

qwartyr:
в вашем случае легкого флуда могут помочь mod_limitipconn и mod_dosevasive модули для апача

Спасибо

Васисуалий:
судя по вашему первому логу там 200 в секунду и близко не пахнет

Проницательны :) 200 стало позже.

Васисуалий:

nginx + apache 2.2 На тредах + mod_dosevasive работающий в паре с ipfw

Спасибо, посмотрю mod_dosevasive, работа в паре с ipfw звучит многообещающе.

LineHost:
ТС, купите пива и раслабтесь :)
Хорошо что спорисли на форуме, а не накатали жалобу какому нить провайдеру/датацентру. А то некоторые потом рубит с плеча за такой "DDDDDDoS" 🍻

Не, жалобу это уж как-то через чур :) и мне не так повезло с провайдером видимо, чтобы кто-то суетился у них с клиентскими проблемами :))

dred:
Обычный флуд. Такой всегда почти есть.
На него даже внимания обращать не стоит.

Ну он все же порой умудряется портить стабильный доступ к другим сайтам под тем же httpd :(

Andreyka
На сайте с 19.02.2005
Offline
822
#24

В случае серьезного DDOS надо идти к специалистам

Himiko
На сайте с 28.08.2008
Offline
560
#25

По поводу парсинга логов...

Можно сделать так на FreeBSD:

cat НУЖНЫЙСАЙТ.access.log | grep "GET /" | awk '{print $1}' | sort | uniq -c | sort -n | awk '{if ($1>100) print "ipfw add deny tcp from "$2" to me"}' | sh

Эта команда будет банить все ip-адреса, которые более 100 раз запрашивали корень сайта.

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
A5
На сайте с 06.08.2006
Offline
46
#26
Himiko:
По поводу парсинга логов...

Можно сделать так на FreeBSD:

cat НУЖНЫЙСАЙТ.access.log | grep "GET /" | awk '{print $1}' | sort | uniq -c | sort -n | awk '{if ($1>100) print "ipfw add deny tcp from "$2" to me"}' | sh

Эта команда будет банить все ip-адреса, которые более 100 раз запрашивали корень сайта.

Здесь, наверное, опечатка.

Нужно заменить grep "GET /" на grep "GET / ", а то под это условие попадет не только корень сайта.

Я немножко дописал. Получилось что-то типа такого


#!/bin/sh

logname=/home/site/logs/access.log
linesave=.linenumber

line1=$(cat $logname |wc -l)

if [ -f $linesave ];
then
line0=$(cat $linesave)
offset=$((line1-line0))
else
offset=$line1
fi

if [ $line1 -ne $line0 ];
then
echo $line1 >$linesave
tail -n $offset $logname | grep "GET / " | awk '{print $1}' | sort | uniq -c | sort -n | awk '{if ($1>100) print "ipfw add deny tcp from "$2" to me"}' | sh
fi

Основное изменение - просмотр только части access.log с последнего запуска. Таким образом, если запускать этот скрипт каждую минуту, то будут блокироваться IP обратившиеся к главной странице 100 раз ({if ($1>100)) в течении минуты. Механизм блокировки основан на командах Himiko.

Пояснения к коду.

Обрабатываемый лог указывается в переменной logname. В коде это /home/site/logs/access.log. Файл .linenumber используется для сохранения номера последней строки со времени последнего запуска. Если используется ротация логов, то .linenumber нужно удалять.

Himiko
На сайте с 28.08.2008
Offline
560
#27

Art569, на самом деле была опечатка, спасибо за исправление.

globalmoney
На сайте с 09.12.2005
Offline
398
#28
sysctl:
Такой http-flood легко сводится на нет установкой nginx и особо активные банятся скриптами, за основу можно взять тот же deflate или написать свой. У меня например своей решение которое читает вывод netstat и после парсинга добавляет особо активных + отсылает на мыло из хуиза абузу с подробностями. Конечно от серьезных атак это все не спасет, но от мелкого флуда вполне.

Ну можно было бы заодно выложить данный скрипт, на всеобщее обозрение, думаю многим было бы интересно. :)

MGNHost.ru - полный комплекс хостинг услуг ( https://www.mgnhost.ru ) VPS/VDS на SSD дисках в России / Нидерландах / США от 250 рублей ( https://www.mgnhost.ru/vds.php )
M
На сайте с 19.09.2007
Offline
112
#29
Himiko:
По поводу парсинга логов...

Можно сделать так на FreeBSD:
**** "ipfw add deny tcp from ***

вопросик такой вполне серьезный без шуток : у меня нет опыта засовывания сюда (без таблицы) тысяч правил ...

насколько оно накладнее чем в таблицу писать и банить по таблице ?

или наоборот менее накладно ?

Andreyka
На сайте с 19.02.2005
Offline
822
#30

Если использовать отдельный сервер чисто под фильтрацию - вполне нормальное решение

Для linux есть дешевые модули - ipset, geoip

Одним баном всяких азиатов и арабов снимается очень много проблем ;)

1 234 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий