Есть ли способы настроить источники MediaWiki для быстрого отклонения анонимных запросов?

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

Кажется, одна из идей - изменить PHP-код MediaWiki, чтобы быстрее отклонять аномальные запросы. Анонимные посетители должны только просматривать страницы; они не должны редактировать, просматривать источники страниц или просматривать историю. Было бы еще интереснее использовать что-то вроде IPTables для экранирования в соответствии с этим критерием. У нас есть root-доступ к серверу.

Можно ли изменить PHP или использовать какой-либо внешний инструмент для эффективной блокировки всех анонимных запросов MediaWiki, кроме просмотра содержимого статьи?

Я прочитал и продолжаю наблюдать более общий вопрос о защите от DoS здесь и здесь. Причиной публикации этого отдельно является то, что мы могли бы сделать что-то специфичное для MediaWiki.

1 ответ

Решение

Вы пытались изменить UserRights? Документы MediaWiki показывают, как редактировать LocalSettings.php для установки прав.

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

Из их руководства, http://www.mediawiki.org/wiki/Manual:User_rights

This example will disable editing of all pages, then re-enable for 
users with confirmed e-mail addresses only:


 # Disable for everyone.
 $wgGroupPermissions['*']['edit']              = false;
 # Disable for users, too: by default 'user' is allowed to edit, even if '*' is not. 
 $wgGroupPermissions['user']['edit']           = false;
 # Make it so users with confirmed e-mail addresses are in the group.
 $wgAutopromote['emailconfirmed'] = APCOND_EMAILCONFIRMED;
 # Hide group from user list. 
 $wgImplicitGroups[] = 'emailconfirmed';
 # Finally, set it to true for the desired group.
 $wgGroupPermissions['emailconfirmed']['edit'] = true;
Другие вопросы по тегам