Защита WordPress от взлома XML-RPC
Ubuntu | Комментировать запись
WordPress – это популярная производительная CMS (система управления контентом). К сожалению, популярность и распространённость этой системы привлекает нежелательное внимание – вредоносный трафик, направленный на сайт WordPress.
Серверы, которые не были защищены или оптимизированы, часто сталкиваются с проблемами или ошибками вследствие получения небольшого количества вредоносного трафика. Такие атаки приводят к истощению системных ресурсов, в результате чего некоторые сервисы (например, MySQL) перестают отвечать на запросы. Наиболее распространенным внешним признаком такой атаки является сообщение Error connecting to database (ошибка подключения к базе данных) или ошибки веб-консоли Out of Memory.
Данное руководство поможет защитить WordPress от атак XML-RPC в Ubuntu 14.04.
Требования
- Сервер Ubuntu 14.04.
- Не-root пользователь с доступом к sudo (создать такого пользователя можно при помощи этого руководства). Все команды данного руководства следует выполнят в сессии этого пользователя.
- Предварительно установленная система WordPress (для этого можно воспользоваться этим руководством).
Что такое XML-RPC?
XML-RPC – это протокол вызова удалённых процедур.
WordPress использует XML-RPC для удалённого выполнения функций. Наиболее яркими примерами реализации этого протокола является популярный плагин JetPack и мобильное приложение WordPress. Однако этот протокол также можно использовать для отправки на WordPress огромного количества запросов за короткий промежуток времени (что, в сущности, является brute force атакой).
Как определить атаку XML-RPC?
Существует два основных способа распознать атаку XML-RPC:
- Получение ранее упомянутого сообщения Error connecting to database.
- Обнаружение в логах веб-сервера большого количества подобных записей:
"POST /xmlrpc.php HTTP/1.0”
Расположение лог-файлов веб-сервера зависит от дистрибутива Linux.
Для выявления атак XML-RPC на Apache в Ubuntu 14.04 используйте:
grep xmlrpc /var/log/apache2/access.log
На сервере Nginx используйте команду:
grep xmlrpc /var/log/nginx/access.log
Сайт WordPress был подвержен атаке XML-RPC, если эти команды вернули очень объёмный вывод, содержащий множество подобных строк:
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
Далее можно найти инструкции по предотвращению подобных атак.
Метод 1: Установка плагина Jetpack
В идеале следует защищать сервер от атак XML-RPC до того, как они произойдут. Функция Protect плагина Jetpack блокирует запросы multicall протокола XML-RPC. Записи XML-RPC по-прежнему будут поступать в логи сервера. Jetpack снизит нагрузку на БД, создаваемую вредоносными попытками входа, до 90%.
Примечание: Для активации плагина Jetpack необходима учётная запись WordPress.com.
Чтобы установить Jetpack, откройте панель управления WordPress и выберите Plugins->Add New.
Программа предложит список доступных плагинов, который должен содержать Jetpack. Если у вас не получается найти в списке нужный плагин, воспользуйтесь поисковой строкой.
Чтобы загрузить, распаковать и установить плагин, нажмите Install Now. После успешной установки плагина рядом с ним появится ссылка Activate Plugin. Кликните по ней. После этого программа вернёт страницу Plugins, на которой появится сообщение Your Jetpack is almost ready! Чтобы завершить активацию плагина Jetpack, кликните по ссылке Connect to WordPress.com и подключитесь к учётной записи WordPress. После этого плагин будет включен, и программа предложит опцию Jump Start, которая автоматически включает основные функции Jetpack. Кликните Skip.
Функция Protect будет включена, даже если вы пропустите Jump Start. На экране появится панель инструментов Jetpack, которая также покажет, что функция Protect активирована.
Чтобы создать белый список IP-адресов, которые функция не должна блокировать, нажмите на изображение шестерёнки рядом с Protect.
На экране появится окно, в котором нужно указать все заведомо безопасные адреса IPv4 или IPv6. После этого нажмите Save, чтобы сохранить белый список.
Метод 2: Блокировка трафика XML-RPC вручную
Также можно вручную заблокировать трафик в настройках сервера Apache или Nginx.
Отредактируйте конфигурационный файл Apache:
sudo nano /etc/apache2/sites-available/000-default.conf
Добавьте следующие строки в теги <VirtualHost> :
<VirtualHost>
…
<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>
Сохраните и закройте файл.
Перезапустите веб-сервер, чтобы обновить настройки:
sudo service apache2 restart
Чтобы отредактировать конфигурационный файл Nginx, введите:
sudo nano /etc/nginx/sites-available/example.com
Примечание: Укажите правильный путь файла.
Затем добавьте в блок server следующие строки:
server {
…
location /xmlrpc.php {
deny all;
}
}
Сохраните и закройте файл, а затем перезапустите веб-сервер:
sudo service nginx restart
Важно! Этот метод остановит абсолютно все программы, использующие XML-RPC, в том числе Jetpack и мобильное приложение WordPress.
Проверка защиты
Какой бы метод защиты вы не выбрали, после настройки обязательно убедитесь, что всё работает.
Если вы установили Jetpack и включили функцию Protect, запросы XML-RPC по-прежнему будут появляться в логах веб-сервера, но гораздо реже. Кроме того, Jetpack снижает нагрузку на БД сервера, которая возникает во время атаки, а также постепенно блокирует вредоносные IP-адреса.
Если вы вручную заблокировали трафик XML-RPC, логи по-прежнему будут показывать попытки подключения, но код ошибки 200 изменится. К примеру, теперь запись может выглядеть так:
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 500 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
Заключение
Эти советы помогут устранить вредоносный трафик XML-RPC, благодаря чему сайт будет потреблять меньше ресурсов. Истощение системных ресурсов является наиболее распространенной причиной сбоя сайтов на WordPress.
Tags: Apache, JetPack, NGINX, Ubuntu 14.04, WordPress, XML-RPC