我正在尝试保护我的管理员和用户登录页面免受暴力攻击。我已经设置了 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 表示登录成功,所以我看不到它会如何检测无效登录。
谁能解释一下这段代码在做什么以及为什么它可能被用来阻止暴力登录?
不,这只是
OK
. 所以服务器在协议层没有遇到任何问题,服务器上运行的应用程序也没有任何严重的问题(4xx和5xx)。这仅意味着将提供一个页面。它没有。它只计算 IP
/session
通过 POST 调用 URL 的频率(提交 HTML 表单)。在日志中此行出现 6 次后(因此用户提交表单 6 次),用户获取被阻止。
阻塞
bantime
的时间是 ,fail2ban 向后看的时间是findtime
。默认情况下,这两个值都是 600 秒,因此是 5 分钟。要仅禁止失败的登录,您必须从应用程序中记录它们,因为如果登录(由 Web 应用程序处理)失败或成功,网络服务器现在不会这样做。