DDOS-атака! Как дать доступ поисковым роботам?

E
На сайте с 27.12.2004
Offline
102
918

Всем привет.

На сайт идёт сильная DDOS-атака и единственный метод её остановки был создание страницы проверки кода на картинке при входе на любую страницу....

С Атакой почти справились, а вот с индексацией сайта и форума в поисковых системах могут быть проблемы....

Вот страница, например которая доступна только после ввода кода:

как дать доступ поисковым-роботам?

Как понял по UserAgent... Но какие User Agent у какого робота?

Мне необходимо как минимум знать user-agent:

Google

Yahoo!

MSN

Rambler

Yandex

Как и где узнать их?

"Типичный говнарь противопоставляет себя «толпе», считает себя нонконформистом и уникальным человеком — несмотря на то, что говнарей огромные толпы и все они одинаковые." (lurkmore)
E
На сайте с 27.12.2004
Offline
102
#1

нашел такое решение:

if(preg_match('#googlebot|msnbot|slurp|accoonabot|stackrambler|yandex|teoma|psbot#i', $_SERVER['HTTP_USER_AGENT'])==0){

I
На сайте с 22.10.2005
Offline
58
Iso
#2

Для начала можно посмотреть списки http://www.seoman.ru/FAQ/article032.html и http://bot.tixit.ru/user_agent/

Есть аргументы за то, чтобы сделать "белый список" для IP, а не для USER_AGENT, т.к. если DDOS'ят Вас целенаправленно, то и USER_AGENT подберут такой, чтобы продолжить заваливать. Поэтому лучше создавать список белых-IP, для которых не нужен ввод кода проверки - так оно надёжнее в смысле безопасности.

С другой стороны, не все IP поисковых роботов известны заранее (в сети можно найти немаленькие списки, но без гарантий :) ), поэтому так можно случайно и "честного бота" не пустить, борясь с атакой, что может привести к выпадению части страниц из индексов поисковых машин.

Удачи Вам в решении этой проблемы!

E
На сайте с 27.12.2004
Offline
102
#3

задача ещё состоит в том, чтобы не нагружать страницу с этим кодом. Если будет коннект к БД или обращение к файлу со списком, то нагрузка будет очень большая (при 100 запросах в секунду) и сервер может упасть...

Хотя хостинг очень хороший и сервер тоже достойный.

Есть ещё выход: Купить Хостинг за 700 у.е. в месяц, но это слишком дорого для нас!

I
На сайте с 22.10.2005
Offline
58
Iso
#4

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

Предлагаю всё же взять списки, например с http://www.iplists.com/ , чтобы сверяться с ними. Вроде бы не так долго сделать if (in_array()), где массив предварительно был проинклюден из специального файла. Согласен, что это не самое изящное решение, но вроде бы несколько тысяч раз в секунду это делается легко на любом хостинге.

Кстати, а Вы уверены, что проблема не решится "чёрным списком"? Может Вас ддосят не очень серзёные люди со считанной сотни машин? Тогда лучше пересчитать их, а остальных посетителей не парить.

O
На сайте с 08.01.2002
Offline
157
og
#5
egorix:
задача ещё состоит в том, чтобы не нагружать страницу с этим кодом. Если будет коннект к БД или обращение к файлу со списком, то нагрузка будет очень большая (при 100 запросах в секунду) и сервер может упасть...
Хотя хостинг очень хороший и сервер тоже достойный.

Есть ещё выход: Купить Хостинг за 700 у.е. в месяц, но это слишком дорого для нас!

При 100 запросах, если без базы, то не должно падать.

Возможно для большей устойчивости сам валидатор (проверяльщик соответствия записи на картинке) написать на сях, а не на php, тогда вообще ничто не страшно.

Не говоря уже про схемы с memcached и отдельного демона валидатора, держащего весь список сгенерёных картинок-кодов у себя в памяти.

P.S. А что предлагается за 700 у.е.?

P.P.S. Опс, не так понял что требуется, сорри. Подумал, что опасаетесь большой нагрузки с капчи.

Задачу пускать с одним UserAgent'ом (или ip) через капчу, а с другим без легко

решить через mod_rewrite апача, или аналогичный модуль nginx'а.

Пока мы живы, смерти нет. Когда придёт она, не будет нас.
СКОРПИОН
На сайте с 05.01.2006
Offline
120
#6
Iso:
Вроде бы не так долго сделать if (in_array()), где массив предварительно был проинклюден из специального файла.

Настоятельно рекомендую использовать в такой ситуации array_key_exists вместо in_array. В качестве ключа массива задавать IP-адрес, в качестве значения массива, например, "1". Проверно на 10-ках тысяч, сотнях тысяч и миллионах элементов массива. Скорость обработки увеличивается на несколько порядков, в зависимости от количества элементов массива и одновременных обращений.

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
B
На сайте с 06.04.2006
Offline
24
#7

Если есть доступ к iptables, то вот (ограничит кол-во коннектов с одного IP до 10 в минуту, потом просто будет отсекать парня, но всех подряд):


iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --name http --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name http
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

А вообще, вот тема по похожему вопросу обсуждается - /ru/forum/92472

Мониторинг сайтов (http://hostpulse.ru/), серверов, проверка содержимого страниц.
E
На сайте с 27.12.2004
Offline
102
#8
Iso:
Кстати, а Вы уверены, что проблема не решится "чёрным списком"? Может Вас ддосят не очень серзёные люди со считанной сотни машин? Тогда лучше пересчитать их, а остальных посетителей не парить.

Хостинг у нас и так с защитой от DDOS и формирует чёрный список, который уже превышает несколько десятков тысяч IP-адресов и попросту виснет от постоянной нагрузки, поэтому было принято решение сделать так. А чёрный список нет смысла формировать. Мы уже поняли...

og:
При 100 запросах, если без базы, то не должно падать.

100 я сказал к примеру. Число запросов бывает и больше и бывает сразу на несколько страниц... Видимо хорошая попалась атака...

Хотя хостер говорит, что у них была похуже...

og:
P.S. А что предлагается за 700 у.е.?

это хостинг у одного из конкурентов. ОН решил проблему таким образом. У того хостера стоит какое-то хитрое железо которое присекает всех "засранцев"... Я не очень в курсе как оно работает.

У меня идея появилась: если создать просто вместо проверки кода страницу, на котрой будет написано: "ЖДИТЕ 5 секунд пока будет осуществлён переход на нужную вам страницу". И так только один раз пока не записалась сессия.

1) Просто роботы, которые будут бесконечно обращаться к странице - они же не дожидаются 5 секунд пока Java Script направит их на нужную страницу?

2) И как можно скрыть адрес страницы редиректа?

3) Как к редиректам относятся поисковые роботы? Они не будут считать, что эта страница состоит только из: Ждите 5 секунд... ?

B
На сайте с 06.04.2006
Offline
24
#9
egorix:

2) И как можно скрыть адрес страницы редиректа?
3) Как к редиректам относятся поисковые роботы? Они не будут считать, что эта страница состоит только из: Ждите 5 секунд... ?

2 - закодируйте url через base64+xor в зависимости от номера сессии, получится лабуда вроде ссылок ядиректа.

3 - имхо будут. роботы яваскрипт не выполняют.

Можно использовать временный редирект - 302 код на себя же (записать в сессию IP клиента, если при втором запросе IP не совпадает или отсутствует - то снова записать IP и выдать редирект).

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