新逸Cary 发表于 2020-7-27 16:51:39

【已解答】fail2ban问题反馈

面板版本:宝塔linux面板 7.4.2

系统版本:CentOS7.8.2003(Py3.7.4)

浏览器版本:Google Chrome 84

问题现象:经测试,fail2ban无法处理 http/2.0协议 的访问请求。没有权限提交带url的内容

重现方式:

网站开启http2后,curl测试访问,如:
curl -I 网址

服务器日志如下:
39.155.215.86 - - "HEAD / HTTP/2.0" 200 0 "-" "curl/7.70.0"

此时查看fail2ban,无日志记录。




新逸Cary 发表于 2020-7-27 16:53:24

而且ip被ban之后,此IP无法访问服务器上的所有站点了

大炮运维V587 发表于 2020-7-27 17:36:01

新逸Cary 发表于 2020-7-27 16:53
而且ip被ban之后,此IP无法访问服务器上的所有站点了

这个banip相当于在服务器网络层的作用,加到黑名单后,就是该服务器上的所有站点都无法访问,直接从网络层杜绝

大炮运维V587 发表于 2020-7-27 17:38:04

你第一个问题应该是curl无法处理http2协议的请求,fail2ban仅仅处理网络层,对http协议只从网站日志中取值分析哪些符合阈值的ip,然后ban掉

新逸Cary 发表于 2020-7-28 09:48:04

大炮运维V587 发表于 2020-7-27 17:38
你第一个问题应该是curl无法处理http2协议的请求,fail2ban仅仅处理网络层,对http协议只从网站日志中取值 ...

用浏览器访问是同样的效果,协议显示为 h2时,fail2ban没有日志,但nginx会有日志;而访问的网址为htttp/1.1协议时,nginx和fail2ban都会有日志

新逸Cary 发表于 2020-7-28 09:50:53

大炮运维V587 发表于 2020-7-27 17:38
你第一个问题应该是curl无法处理http2协议的请求,fail2ban仅仅处理网络层,对http协议只从网站日志中取值 ...

另外,您说的这个“curl无法处理http2协议的请求”,我试了,curl增加参数 --http2 时,fail2ban是没有日志的,但请求正常。使用参数--http1.1 和 --http1.0 时,nginx和fail2ban都有日志。

新逸Cary 发表于 2020-7-29 12:04:48

大炮运维V587 发表于 2020-7-27 17:38
你第一个问题应该是curl无法处理http2协议的请求,fail2ban仅仅处理网络层,对http协议只从网站日志中取值 ...

找到了fail2ban的源码,fail2ban_main.py,有这样一段:

            if values["regex"] == "scan":
                regex = "failregex = <HOST> -.* {}.* HTTP/1\..".format(values["dir"])
            elif values["regex"] == "cc":
                regex = "failregex = <HOST> -.*- .*HTTP/1.* .* .*$"
            else:
                regex = values["regex"]

可以看到插件里只匹配了http1.x的协议请求

大炮运维V587 发表于 2020-7-31 11:49:42

新逸Cary 发表于 2020-7-29 12:04
找到了fail2ban的源码,fail2ban_main.py,有这样一段:




已反馈给程序员
页: [1]
查看完整版本: 【已解答】fail2ban问题反馈