Fail2ban 无法禁止通过 HTTP 发出过多请求的客户端。SSH 禁令确实有效
ab
为了测试这一点,我使用其他服务器进行了多次测试curl
。我甚至确保我被 ssh 禁止。我确实成功了,但我没有成功通过 http 请求。
ab -n 600 -c 10 http://domain.tld/
我尝试了几种过滤器的正则表达式规则,在测试部分 Apache 日志时,这些规则运行良好。我得到以下结果:
tail -n 10000 /var/log/httpd/<vhost>_access.log > /tmp/f2btest.log
fail2ban-regex /tmp/f2btest.log /etc/fail2ban/filter.d/cybertec-ban.conf
其结果如下:
Running tests
=============
Use failregex file : /etc/fail2ban/filter.d/custom-ban.conf
Use log file : /tmp/f2btest.log
Results
=======
Failregex: 9583 total
|- #) [# of hits] regular expression
| 1) [9583] ^<HOST> -.*\"(GET|POST).*
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [10000] Day/MONTH/Year:Hour:Minute:Second
`-
Lines: 10000 lines, 0 ignored, 9583 matched, 417 missed
Missed line(s): too many to print. Use --print-all-missed to print all 417 lines
我认为问题不在于输出。如果我错了,请告诉我。
我把规则放进去jail.conf
,规则如下:
#
# Filter malicious http requests
#
[custom-ban]
enabled = true
port = http,https
filter = custom-ban
action = iptables[name=HTTP, port=http, protocol=tcp]
iptables[name=HTTPS, port=https, protocol=tcp]
logpath = /var/log/httpd/*access.log # <- this works according to the fail2ban log
/var/log/httpd/access_log
maxretry = 500
findtime = 120
过滤custom-ban
器(位于 /etc/fail2ban/filter.d/)如下所示:
[Definition]
failregex = ^<HOST> -.*\"(GET|POST).*
ignoreregex =
我做错了什么?我忘记了什么?我该如何让这些规则发挥作用?
是否存在名称冲突或类似情况?
答案1
您已maxretry
设置为500
,并且findtime
设置为120
,因此 IP 地址必须在 120 秒内生成 500 条相关消息才会被禁止。
我不知道您的系统受到了什么攻击,攻击速度有多快,甚至正常情况下如何。从外部看,它们似乎有点高,请尝试降低 maxretry。