Я пытаюсь защитить свою страницу входа администратора и пользователя от атак грубой силы. У меня есть настройки iptables, и ближайшая вещь, которую я могу найти, которая выглядит полезной, это:
файл тюрьмы:
[nginx-login]
enabled = true
filter = nginx-login
action = iptables-multiport[name=NoLoginFailures, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 600 # 10 minutes
maxretry = 6
/etc/fail2ban/filter.d/nginx-login.conf
# Blocks IPs that fail to authenticate using web application's log in page.
# Scan access log for HTTP 200 + POST /sessions => failed log in.
[Definition]
failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200
ignoreregex =
Я не могу понять, что он делает в этом отношении. Прежде всего, результат 200 означает, что вход в систему был успешным, поэтому я не вижу, как он обнаружит недопустимые входы.
Может ли кто-нибудь объяснить, что делает этот код и почему его можно использовать для остановки входа в систему с помощью грубой силы?
Я не могу понять, что он делает в этом отношении. Во-первых, результат 200 означает, что вход в систему прошел успешно,
Нет, это просто код состояния HTTP для OK
. Таким образом, сервер не столкнулся с какими-либо проблемами на уровне протокола, а приложение, работающее на сервере, не столкнулось с какими-либо серьезными проблемами (4xx и 5xx). Это только означает, что страница будет обслуживаться.
поэтому я не вижу, как он обнаружит недопустимые логины
Это не так. Учитывается только то, как часто IP-адрес называется URL-адресом. /session
через POST (отправили HTML-форму).
failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200
После 6 вхождений этой строки в журнал (таким образом, пользователь отправил форму 6 раз) пользователь блокируется.
maxretry = 6
Время блокировки bantime
и время, когда fail2ban оглядывается назад, findtime
. Оба значения по умолчанию равны 600 секундам, то есть 5 минут.
Чтобы запретить только неудачные входы в систему, вы должны регистрировать их из своего приложения, поскольку веб-сервер теперь не делает этого, если вход в систему (который обрабатывается веб-приложением) не удался или завершился успешно.