Вы когда-нибудь замечали, что ваш сайт начинает тормозить, а в логах — тысячи странных запросов? Наш сайт РтиИваз недавно подвергся массированной атаке. Целью был файл xmlrpc.php, который уже старый, но до сих пор открытая дверь для взлома хакерами. Заодно мы нашли и другие проблемы: сбои WP-Cron, ложные блокировки и перегрузку от навязчивых ботов.

атака на вордпресс

В этой статье я расскажу, как мы шаг за шагом привели сайт в порядок. Методы подойдут любому сайту на WordPress. Поехали!

Диагностика: как понять, что сайт атакуют

Первым звоночком стало сообщение от плагина WP Crontrol: «Неожиданный код ответа HTTP: 503». Но при проверке логов доступа мы не нашли ни одной 503 ошибки. В чём дело?

Оказалось, что плагин безопасности Shield Security блокировал запросы к wp-cron.php, посчитав их подозрительными. Отключение плагина через ФТП сразу же «вылечило» WP-Cron — это помогло нам найти виновника проблемы.

Что делать:
Всегда проверяйте логи access_log и error_log. Если при полном отключении плагина проблема исчезает — значит, виноват плагин, и его нужно перенастроить, а не удалять.

Главная атака на xmlrpc.php и как её остановить

Через несколько дней мы заметили в логах тысячи запросов:
POST /xmlrpc.php HTTP/1.0″ 503 …
Атака шла с десятков IP, с поддельными заголовками «Jetpack». Цель — перебор паролей и создание нагрузки на сервер.
Мы перепробовали несколько способов:

А) Настройка Shield Security (работает, но неидеально).

Включили в Shield Security опцию Immediate IP Block для XML-RPC. Плагин начал блокировать IP после первого же запроса к xmlrpc.php. Атаки стали менее интенсивными, но каждый запрос всё равно запускал WordPress и потреблял много ресурсы.

Б) Полная блокировка через .htaccess (лучшее решение этой проблемы).

Самый эффективный и простой способ — закрыть доступ к xmlrpc.php на уровне веб-сервера, если вы не используете Jetpack. Добавьте в корневой .htaccess (рекомендуется для Apache):

<Files xmlrpc.php>
    Require all denied
</Files>

После этого любой запрос к xmlrpc.php будет отклоняться ещё до запуска PHP и WordPress. Нагрузка на сервер упадет мгновенно.

⚠️ Важное предупреждение! Прежде чем блокировать XML-RPC, убедитесь, что ваш сайт его не использует. Его могут использовать некоторые плагины (например, старые версии Jetpack) либо приложения для публикации с мобильных устройств. Если вы не пользуетесь такими сервисами, блокировка будет безопасной.

Останавливаем другие атаки: перебор имён пользователей и REST API

В логах Shield Security мы увидели:

• «Выявление автора» — попытки подобрать логин через /?author=1.
• «Анонимный REST API» через пространство имён peepso — атака на уязвимость старой версии плагина PeepSo, который много лет назад установил и удалил.

Shield Security уже блокировал их, но мы ещё усилили защиту:

• Для перебора имён пользователей включили опцию «Immediate IP Block» для неудачных входов.
• В целях безопасности удалите неиспользуемые плагины, например, PeepSo. Если они вам нужны — обязательно обновите их до последней версии.
• Настроили автоматический чёрный список IP (Auto Black List) с лимитом в 3 «оффенса» и блокировкой на 1 час.

Эти меры отсекают атакующих практически мгновенно.

Включаем CrowdSec для усиления

Shield Security умеет использовать базу данных вредоносных IP от CrowdSec. Мы включили опцию «Block Request With Ability To Auto-Unblock». Это даёт два преимущества:

• Запросы с IP из чёрного списка CrowdSec блокируются сразу.
• Реальный пользователь, попавший под блокировку, может разблокировать себя сам (без вашего участия) — достаточно ему перейти по ссылке из письма (Е-майл) или пройти капчу.

Это золотая середина между безопасностью и удобством.

Разбираемся с кодом 503 — оказывается он не всегда плох

Важное открытие: код 503 Service Unavailable не обязательно означает, что сайт упал. В нашем случае Shield Security намеренно возвращал 503 для заблокированных запросов — хитроумно имитируя перегрузку сервера, чтобы сбить с толку атакующих ботов.

Вывод: не пугайтесь ошибки 503 в логах. Проверяйте, какой именно ресурс возвращает ошибку. Если это xmlrpc.php или wp-cron.php — скорее всего, плагин безопасности хорошо делает свою работу.

Итог: что мы сделали и что вам стоит повторить

  1. Нашли причину с помощью отключения плагинов и анализа логов.
  2. Полностью заблокировали xmlrpc.php через .htaccess — это остановило атаку.
  3. Включили Immediate IP Block для неудачных входов и подозрительных запросов.
  4. Активировали CrowdSec с возможностью авторазблокировки для легитимных пользователей.
  5. Поняли, что 503 ошибка — это нормально, если сайт под атакой.

Эти шаги помогли нам снизить нагрузку на сервер, отбить атаку и сохранить доступность сайта. Надеюсь, и вам они пригодятся.

Есть вопросы? Пишите в комментариях — постараюсь помочь.

Читайте еще:

Дубли архивов Post Formats на WordPress

Комментарии и отзывы
Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Еще записи из этой же рубрики

Что будем искать? Например,seo

Минуту внимания
Мы используем файлы cookies, чтобы правильно работал наш веб-сайт.