fail2ban Regex 用于 POST 未触发

fail2ban Regex 用于 POST 未触发

因此,我尝试限制服务器上的 POST 请求。我四处寻找并尝试了在互联网上能找到的所有字符串排列。

这是我的 jail.local apache 配置

[apache-postUsHttp]

enabled = true
port = http,https
filter = apache-postflood
logpath = /var/log/apache2/other_vhosts_access.log
findtime = 30
bantime = 3600
maxretry = 10

这里有 apache-postflood.conf 过滤器

# Fail2Ban configuration file
#
#
# $Revision: 1 $
#

[Definition]
# Option: failregex
# Notes.: Regexp to catch known spambots and software alike. Please verify
# that it is your intent to block IPs which were driven by
# abovementioned bots.
# Values: TEXT
#
failregex = ^<HOST>.*"POST.*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

这是一个访问帖子日志的示例。

my.tld:80 x.x.x.x - - [25/Aug/2016:05:53:52 -0400] "POST /location/of/file.php HTTP/1.1" 302 300 "http://my.tld/" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1"

我也尝试了以下 failregex = ^ -.* "POST.*

以及许多其他细微的变化。但无论我做什么,我的 fail2ban 日志中都不会收到过滤通知/信息。

我知道时间戳正在解析并且正在读取日志,因为当我打开调试日志时,它肯定会记录所有内容。

答案1

您的正则表达式错误。您尝试<HOST>在行首进行匹配^<HOST>,但您想要的那个不在那里,而是在 my.tld:80: 之后。

就像是

'^.*:80 <HOST> - - .*"POST.*'

可能对你有用,但你可能需要调整它。别忘了还有 fail2ban-regex(1),它对于测试很方便。

答案2

所以我明白了。

问题出在共享访问日志中。

我正在为此服务器上的多个站点使用一个访问日志,并且该日志试图使用第一个主机(即网站的名称)并尝试查找 DNS 来禁止它。

IE

my.tld:80 x.x.x.x ......

xxxx 是我需要正则表达式的 ip。如果有人能告诉我正确的正则表达式那就太好了,但只需为这些网站制作我自己的日志文件就可以解决这个问题。

相关内容