Вопрос или проблема
Я управляю веб-сайтом на WordPress, используя виртуальную машину в облаке, и в последнее время заметил множество нежелательных запросов к компоненту xmlrpc.php, которые замедляют сайт и вызывают высокую нагрузку на ЦП. Если бы это зависело от меня, я бы полностью отключил этот компонент, но сайт использует плагин JetPack, который зависит от xmlrpc.
Так что, мой вопрос: как разрешить JetPack доступ к xmlrpc, одновременно блокируя всех остальных, не отключая xmlrpc на сервере?
На сайте включена защита bruce с помощью JetPack, и fail2ban включен и работает, но, похоже, не решает проблему.
Во время исследований я нашел такое обходное решение: https://www.namehero.com/startup/how-to-safely-disable-xmlrpc-in-wordpress-while-keeping-jetpack/, но после применения этих настроек в htaccess нежелательные запросы немедленно прекращаются, но JetPack также блокируется. Таким образом, это, похоже, не работает так, как ожидалось, или я делаю это неправильно.
<Files xmlrpc.php>
Order allow,deny
Allow from 192.0.64.1/192.0.127.254
Deny from all
Satisfy All
ErrorDocument 403 http://127.0.0.1/
</Files>
Обновление: Вот IP-адреса, которые WordPress говорит, что необходимы для JetPack:
Так что вопрос также в том, как добавить эти IP-адреса в блок htaccess выше?
122.248.245.244/32
54.217.201.243/32
54.232.116.4/32
192.0.80.0/20
192.0.96.0/20
192.0.112.0/20
195.234.108.0/22
192.0.96.202/32
192.0.98.138/32
192.0.102.71/32
192.0.102.95/32
С помощью белого списка обычно сначала запрещают всем, а затем разрешают. Затем просто добавляйте записи Allow
по мере необходимости. Попробуйте так:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 122.248.245.244/32
Allow from 54.217.201.243/32
Allow from 54.232.116.4/32
Allow from 192.0.80.0/20
Allow from 192.0.96.0/20
Allow from 192.0.112.0/20
Allow from 195.234.108.0/22
Satisfy All
ErrorDocument 403 http://127.0.0.1/
</Files>
Примечание: Последние несколько IP-адресов из списка в вашем вопросе охвачены предшествующим CIDR диапазоном, 192.0.96.0/20
, поэтому я их пропустил.
Вы можете получить актуальные данные о конкретных IP-адресах, которые необходимо добавить в белый список для различных сервисов Jetpack здесь: https://jetpack.com/support/hosting-faq/.
Лично я использую fail2ban
. Этот метод имеет преимущество, предотвращая подозрительные IP-адреса от выполнения любых других типов запросов к вашему серверу, как навсегда, так и на определенный период времени в зависимости от ваших настроек. Возможно, вам просто нужно пересмотреть настройки fail2ban и перенастроить их более жестко. Это может быть связано с этой проблемой.
Также стоит отметить, что Automattic предлагает бесплатную поддержку для всех пользователей Jetpack. (Полное раскрытие: я там работаю. 🙂)
Обратите внимание, что IP-адреса Jetpack могут быть изменены, поэтому у меня есть скрипт, который создает соответствующий фрагмент, который я использую в Include
операторе в конфигурации Apache:
#!/bin/bash
set -e
INC="/path/to/file/wp-xmlrpc.conf"
ips="/tmp/jp-ips.txt"
# Если это приводит к 404, то ничего не делать
curl --fail -s https://jetpack.com/ips-v4.txt -o $ips
cp $INC $INC.bak
update()
{
cat <<-EOF
# АВТОМАТИЧЕСКИ ОБНОВЛЕНО ИЗ update.sh
# ЛЮБЫЕ ИЗМЕНЕНИЯ В ЭТОМ ФАЙЛЕ БУДУТ УТЕРЯНЫ
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
# IP-адреса Jetpack
EOF
cat $ips | while read line; do echo " Allow from $line" ; done
cat <<-EOF
Satisfy All
ErrorDocument 403 "XML-RPC отключен."
</Files>
EOF
}
update > $INC
rm -f $ips
Это выполняется раз в месяц по расписанию cron.
Ответ или решение
Чтобы остановить атаки на xmlrpc.php без отключения компонента, позволяющего JetPack работать на вашем сайте WordPress, вам необходимо настроить файл .htaccess для фильтрации IP-адресов и включения только тех, которые нужны для JetPack. Ниже приведены подробные шаги, как это сделать:
Шаг 1: Находите и редактируете .htaccess
- Подключитесь к вашему серверу через FTP или через панель управления хостингом.
- Найдите файл .htaccess в корневом каталоге вашего сайта WordPress. Если файла нет, вы можете создать его.
- Сделайте резервную копию .htaccess перед внесением изменений.
Шаг 2: Настройка фильтрации IP-адресов
Добавьте следующий код в ваш файл .htaccess:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 122.248.245.244/32
Allow from 54.217.201.243/32
Allow from 54.232.116.4/32
Allow from 192.0.80.0/20
Allow from 192.0.96.0/20
Allow from 192.0.112.0/20
Allow from 195.234.108.0/22
# Добавьте другие IP-адреса, если это необходимо
Satisfy All
ErrorDocument 403 "XML-RPC отключен."
</Files>
Шаг 3: Обновление IP-адресов JetPack
Поскольку IP-адреса JetPack могут изменяться, рекомендуем настроить автоматическое обновление. Вы можете использовать следующий сценарий Bash для автоматического обновления файла .htaccess с актуальными IP-адресами JetPack:
#!/bin/bash
set -e
INC="/path/to/file/wp-xmlrpc.conf"
ips="/tmp/jp-ips.txt"
# Получаем список актуальных IP-адресов
curl --fail -s https://jetpack.com/ips-v4.txt -o $ips
# Создаем резервную копию файла
cp $INC $INC.bak
update() {
echo "<Files xmlrpc.php>"
echo " Order Deny,Allow"
echo " Deny from all"
while read -r line; do
echo " Allow from $line"
done < $ips
echo " Satisfy All"
echo " ErrorDocument 403 \"XML-RPC отключен.\""
echo "</Files>"
}
update > $INC
# Удаляем временный файл
rm -f $ips
Настройте этот скрипт на выполнение раз в месяц через cron.
Шаг 4: Проверка и мониторинг
После внесения изменений убедитесь, что JetPack продолжает работать, и у вас нет доступа к xmlrpc.php из нежелательных IP. Рекомендуется регулярно проверять ваши журналы сервера и настройки fail2ban, чтобы убедиться, что все работает корректно и нет подозрительной активности.
Дополнительные меры
- Настройка Fail2Ban: Проверьте и усилите настройки Fail2Ban, чтобы блокировать IP-адреса, которые генерируют слишком много запросов к xmlrpc.php.
- Использование плагинов безопасности: Рассмотрите возможность установки плагина для защиты от брутфорс-атак, например, Wordfence или Sucuri.
Эти шаги помогут вам продолжать использовать JetPack, защищая ваш сайт от ненужных атак на xmlrpc.php.