09.07.2009, 18:02 | #1 |
Мастер
Регистрация: 05.06.2008
Адрес: Somali
Сообщений: 648
Вес репутации: 232
|
DDoS - HTTP GET - как защитится?
Сабж.
Имеется: серв на FreeBSD 5.0 (очень древний серв), на котором крутится WWW сервер для одного сайта. Со вчерашнего дня бомбят, никакие средства не помогают.. В минуту сыплется до миллиона запросов, от чего старенькая машинка дохнет как муха - апач грузит ресурсы, переполнение буфера - и бац, р****. Все запросы идут на ОДНУ страницу, следовательно фильтр этой страницы (но не средствами апача) спасет остальной сайт. Пока ничего лучшего чем закрыть в ipfw 80 порт не нашел (сначала фильтр стоял на головной Cisco 7206, но потом решил не вмешивать роутер в такую мелочь),но это тоже не выход - сайт недоступен извне, что малость неприятно... Ну, кто у нас тут SYS-гуру? облазил полинета, но так и не смог найти приемлемого решения..
__________________
помог? отблагодари! |
09.07.2009, 18:06 | #2 |
Специалист
Регистрация: 15.07.2007
Адрес: Беларусь, но скоро будет РФ :)
Сообщений: 232
Вес репутации: 212
|
Обычный редирект иногда выручает, если бот глупый.
__________________
Каб любить Беларусь нашу милую... требо в росных краях побывать... |
09.07.2009, 22:51 | #3 | |||
Специалист
|
А лог запросов можно? Есть какая-то аналогия у них?
Как минимум: Цитата:
1. Добавляем таблицу: allow ip from table(1) to me in via парам-пам-пам(сетевуха инета...) 2. После неё: deny tcp from table(2) to me dst-port 80 in via парам-пам-пам 3. Идем в логи и грепает все обращения к странице Например лог nginx: Цитата:
Цитата:
__________________
Ulf Последний раз редактировалось Ulf; 09.07.2009 в 22:59. Причина: дополнение... |
|||
10.07.2009, 14:20 | #4 | |
Эксперт
Регистрация: 18.06.2007
Адрес: Картофель
Сообщений: 2,417
Вес репутации: 356
|
Цитата:
и в real_index.php просто делаем повторную сборку хеша + сравнение, если сравнение не проходит = наносим в БАН лист файрвола |
|
12.07.2009, 11:56 | #5 | |
Мастер
Регистрация: 05.06.2008
Адрес: Somali
Сообщений: 648
Вес репутации: 232
|
спасибо всем кто отписался
не наш случай - серв дохнет просто от количества обращений, даже удаление страницы не спасает, ибо серв просто не успевает получать и обрабатывать запросы (более 10000 запросов в секунду, более 1000000000 в сутки) Вы все угадали и без логов Запрос идет на одну страницу в разных вариациях, так что сгруппировать ботов можно Цитата:
говорю же, серв просто умрет не успев ничего обработать.. долго пытался найти решение средствами самой фрюхи, но так ничего толкового и не нашел.. Установил кучу софта, модов, но так ни фига ничего и не получилось. В итоге, все равно пришлось писать на киске класс-мапы, которые фильтруют трафик. И то, не все порезалось - остальное порубил с помощью ipfw.. Блин, даже после фильтрации льются миллионы запросов.. И длится это уже полнедели.. Че за ддосеры упрямые
__________________
помог? отблагодари! |
|
12.07.2009, 14:39 | #6 |
Специалист
|
Hanapi, а вы пробовали работать с таблицами?
На 2x2 ксеоне: ipfw table 2 list | wc -l 17301 Нет нималейшего лага. Даже упоминания о оном при обработке ipfw. По опыту - на целике 2.8 была таблица (тоже были тупые запросы, тоже на одну страницу, но там еще и юзер агент был одинаковый и еще уже не помню что) в которой было более 38к записей - лагов я не увидел...
__________________
Ulf |
13.07.2009, 19:38 | #7 |
Мастер
Регистрация: 05.06.2008
Адрес: Somali
Сообщений: 648
Вес репутации: 232
|
Ulf,проблема в том, что система настолько древняя, что ipfw не поддерживает таблицы но все равно пришлось прибегнуть к помощи файрволла (киска не все срезает, запросы все таки меняются время от времени).
написал скриптик, который отслеживает текущие соединения, и если видит более N одинаковых соединений - закидывает айпи в файрволл. Код:
#!/bin/sh ################################# # # # Hanapi, 07.2009 # # Anti-DDoS # # # ################################# #конф файл ipfw IPFW_CONF="/etc/firewall.conf" #количество соединений, при достижении которого IP блокируется MAX_CONNECTIONS=15 #номер правила, куда будут записываться все блокируемые IP RULE_NUM=22 #создаем список текущих соединений количеством больше MAX_CONNECTIONS IP_LIST=`/usr/bin/netstat -nbp tcp | awk '{split($5,adrp,"."); if (adrp[4]>0) print adrp[1]"."adrp[2]"."adrp[3]"."adrp[4]}' | uniq -c | awk '$1>=15 {print $2}' | uniq` >/dev/null #не смог прикрутить переменную MAX_CONNECTIONS в тело awk - кто поможет? #создаем список IP уже занесенных в файрволл CURRENT_IP_LIST=`/sbin/ipfw -c list ${RULE_NUM} | awk '{print $5}'` >/dev/null for IP in $IP_LIST; do IS_BANNED=0 for CURRENT_IP in $CURRENT_IP_LIST; do if [ "$IP" = "$CURRENT_IP" ]; then IS_BANNED=1 fi done if [ "$IS_BANNED" = 1 ]; then echo "$IP already added.." else #блокируем IP /sbin/ipfw add ${RULE_NUM} deny ip from ${IP} to any > /dev/null #добавляем строку в конф файл, чтобы не потерять правило при перезагрузке сервера /bin/echo "add ${RULE_NUM} deny ip from ${IP} to any" >> ${IPFW_CONF} echo "$IP banned!" #рестартуем апач, чтобы сбросить текущие соединения /usr/sbin/apachectl restart>/dev/null fi done exit 1 может кому пригодиться..
__________________
помог? отблагодари! Последний раз редактировалось Hanapi; 13.07.2009 в 19:38. Причина: Добавлено сообщение |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
http:// или http://www, в чем разница? | Степаныч | Вопросы от новичков | 18 | 30.06.2009 07:36 |
Важно ли добавлять сайт с http://www. или http:// | vetmedical | Вопросы по работе системы | 5 | 30.03.2009 16:03 |
DDOS | anhydrous | Вопросы по работе системы | 58 | 28.11.2008 00:20 |
DDoS или защита? | boolevar | Ошибки при работе с системой | 24 | 30.10.2008 15:02 |
DDOS-атака | Maxims | Вопросы от новичков | 7 | 29.06.2008 12:32 |
Часовой пояс GMT +3, время: 20:44.