Предыстория
Несколько дней назад я заметил, что нагрузка моих сайтов на хостинг выросла в разы. Если обычно она составляла в районе 100-120 «попугаев» (CP), то за последние несколько дней она возросла до 400-500 CP. Ничего хорошего в этом нет, ведь хостер может перевести на более дорогой тариф, а то и вовсе прикрыть доступ к сайтам, поэтому я начал разбираться.
После письма хостеру (Beget) с объяснением ситуации, я получил подробную статистику с рекомендациями по исправлению проблемы. Итак, что мы видим:
Львиная часть запросов идет на WordPress-сайты, а именно — на обращение к файлу xmlrpc.php:
Топ IP-адресов выглядит подобным образом:
Используя соответствующие инструменты (к примеру, тот же http://2ip.ru/whois/), выясняем, что первые два IP (5.196.5.116 и 37.59.120.214) — это и есть наш атакующий. Оба IP из Франции (позже к ним присоединился еще один «француз» — 92.222.35.159). Третий по популярности IP-адрес (178.154.202.251) принадлежит поисковому боту Яндекса, его блокировать не стоит.
Возникает острое желание заблокировать доступ к сайтам с этих двух IP-адресов, это же советует и хостер:
Однако я решил разобраться в характере проблемы подробнее, дабы подобного не возникало впоследствии (к примеру, при смене атакующим IP).
Что это за XML-RPC-атаки?
XML-RPC — это стандартный механизм WordPress, который применяется в частности для механизма пингбэков. А в последних версиях WordPress, начиная с 3.5, пингбэки включены по умолчанию без возможности отключения их стандартными средствами.
Попросту говоря, механизм XML-RPC помогает сообщать другому сайту о том, что на него появилась ссылка в новом материале. Это стандартная возможность WordPress, и она не является уязвимостью.
Плохо становится, когда злоумышленники используют ее для спама/флуда. Используя множество сайтов, при помощи запросов с них xmlrpc.php можно устроить DDoS другому сайту (на который ссылаются). Подробнее об этом механизме можно прочитать в этой статье: там рассказывается о случае 2014 года, когда атака со 162 тысячи Wordpress-сайтов (причем ничем не зараженных) практически «положила» DDoS-ом крупный портал.
Что делать, чтобы избавиться от запросов xmlrpc.php?
Ну что ж, тут, как говорится, все просто. Можно, конечно, попросту отрубить механизм XML-RPC, но это может аукнуться некорректной работой сторонних модулей, использующих его. Это можно сделать как вручную через настройку файлов .htaccess или wp-config.php, так и через установку плагинов (подробнее о всех возможных способах в этой статье).
Но я выбрал метод, который позволит сохранить функциональность XML-RPC: установку плагина Disable XML-RPC-API. Он удаляет лишь «опасные» методы pingback.ping и pingback.extensions.getPingbacks, оставляя функционал XML-RPC. После установки плагин нужно всего лишь активировать — дальнейшая настройка не требуется.
Попутно я забил все IP атакующих в файл .htaccess своих сайтов, чтобы заблокировать им доступ. Просто дописал в конец файла:
Order Allow,Deny Allow from all Deny from 5.196.5.116 37.59.120.214 92.222.35.159
Вот и все, теперь мы надежно защитили блог от дальнейших атак с использованием xmlrpc.php. Наши сайты перестали грузить хостинг запросами, а также атаковать при помощи DDoS сторонние сайты.
Спасибо за статью, действительно очень сильная нагрузка идёт и именно на этот файл. Но почему-то запрет в htaccess не даёт результата, точнее в логи доступа всё равно пишутся строки посещения этого файла. Не знаю как бороться. Может подскажите?
Алекс, а вы оба способа использовали? Попробуйте заблокировать все IP хацкеров в htaccess, установить Disable XML-RPC Pingback, а также еще один плагин для ограничения попыток авторизации — Limit Login Attempts.
У вас тоже Beget? Я несколько раз связывался с поддержкой, запрашивал статистику. Там несколько IP атакуют, причем они меняются со временем.
Я использовал только запрет в хтацесс, думаю этого будет достаточно, у меня посещения были именно с IP 92.222.35.159, именно по этому запросу я и нашёл ваш сайт в гугле. Я немного поправлюсь, дело в том, что даже если в ISP хостинга вообще отключить домен, то оказывается всё равно логи доступа пишутся. Также если прописать запрет в хтацесс, то такой дикой нагрузки действительно уже нет, т.е. ваш метод на самом деле помог, но оказывается логи будут по прежнему писаться. Странно конечно. У вас также?
Да, у меня тоже писалось в логи… Думаю, со временем перестанут долбиться, когда увидят, что нет ответа
Понятно, спасибо за совет в статье. Будет полезным если новые IP будете добавлять в статью. Страничку добавил в закладки, буду периодически посещать и просматривать обновления.
Админ, привет. Добавь в свою статью ещё этот IP 192.3.207.2
с него тоже сегодня просто невероятно ддосит на этот файл.
Хотя нет, поспешил немного. Не могу понять вот что мне логи доступа выдали:
192.3.207.2 — — [15/Mar/2015:23:24:26 +0300] «POST /xmlrpc.php HTTP/1.0» 403 887 «-» «Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)»
Получается это гугл ддосит что ли? За две минуты на этот файл почти 3000 запросов.
@ Алекс:
Да нет, это спамеры походу маскируются: http://www.cy-pr.com/forum/f7/t79292/
Вот с этого 66.225.231.114 мучали через каждый час. Заблокировал все равно запросы идут. Как руками заблокировать без стороних плагинов? Хостинг Джино.
Зимой на бигете была такая же проблема, сегодня началось все снова. Шаманство над xmlrpc и сокрытие wt-login, а так же эти плагины уже не спасают. Надеюсь на глюк апача, иначе больше и не знаю что сделать.
З,Ы, бигет.
Меня тоже долбят:
91.207.7.22
Whois говорит, что Песочин, Украина
Спасибо за статью. Только сейчас Disable XML-RPC Pingback плохо работает, пропускает (о чем отзывы свидетельствуют). А вот плагин Disable XML-RPC-API нормально справляется.
Спасибо за уточнение. Надо бы его опробовать.
Подтверждаю инфу, Disable XML-RPC-API нормально работает.
А вот у меня с этим Disable XML-RPC-API возникла проблема с RSS.
Во-во, такая же тема. Нашел этот пост поиском. Тоже возникла проблема с RSS — тупо не обновляет ленту после установки Disable XML-RPC-API! Вернулся на другой плагин.
Кстати, нашел решение по поводу нерабочего RSS с плагином Disable XML-RPC-API!
Надо зайти в настройки плагина, в раздел Speed Up WordPress и ОТКЛЮЧИТЬ опцию Remove RSS and RSD. После этого лента заработает.
ram32, спасибо за инфу, чувак!
Через Disable XML-RPC Pingback ломают постоянно, брутят. А этот плагин — огонь. Теперь можно его опять поставить.
Ну, IP блочить — достаточно бессмысленное занятие.
А вот Disable XML-RPC-API отличный плагин! Рекомендую в статью добавить, а то там до сих пор неактуальный уже прописан.
Да, уже подредактировал статью, спасибо за напоминание!
Лишний плагин снова будет более грузить сам сайт на WP. Насколько я знаю есть один плагин универсальный для многих таких случаев XML-RPC Pingback по-моему называется Clerfy.
Ну и чем отличается Clearfy от этого плагина?) Тем, что он более монструозный. Если остальные его функции не требуются, но не вижу смысла его ставить ради этой цели. Другое дело, если требуется его другой функционал.
Установка Disable XML-RPC-API помогла. Спасибо! 👍