Защита от брутфорс-атак: fail2ban, CAPTCHA и rate limiting

Безопасность · 19.04.2026
Защита от брутфорс-атак: fail2ban, CAPTCHA и rate limiting

Брутфорс-атаки — перебор паролей автоматизированными ботами — остаются одним из самых распространённых векторов взлома. Ежедневно на типичный VPS-сервер приходится тысячи попыток подбора пароля к SSH и веб-формам. Многоуровневая защита делает такие атаки нерентабельными.

fail2ban: автоматическая блокировка атакующих

apt install fail2ban -y

# /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 3600     # Блокировка на 1 час
maxretry = 5        # После 5 неудачных попыток
findtime = 600      # В течение 10 минут

[sshd]
enabled  = true
port     = ssh,2222
logpath  = /var/log/auth.log

[nginx-http-auth]
enabled  = true
logpath  = /var/log/nginx/error.log

[nginx-limit-req]
enabled  = true
logpath  = /var/log/nginx/error.log

systemctl enable --now fail2ban

Управление fail2ban

fail2ban-client status sshd
fail2ban-client set sshd unbanip 1.2.3.4
fail2ban-client set sshd banip 5.6.7.8
grep "Ban " /var/log/fail2ban.log | tail -20

Rate Limiting в Nginx

http {
    limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m;
    limit_req_zone $binary_remote_addr zone=api:10m rate=30r/m;
}
server {
    location /wp-login.php {
        limit_req zone=login burst=3 nodelay;
        limit_req_status 429;
    }
}

Геоблокировка через GeoIP2

apt install libnginx-mod-http-geoip2 -y

http {
    geoip2 /var/lib/GeoIP/GeoLite2-Country.mmdb {
        $geoip2_data_country_code country iso_code;
    }
    map $geoip2_data_country_code $allowed_country {
        default 0;
        UA 1; RU 1; PL 1; DE 1;
    }
}
server {
    if ($allowed_country = 0) { return 403; }
}

Защита формы входа через CAPTCHA

Для WordPress используйте плагин Cloudflare Turnstile или hCaptcha. Для собственных форм:

// PHP: проверка hCaptcha
$response = file_get_contents('https://hcaptcha.com/siteverify', false,
    stream_context_create(['http' => ['method' => 'POST',
    'content' => http_build_query([
        'secret' => 'YOUR_SECRET_KEY',
        'response' => $_POST['h-captcha-response']
    ])]]));
$result = json_decode($response);
if (!$result->success) { die('CAPTCHA failed'); }
Комбинированная защита: fail2ban + rate limiting + CAPTCHA + изменённый порт SSH — в совокупности делают брутфорс-атаку практически невозможной. Используйте все уровни, не ограничивайтесь одним.
Не блокируйте себя! Добавьте свой IP в whitelist fail2ban перед ужесточением настроек:
echo "ignoreip = 127.0.0.1/8 ВАШ_IP" >> /etc/fail2ban/jail.local
← Назад в базу знаний Задать вопрос поддержке