DDOS атака на сайт WordPress. Как заблокировать WPscan?
На хостинге Regru превышен лимит CPU в 13%. Изучив в чем проблема, вышел на то, что некий User agent - Wpscan каждый день делает запросы по 250 тысяч.
По статистике запросов по IP показывает украинский IP
Пока что просто заблокировал Ip, но понимаю, что это бесполезно.
Подскажите, как мне заблокировать этот WP scan?
Дополнительные вопросы
Если приходит с одного IP, то это не ddos. Первая буква в слове ddos - distributed, то есть "распределённый".
Если это зловредная деятельность и IP атакующего будет меняться, то надо осваивать fail2ban.
Ответы:
Если не хочешь разбираться с fail2ban то можно поставить wordfence и (или) настроить Cloudflare.
- Кстати самый лучший вариант - такое комбо. Выручает уже несколько лет около 30+ сайтов
Владимир Е @vlaero
Пока что просто заблокировал Ip, но понимаю, что это бесполезно.
- разве количество запросов не упало?
Подскажите, как мне заблокировать этот WP scan?
Блокировка по агенту, в htaccess
<If "%{HTTP_USER_AGENT} == 'WPScan'"> Require all denied </If> |
<If "%{HTTP_USER_AGENT} == 'WPScan'"> Require all denied </If>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Если WPScan делает сотни тысяч запросов в день, блокировать нужно не только один IP, а сам паттерн сканирования. IP быстро меняется, а нагрузка останется. Лучше решать это на уровне Cloudflare/WAF/nginx/хостинга, потому что WordPress уже слишком поздно получает запрос: PHP и база могут быть нагружены ещё до того, как ваш код что-то заблокирует.
Что сделать в первую очередь:
- Проверить access log и выделить самые частые URL:
/wp-json/,/xmlrpc.php,/wp-login.php, запросы к readme, плагинам и темам. - Закрыть или ограничить
xmlrpc.php, если он не нужен. - Поставить rate limit на
wp-login.phpи REST API. - В Cloudflare создать WAF/rate limiting rule для подозрительных User-Agent и частоты запросов.
- Настроить fail2ban по access log, если есть доступ к серверу.
Пример для nginx, если XML-RPC не используется:
location = /xmlrpc.php { deny all; } |
location = /xmlrpc.php { deny all; }
Пример грубой блокировки User-Agent на nginx:
if ($http_user_agent ~* "wpscan") { return 403; } |
if ($http_user_agent ~* "wpscan") { return 403; }
Но только на User-Agent полагаться нельзя: его легко подменить. Надёжнее сочетать rate limit, WAF и блокировку конкретных endpoint-ов.
В Cloudflare можно сделать правило: если URI содержит /wp-login.php или /xmlrpc.php и частота превышает норму, выдавать challenge или block. Для REST API лучше не рубить всё подряд, потому что некоторые плагины и фронтенд могут его использовать.
После защиты смотрите не только количество запросов, но и CPU/TTFB. Если запросы ушли, а CPU всё равно высокий, значит параллельно есть другая проблема: cron, тяжёлые плагины, WooCommerce AJAX, бэкапы или медленные SQL-запросы.


WPScan сам по себе не DDoS, но частые сканирования могут создавать лишнюю нагрузку на WordPress: перебор авторов, REST API, XML-RPC, запросы к плагинам и темам. Блокировать лучше не WordPress-кодом, а на уровне Cloudflare, nginx, fail2ban или WAF.
Что можно сделать безопасно:
xmlrpc.php, если он не нужен;Пример ограничения xmlrpc в nginx:
location = /xmlrpc.php { deny all; }
Но не отключайте XML-RPC вслепую, если сайт использует Jetpack, мобильное приложение WordPress или внешние публикации. Сначала проверьте логи и зависимости.