Что такое XML-RPC и зачем его отключать частично
XML-RPC — интерфейс удалённого взаимодействия с WordPress. Он используется для публикации записей через внешние приложения, мобильные клиенты, а также некоторыми плагинами и сервисами. Однако этот протокол часто становится мишенью для атак типа Brute Force и DDoS. Полное отключение XML-RPC может нарушить работу легитимных интеграций, поэтому уместно ограничить доступ по IP, разрешая только доверенным адресам.
Диагностика: как понять, что XML-RPC уязвим или используется злоумышленниками
- Проверьте логи сервера на частые POST-запросы к
/xmlrpc.phpс неизвестных IP. - Используйте команду Linux:
grep xmlrpc.php /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head— покажет IP с наибольшим числом обращений. - Проверьте в Wordfence или другом брандмауэре наличие попыток взлома через XML-RPC.
Пошаговое решение: отключить XML-RPC для всех, кроме определённых IP
Для ограничения доступа напишем кастомный фильтр в functions.php активной темы или в собственном плагине.
add_filter('xmlrpc_enabled', function($enabled) {
$allowed_ips = ['123.123.123.123', '111.222.333.444']; // замените на свои IP
$remote_ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!in_array($remote_ip, $allowed_ips)) {
return false; // Отключаем XML-RPC для всех, кроме разрешённых IP
}
return $enabled;
});Этот код проверит IP клиента и отключит XML-RPC, если адрес не в списке разрешённых.
Альтернативный способ через .htaccess (Apache)
Можно заблокировать доступ к xmlrpc.php на уровне веб-сервера:
<Files xmlrpc.php>
Order deny,allow
Deny from all
Allow from 123.123.123.123
Allow from 111.222.333.444
</Files>Поддержка IP-списка зависит от конфигурации сервера. Для nginx нужно использовать другую директиву.
Как проверить, что ограничение сработало
- Из неразрешённого IP попробуйте отправить запрос
curl -X POST https://вашдомен/xmlrpc.php. Сервер должен возвращать ошибку 403 или пустой ответ. - Из разрешённого IP тот же запрос должен вернуть корректный ответ XML-RPC (обычно пустой XML с ошибкой об отсутствии метода).
- Проверяйте логи сервера на попытки доступа и их блокировки.
Частые ошибки при ограничении доступа к XML-RPC и их исправление
- Неправильный IP-адрес в списке — используйте реальный IP клиента, учитывая прокси/Load Balancer (может потребоваться проверять
HTTP_X_FORWARDED_FOR). - Кэширование — если сайт за CDN (Cloudflare, Sucuri), отключение может не сработать, так как запросы идут через прокси. Нужно настраивать доступ на уровне CDN.
- Проблемы с .htaccess — неверный синтаксис или конфликт с другими правилами может привести к недоступности сайта. Всегда проверяйте логи сервера после изменений.
- Отключение для нужных IP — проверьте, что IP, с которых работают ваши приложения, точно указаны, иначе интеграция перестанет работать.
Советы по безопасности и производительности при работе с XML-RPC
- Если интеграции не используются, отключайте XML-RPC полностью с помощью
add_filter('xmlrpc_enabled', '__return_false');. - Используйте плагины для защиты, например, Wordfence, которые умеют блокировать подозрительную активность по XML-RPC.
- Мониторьте логи и количество запросов к
xmlrpc.php, чтобы вовремя выявлять атаки. - Если нужно разрешить доступ с динамических IP (например, мобильные приложения), рассмотрите применение OAuth или других методов аутентификации вместо IP-фильтрации.
Сравнение способов ограничения доступа к XML-RPC
| Метод | Плюсы | Минусы |
|---|---|---|
Фильтр xmlrpc_enabled в PHP | Гибко, можно обрабатывать логику внутри WordPress | Загрузка PHP даже при блокировке, возможные накладки с кэшами |
| Блокировка через .htaccess | Блокировка на уровне сервера, меньше нагрузки | Менее гибко, требует доступа к серверу и точных IP |
| Плагины безопасности | Удобный интерфейс, дополнительные функции защиты | Может влиять на производительность, зависит от стороннего ПО |