Брутфорс-атаки — перебор паролей автоматизированными ботами — остаются одним из самых распространённых векторов взлома. Ежедневно на типичный 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