Как защитить WordPress от bruteforce-атак: практические методы и примеры кода

Что такое bruteforce-атаки и почему они опасны для WordPress

Bruteforce-атаки – это способ взлома сайта путем перебора большого количества вариантов паролей для входа в административную панель. Для WordPress, как самой популярной CMS, это одна из самых распространенных угроз. Злоумышленники используют автоматические скрипты, чтобы перебрать логины и пароли, что может привести к компрометации сайта, потере данных и нарушению работы.

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

В этой статье рассмотрим, как минимизировать риски bruteforce-атак на WordPress, используя проверенные плагины, настройки сервера и собственный код.

Использование плагинов для защиты от bruteforce

Самый простой и эффективный способ защитить вход в WordPress — это установить специальные плагины, которые ограничивают количество попыток входа и блокируют подозрительные IP.

1. Limit Login Attempts Reloaded

Этот плагин позволяет ограничить число попыток входа с одного IP-адреса. Он блокирует IP на заданный период после превышения лимита. Плагин прост в настройке и бесплатно доступен в официальном репозитории.

Основные функции:

  • Ограничение количества попыток входа
  • Блокировка IP-адресов на определенное время
  • Отправка уведомлений администратору
  • Белый список IP

2. WP Cerber Security

Более продвинутый плагин, который не только ограничивает попытки входа, но и защищает от спама, ботов и других видов атак. Имеет встроенный firewall и антиспам-модуль.

Преимущества:

  • Гибкая настройка лимитов
  • Мониторинг активности пользователей
  • Защита REST API и XML-RPC
  • Интеграция с Google reCAPTCHA

Оба плагина можно скачать с WPSHOP с удобной установкой и поддержкой.

Ограничение попыток входа через .htaccess и nginx

Кроме плагинов, можно защитить сайт на уровне сервера. Для Apache в файле .htaccess добавим правила, которые запретят доступ к странице входа после нескольких попыток с одного IP.

Пример настройки для Apache (.htaccess)

# Ограничение доступа к wp-login.php после 3 попыток за 5 минут
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-login.php$
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89$
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$
RewriteCond %{ENV:LIMIT_BRUTEFORCE} ^$
RewriteRule ^ - [E=LIMIT_BRUTEFORCE:1]
RewriteCond %{ENV:LIMIT_BRUTEFORCE} ^1$
RewriteRule ^ - [F]
</IfModule>

Здесь можно дополнительно настроить логику для блокировки по IP. Для nginx можно использовать модуль limit_req для ограничения количества запросов к /wp-login.php.

Пример настройки для nginx

limit_req_zone $binary_remote_addr zone=login:10m rate=3r/m;

server {
    location = /wp-login.php {
        limit_req zone=login burst=3 nodelay;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

Это позволит ограничить количество запросов к странице входа до 3 в минуту с одного IP.

Использование кода для ограничения попыток входа в WordPress

Если вы хотите реализовать ограничение попыток входа без плагинов, можно добавить простой код в файл functions.php вашей темы или создать небольшой плагин. Ниже пример функции с префиксом wpmarket_ для подсчета и блокировки попыток.

function wpmarket_limit_login_attempts() {
    session_start();
    $max_attempts = 5;
    $lockout_time = 15 * 60; // 15 минут

    if (!isset($_SESSION['wpmarket_login_attempts'])) {
        $_SESSION['wpmarket_login_attempts'] = 0;
        $_SESSION['wpmarket_last_attempt'] = time();
    }

    if (time() - $_SESSION['wpmarket_last_attempt'] > $lockout_time) {
        $_SESSION['wpmarket_login_attempts'] = 0;
    }

    if ($_SESSION['wpmarket_login_attempts'] >= $max_attempts) {
        wp_die('Слишком много попыток входа. Попробуйте позже.');
    }
}
add_action('wp_login_failed', function() {
    session_start();
    $_SESSION['wpmarket_login_attempts']++;
    $_SESSION['wpmarket_last_attempt'] = time();
});
add_action('login_form', 'wpmarket_limit_login_attempts');

Этот код хранит количество попыток в сессии. При превышении лимита пользователь получит сообщение о блокировке. Такой способ подходит для небольших сайтов без большого числа пользователей.

Дополнительные рекомендации по защите входа

Использование двухфакторной аутентификации (2FA)

Двухфакторная аутентификация значительно повышает безопасность, требуя кроме пароля еще и код из приложения на телефоне. Популярные плагины для 2FA: Google Authenticator, Two Factor.

Отключение XML-RPC, если не используется

XML-RPC часто используют для атак bruteforce и DDoS. Если вы не используете удаленный доступ, отключите его с помощью плагина или через functions.php:

add_filter('xmlrpc_enabled', '__return_false');

Изменение URL входа

Смена стандартного URL /wp-login.php на кастомный затрудняет подбор паролей. Плагин WPS Hide Login поможет быстро изменить адрес входа.

Заключение

Защита WordPress от bruteforce-атак требует комплексного подхода: использование плагинов для ограничения попыток, настройка сервера и при необходимости внедрение собственного кода. Применение двухфакторной аутентификации и изменение URL входа существенно повышают безопасность сайта. Не забывайте регулярно обновлять WordPress и плагины, чтобы минимизировать риски.

Все рассмотренные плагины и инструменты можно найти на WPSHOP с удобной поддержкой и инструкциями.

⭐⭐⭐⭐⭐