Как узнать, использует ли мой сайт файл xmlrpc.php?
Я принял в управление веб-сайт на работе, который был разработан предыдущим сотрудником. Недавно этот сайт стал жертвой серии DDoS-атак через использование xmlrpc pingback, что подтверждается записями в логах такого вида:
154.16.63.40 - - [22/May/2016:06:52:49 +0100] "POST /xmlrpc.php HTTP/1.1" 200 596 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)"
(Очевидно, что это не Googlebot, так как у Google нет причин отправлять POST-запросы к этому файлу.)
Я знаю, что существует множество решений (Этот туториал), но я склоняюсь к тому, чтобы просто полностью заблокировать доступ к файлу. Однако я не уверен, использует ли сайт сервисы, которые предоставляет xmlrpc. Есть ли способ проверить, настроил ли предыдущий разработчик что-либо для использования функциональности WordPress xmlrpc? Могу ли я проверить наличие определенных функций в конкретных файлах, или есть что-то, что явно указывает на использование?
Буду благодарен за любую помощь!
РЕДАКТИРОВАНИЕ: Может быть, что-то подобное поможет?
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Белый список IP-адресов
Allow from xxx.xxx.xxx.xxx
Deny from all
</FilesMatch>
Если я разрешу доступ с IP-адреса сервера, будет ли это работать для плагинов и т.д., или у них у всех свои IP-адреса, которые нужно добавлять?

Как вы описали, ваш сайт подвергся DDoS-атаке (или, возможно, нет, я просто предполагаю, что вы знаете об этом). Такие атаки могут быть направлены на любую часть динамического сайта, например, на файлы index.php или xml-rpc.php.
С моей точки зрения, правильное решение — не блокировать атакуемую часть, а блокировать самого атакующего.
Поэтому не блокируйте XML-RPC API в WordPress — он используется множеством плагинов и внешних клиентов; блокируйте его только если вы действительно понимаете, что делаете, и последствия этого. Вместо этого заблокируйте атакующего на уровне сервера, например, добавив его IP в черный список серверного файрвола или .htaccess.

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

А если злоумышленник атакует index.php, что вы будете делать? Решение — это файрвол, а не блокировка скриптов, используемых вашим сайтом. В любом случае, заблокируйте XML-RPC API, если вы знаете, что делаете, и он вам не нужен. К сожалению, я не могу ответить на ваш вопрос о том, "Как узнать, нужен ли мне XML-RPC".

Это больше похоже на спам-бота или перебор, чем на DDoS-атаку. Чтобы убедиться, вам следует проверить потребление ресурсов, динамику IP-адресов и, возможно, содержимое запросов.
1. Блокировка доступа к файлу xmlrpc.php
.:
Я считаю, что вам не стоит этого делать:
- Это не поможет вам пережить настоящую DDoS-атаку.
- Как @cybmeta сказал, это может нарушить работу многих сторонних сервисов.
- Разрешение доступа только с определенных IP-адресов также не поможет, так как IP можно подделать, и вы не сможете перечислить все IP-адреса, которые будут использовать XML-RPC сервис.
Я обычно логирую все IP-адреса, которые делают запросы к xmlrpc.php
, использую iptables для установки ограничения на частоту запросов. Затем блокирую IP-адреса, которые явно злонамеренные.
2. Как узнать, использует ли ваш сайт xmlrpc.php
- Функции и ресурсы в WordPress, использующие XML-RPC сервис, содержат строку
xmlrpc
в названиях функций или файлов, так что вы можете быстро проверить вашу тему и плагины на наличие совпадений. - Все XML-RPC запросы в WordPress проходят через
xmlrpc.php
, который определяетdefine('XMLRPC_REQUEST', true)
, так что вы можете использовать:
if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
// Записать что-то в лог.
// Или немедленно завершить выполнение, если в запросе что-то злонамеренное.
}
Обратите внимание, что этот код нельзя использовать в файлах темы или плагинов. xmlrpc.php
независим от тем и плагинов, поэтому код нужно размещать в файле wp-config.php
.
