我正在尝试保护我的管理员和用户登录页面免受暴力攻击。我已经设置了 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 表示登录成功,所以我看不出它如何检测无效登录。
有人能解释一下这段代码的作用以及为什么它可以用于阻止暴力登录吗?
答案1
我似乎无法理解它在这方面做了什么。首先,结果 200 表示登录成功,
不是,这只是 的 HTTP 状态代码OK
。因此,服务器在协议层上没有遇到任何问题,服务器上运行的应用程序也没有出现任何严重问题(4xx 和 5xx)。这仅表示将提供页面。
所以我不知道它如何检测无效登录
不是。它仅计算 IP/session
通过 POST(提交 HTML 表单)调用 URL 的频率。
failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200
当日志中出现此行 6 次后(因此用户提交了表单 6 次),该用户将被阻止。
maxretry = 6
阻断的时间为bantime
,fail2ban 回溯的时间为findtime
。这两个值默认都是 600 秒,也就是 5 分钟。
为了仅禁止失败的登录,您必须从应用程序中记录它们,因为 Web 服务器不知道登录(由 Web 应用程序处理)是否失败或成功。