这似乎是fail2ban中的一个bug,在fail2ban-regex工具和failregex过滤器之间有不同的行为。
我试图为fail2ban开发一个新的正则表达式,以匹配:
\"%20and%20\"x\"%3D\"x
当使用fail2ban-regex时,这似乎会产生所需的结果:
^<HOST>.*GET.*\\"%20and%20\\"x\\"%3D\\"x.* 200.*$
这一点也是如此:
^<HOST>.*GET.*\\\"%20and%20\\\"x\\\"%3D\\\"x.* 200.*$
但是,当我将其中任何一个放入过滤器中时,都会得到以下错误:
Failed during configuration: '%' must be followed by '%' or '(', found:…
若要在筛选器中执行此操作,必须将“%”(%)加倍:
^<HOST>.*GET.*\\\"%%20and%%20\\\"x\\\"%%3D\\\"x.* 200.*$
虽然这会使所需的命中作为一个过滤器运行,但没有一个通过fail2ban-regex运行。
正如安德烈在下面建议的那样,我尝试了\\\\
,但是这在fail2ban-regex中没有结果。
因此,由于这似乎是差异行为,我将把它作为一个bug。
发布于 2020-07-10 13:05:28
根据Python自己的站点,单字反斜杠"\"
必须编写为"\\\\"
,而且没有提到%
。
正则表达式使用反斜杠字符('')来指示特殊形式,或者允许使用特殊字符而不调用它们的特殊意义。这与Python在字符串文本中为相同目的使用相同字符的用法相冲突;例如,要匹配一个文本反斜杠,可能必须将“\”写成模式字符串,因为正则表达式必须是\,并且每个反斜杠必须表示为\在常规Python字符串文本中。
我只想说:
failregex = (?i)^<HOST> -.*"(GET|POST|HEAD|PUT).*20and.*3d.*$
.*
将匹配任何在任何方式之间的任何东西,而(?i)
使整个正则表达式不区分大小写。
https://stackoverflow.com/questions/62824962
复制相似问题