CentOS 6 fail2ban 无法禁止 http dos 请求

CentOS 6 fail2ban 无法禁止 http dos 请求

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。

相关内容