Как защитить WordPress от ботов и сканеров по IP: практические методы и примеры кода

В этой статье разберем, как эффективно защитить ваш WordPress-сайт от нежелательных ботов и сканеров, которые пытаются найти уязвимости или создавать лишнюю нагрузку. Один из действенных способов — блокировка по IP-адресам. Мы рассмотрим несколько подходов: через .htaccess, плагины и кастомные PHP-решения.

Почему важно блокировать вредоносные боты по IP

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

Однако стоит помнить, что IP можно изменять, а также блокировка по IP не решает всех проблем. Но вместе с другими методами защиты — это важный элемент комплексной безопасности.

Какие IP стоит блокировать

  • Известные IP из баз вредоносных ботов.
  • Подозрительные диапазоны с частыми запросами на wp-login.php или xmlrpc.php.
  • IP с частыми ошибками 404 при попытках доступа к несуществующим страницам.

Для отслеживания таких IP удобно использовать логи сервера или плагины аналитики.

Блокировка IP через .htaccess

Самый простой способ ограничить доступ — добавить правила в файл .htaccess в корне WordPress. Вот пример блокировки конкретных IP и диапазонов:

# Блокировка IP-адресов по .htaccess
<RequireAll>
  Require all granted
  Require not ip 123.45.67.89
  Require not ip 111.222.0.0/16
</RequireAll>

Для серверов на Apache старой версии можно использовать:

Order Allow,Deny
Allow from all
Deny from 123.45.67.89
Deny from 111.222.0.0/16

Это остановит доступ с указанных IP до попадания на PHP и WordPress, что экономит ресурсы сервера.

Минусы и ограничения

Основной минус — ручное обновление списка IP, особенно если бот меняет адреса. Также если у вас динамические IP, есть риск заблокировать легитимных пользователей.

Использование плагинов для блокировки IP

Если вы хотите более гибкое управление, можно использовать плагины. Вот несколько полезных:

  • IP Blacklist Cloud — автоматическая блокировка IP из общих баз вредоносных адресов.
  • Clearfy Pro — комплексный плагин для оптимизации и безопасности, есть возможность блокировать IP и отключать ненужные API.
  • Wordfence Security — мощный плагин с функцией блокировки IP, firewall и сканированием на вредоносный код.

Плагины позволяют создавать списки заблокированных IP, автоматически обновлять их и даже настраивать уведомления о попытках атак.

Кастомное решение на PHP для блокировки по IP

Если нужен легковесный и полностью контролируемый способ, можно добавить проверку IP в код темы или плагина. Пример функции с префиксом wphide_:

function wphide_block_bad_ips() {
  $blocked_ips = array(
    '123.45.67.89',
    '111.222.0.0', // можно добавить и диапазоны с проверкой
  );
  $user_ip = $_SERVER['REMOTE_ADDR'];
  if (in_array($user_ip, $blocked_ips)) {
    wp_die('Доступ запрещен.');
    exit;
  }
}
add_action('init', 'wphide_block_bad_ips');

Для блокировки диапазонов IP можно добавить функцию проверки с использованием ip2long и сравнения диапазонов.

Как добавить блокировку диапазонов IP

function wphide_ip_in_range($ip, $range) {
  if (strpos($range, '/') === false) {
    return $ip === $range;
  }
  list($range_ip, $netmask) = explode('/', $range, 2);
  $ip_long = ip2long($ip);
  $range_long = ip2long($range_ip);
  $mask = ~((1 << (32 - $netmask)) - 1);
  return (($ip_long & $mask) === ($range_long & $mask));
}

function wphide_block_bad_ips() {
  $blocked_ranges = array(
    '123.45.67.0/24',
    '111.222.0.0/16',
  );
  $user_ip = $_SERVER['REMOTE_ADDR'];
  foreach ($blocked_ranges as $range) {
    if (wphide_ip_in_range($user_ip, $range)) {
      wp_die('Доступ запрещен.');
      exit;
    }
  }
}
add_action('init', 'wphide_block_bad_ips');

Такой код можно разместить в functions.php вашей темы или в собственном плагине. Это позволит быстро и гибко блокировать нежелательные IP.

Дополнительные советы по защите от ботов

Отключение xmlrpc.php и REST API для гостей

Часто боты пытаются лазить через xmlrpc.php или REST API. Вы можете отключить их для неавторизованных пользователей, чтобы снизить риск сканирования.

Для отключения REST API для гостей:

function wphide_disable_rest_for_guests($access) {
  if (!is_user_logged_in()) {
    return new WP_Error('rest_cannot_access', 'REST API доступ запрещен.', array('status' => 401));
  }
  return $access;
}
add_filter('rest_authentication_errors', 'wphide_disable_rest_for_guests');

Для блокировки xmlrpc.php можно добавить в .htaccess:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Использование CDN с защитой от ботов

Подключение CDN с функцией Web Application Firewall (например, Cloudflare) позволяет автоматически фильтровать подозрительный трафик и блокировать агрессивных ботов до сервера.

Мониторинг и обновление списка IP

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

Также полезно использовать плагины с функцией автоматического обновления списков вредоносных IP, например, Clearfy Pro.

Выводы и рекомендации

Блокировка IP – один из важнейших элементов защиты WordPress от ботов и сканеров. Рекомендуется комбинировать несколько методов:

  • Использовать правила в .htaccess для базовой блокировки.
  • Добавлять кастомный код для гибкого контроля IP и диапазонов.
  • Устанавливать плагины безопасности с функцией блокировки IP и автоматическим обновлением списков.
  • Отключать REST API и xmlrpc.php для гостей, если они не нужны.
  • Подключать CDN с защитой от ботов.

Такой подход позволит значительно снизить риски взломов и снизить нагрузку от нежелательного трафика.

⭐⭐⭐⭐⭐