Дросселирование веб-сканеров

8

Мой веб-сайт DoS'едируется веб-сайтами Google. Google может индексировать мой сайт, но иногда он запрашивает тег-облако на моем сайте быстрее, чем мой веб-сервер может дать результаты, из-за чего у моего веб-сервера заканчиваются ресурсы.

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

robots.txt не вариант, потому что он заблокирует весь сайт от индексации.

iptables -m recent Это сложно, потому что на некоторых страницах есть много изображений или других файлов данных, и на них тоже есть «последние» триггеры (обычно мой агрегатор RSS, загрузка изображений и каналов).

iptables -m limit имеет тот же недостаток, и, кроме того, я не мог быть избирательным по IP-адресу источника.

Как я могу ограничить посетителей, которые вызывают слишком высокую нагрузку на мой сервер?

Я использую apache2 на сервере Ubuntu в виртуальной машине VirtualBox.

jippie
источник
1
Вы можете использовать инструменты для веб-мастеров, чтобы снизить скорость сканирования. См support.google.com/webmasters/bin/...
derobert

Ответы:

5

Попробуйте модуль Apache mod_qos . Текущая версия имеет следующие механизмы управления.

  • Максимальное количество одновременных запросов к расположению / ресурсу (URL) или виртуальному хосту.
  • Ограничение пропускной способности, например максимально допустимое количество запросов в секунду к URL-адресу или максимальное / минимальное количество загружаемых килобайт в секунду.
  • Ограничивает количество событий запроса в секунду (особые условия запроса). Он также может «обнаруживать» очень важных лиц (VIP), которые могут получить доступ к веб-серверу без ограничений или с меньшими ограничениями.
  • Общая строка запроса и фильтр заголовка для запрета несанкционированных операций.
  • Запрашивать ограничение и фильтрацию данных тела (требуется mod_parp).
  • Ограничения на уровне соединения TCP, например, максимальное количество разрешенных соединений от одного IP-адреса источника или динамическое управление поддержанием активности.
  • Предпочитает известные IP-адреса, когда на сервере заканчиваются свободные соединения TCP.

Этот пример условного правила из документации должен привести вас в правильном направлении.

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider
Джордж М
источник
Выглядит немного сложнее, чем я ожидал в пятницу вечером, наслаждаясь бельгийским пивом ... Надо посмотреть на это завтра. Выглядит многообещающе с браузером и прочее. Если подумать ... было бы неплохо, если бы он автоматически использовал любой хост / пользовательский агент, который запрашивает robot.txt: o) Thnx Uther
jippie
Наслаждайся этим пивом!
Джордж М
ОК, выглядит довольно просто. Реализовал это, чтобы увидеть, сможет ли мой веб-сервер идти в ногу сейчас.
Джиппи