Brute force атаки — одна из самых распространённых угроз для сайтов на WordPress. Злоумышленники пытаются подобрать логин и пароль, чтобы получить доступ к админ-панели. В этой статье разберём, как эффективно ограничить такие атаки с помощью файла .htaccess без привлечения дополнительных плагинов, что особенно актуально для владельцев сайтов с ограниченными ресурсами на хостинге, например на WPShop.
Почему важно защищать WordPress от brute force атак
Brute force атаки — это автоматические попытки подобрать правильные логин и пароль путём перебора. Если не ограничивать такие попытки, это может привести к:
- взлому админ-панели и последующему взлому сайта,
- перегрузке сервера из-за большого количества запросов,
- блокировке IP-адресов хостинга из-за подозрительной активности.
Выявить и заблокировать такие атаки можно на ранней стадии, используя настройки .htaccess — мощного конфигурационного файла веб-сервера Apache.
Настройка .htaccess для защиты от brute force атак
Блокировка доступа к wp-login.php по IP
Самый простой способ — ограничить доступ к странице входа в админку только с доверенных IP-адресов. Например, если вы заходите только из офиса или дома, добавьте в .htaccess следующий код:
# Ограничение доступа к wp-login.php
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 123.45.67.89
Allow from 98.76.54.32
</Files>
Замените 123.45.67.89 и 98.76.54.32 на ваши реальные IP-адреса. Таким образом попытки входа с других адресов будут блокироваться на уровне сервера.
Ограничение количества запросов через mod_evasive
Если у вас есть доступ к настройкам сервера и модуль mod_evasive активирован, можно ограничить количество запросов к wp-login.php. Это предотвратит попытки перебора с одного IP за короткий промежуток времени.
Пример конфигурации для mod_evasive:
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
Однако эта настройка выходит за рамки файла .htaccess и требует доступа к конфигу Apache.
Защита через Basic Auth для wp-login.php
Альтернативный способ — добавить дополнительную защиту с помощью HTTP-аутентификации. В .htaccess добавьте:
# Дополнительная защита для wp-login.php
<Files wp-login.php>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
</Files>
Файл .htpasswd содержит логины и пароли в зашифрованном виде и должен находиться в защищённом каталоге. Этот метод эффективен, если вы хотите добавить второй уровень защиты без изменения кода сайта.
Автоматическое блокирование IP с помощью .htaccess и fail2ban
Для более продвинутой защиты рекомендуется использовать связку fail2ban и .htaccess. Fail2ban анализирует логи сервера и блокирует IP, с которых происходят подозрительные попытки входа.
В .htaccess можно добавить правила для логирования неудачных попыток, а затем настроить fail2ban для мониторинга этих логов. Например, логировать 403 ошибки — отказ в доступе при неправильном IP для wp-login.php.
Пример функции wphostProtectBruteforce для дополнительной защиты WordPress
Если хотите автоматизировать защиту на уровне WordPress, можно добавить функцию, которая ограничивает количество попыток входа. Вот пример кода для functions.php вашей темы или плагина:
function wphostProtectBruteforce_limit_login_attempts() {
$max_attempts = 5;
$lockout_time = 60 * 15; // 15 минут
$ip = $_SERVER['REMOTE_ADDR'];
if (!session_id()) {
session_start();
}
if (!isset($_SESSION['login_attempts'])) {
$_SESSION['login_attempts'] = [];
}
$now = time();
// Очистка устаревших попыток
$_SESSION['login_attempts'] = array_filter($_SESSION['login_attempts'], function($timestamp) use ($now, $lockout_time) {
return ($now - $timestamp) < $lockout_time;
});
if (count($_SESSION['login_attempts']) >= $max_attempts) {
wp_die('Слишком много попыток входа. Попробуйте позже.');
}
if (isset($_POST['log']) && isset($_POST['pwd'])) {
add_action('wp_login_failed', function() use (&$_SESSION, $now) {
$_SESSION['login_attempts'][] = $now;
});
}
}
add_action('init', 'wphostProtectBruteforce_limit_login_attempts');
Этот простой скрипт хранит попытки входа в сессии и блокирует дальнейшие попытки, если их слишком много за короткое время. Это базовый пример, который можно доработать, используя базу данных или кеш для долговременного хранения.
Плагины для защиты от brute force атак
Если вы предпочитаете готовые решения, обратите внимание на плагины с хорошими отзывами:
- Wordfence Security — мощный комплексный плагин с защитой от brute force, firewall и сканером.
- Login LockDown — простой плагин, ограничивающий количество попыток входа с одного IP.
- Limit Login Attempts Reloaded — популярный и лёгкий плагин для ограничения попыток авторизации.
Все эти плагины можно найти и установить через административную панель WordPress. Например, на WPShop вы найдёте множество полезных решений для защиты и оптимизации сайта.
Дополнительные рекомендации по защите WordPress
Помимо настройки .htaccess и ограничения попыток входа, рекомендуем:
- Использовать сложные пароли и двухфакторную аутентификацию (2FA).
- Регулярно обновлять WordPress, темы и плагины.
- Ограничить права пользователей и удалить неиспользуемые аккаунты.
- Настроить уведомления о подозрительной активности.
Эти меры в комплексе значительно усилят безопасность вашего сайта и снизят риск успешных атак.