Защита от флуда

Для публично доступных вики часто становится важным фактор загруженности процессора и дисковой подсистемы связи с обработкой вики большого количества запросов. Высокая загруженность приводит к медленной обработке отдельных запросов или же полной непригодности к использованию легитимными пользователями.

Данная ситуация может быть вызвана следующими факторами:

  • Кто-то (спаммеры, вандалы, ...) пытается разместить спам или мусор на страницах вики.
  • Кто-то, использующий кравлер для зеркалирования сайта без ограничений на количество запросов и трафик, что порождает большое количество бесполезных запросов и большой трафик).
  • Поисковые боты, индексирующие вики.

Что можно сделать?

МойнМойн отслеживает запросы по имени пользователя (в случае, если он аутентифицирован) или IP-адресу (если нет)

Если количество запросов превышает некий заданный в конфигурации лимит за заданный в конфигурации период времени, то вики начнёт возвращать вместо результата запроса предупреждение защиты от флуда.

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

В случае продолжения генерации запросов, вики заблокирует пользователя или IP на заданный конфигурации период времени.

Настройка

Настройка механизма защиты от флуда выполняется посредством указания параметров в конфигурации вики. Ниже представлены значения по умолчанию:

   1     surge_action_limits = { 
   2         # допускается не более <количество> запросов, вызывающих <действие> за <период времени> секунд
   3         # Формат:
   4         # действие:    (количество, период времени)
   5         'all':                 (30,  30), # суммарный лимит на все запросы (кроме запросов к кэшу и действию AttachFile)
   6         'default':             (30,  60), # лимит для действий по умолчанию
   7         'show':                (30,  60), # показ страницы
   8         'recall':              (10, 120), # показ старой версии страницы
   9         'raw':                 (20,  40), # иногда CSS хранится в виде страницы на вики
  10         'diff':                (30,  60), # просмотр различий
  11         'fullsearch':          (10, 120), # выполнение поискового запроса
  12         'edit':                (30, 300), # редактирование; возможно, лимит будет уменьшен с разделением предварительного просмотра и редактирования
  13         'rss_rc':               (1,  60), # получение rss
  14 
  15         # Данные действия часто используются для изображений — для предотвращения срабатывания ограничений
  16         # на страницах с большим количеством ихображений (например, галереях изображений) для этих действий
  17         # установлены достаточно высокие лимиты
  18         'AttachFile':         (300,  30), # работа с прикреплёнными файлами
  19         'cache':              (600,  30), # запросы к кэшу всегда дешёвые
  20     }
  21     surge_lockout_time = 3600          # количество секунд, на которое блокируется пользователь/IP при игнорировании предупреждений

Советы

Доступ к вики через прокси или NAT

В случае, если между пользователями находится прокси или маршрутизатор с NAT, отличным от «один к одному» (например, в корпоративной сети или Китае), у пользователей возможны проблемы с защитой от флуда, так как к вики приходят запросы с одного (или некоторого количества фиксированных) IP, что выглядит как действия бота или нерадивого пользователя.

Это ограничение можно обойти, аутентифицировавшись в вики, дабы МойнМойн учитывал запросы отдельных пользователей (в случае, если пользователь аутентифицирован, то счётчики работают по имени учётной записи, не по IP)

Проблемы отсутствуют также в случае, если прокси добавляет в HTTP-запрос заголовок X-Forwarded-For с реальным IP пользователя.

Отключение защиты от флуда

(!) Отключать защиту от флуда не рекомендуется. Если она активируется слишком часто, возможно, стоит настроить лимиты. Даже в случае локальной вики пользователь, решивший запустить на вики кравлера, может вызвать проблемы и сделать вики непригодной к использованию.

Для отключения защиты достаточно сделать следующее:

   1     surge_action_limits = None # отключает защиту от флуда