我已经设置了 nginxproxymanager,并希望使用 fail2ban 来确保安全。我对 fail2ban 还很陌生,需要大家的建议。
登录失败时的访问日志如下
[12/Sep/2022:09:47:54 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
[12/Sep/2022:11:11:32 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
[12/Sep/2022:11:12:02 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
[12/Sep/2022:11:12:43 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
[12/Sep/2022:11:14:54 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
[12/Sep/2022:11:15:26 +0000] - 401 401 - POST http nginx.example.com "/api/tokens" [Client 192.168.X.XX] [Length 51] [Gzip -] [Sent-to 192.168.X.XX] "Mozilla/5.0...
我真的不知道如何构建 failregex,请帮忙
答案1
下面是一个 jail 示例,它将查找与您的日志格式相对应的每个 401 次尝试:
[nginxpm]
backend = auto
logpath = /path/to/log
filter =
failregex = ^\s*(?:\[\]\s+)?- 401 \d+ - [A-Z]+ \w+ \S+ "[^"]+" \[Client <ADDR>\]
enabled = true
如果您需要更精确的内容,例如您可以使用POST
而不是[A-Z]+
,或者"/api/tokens\b[^"]*"
而不是"[^"]+"
(那么它只会找到对 的 POST 请求/api/tokens?...
。
登录失败时的访问日志如下
至于访问日志,不建议这样做(因为可能存在大量寄生流量)——最好将 nginx 配置为将未经授权的尝试记录到另一个日志文件中,并在监狱中对其进行监控。或者可以改为监控错误日志。请参阅fail2ban :: wiki :: 最佳实践 # 减少寄生日志流量了解详情。