В этой статье разберем, как эффективно защитить ваш 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 с защитой от ботов.
Такой подход позволит значительно снизить риски взломов и снизить нагрузку от нежелательного трафика.