我无法让 fail2ban 的正则表达式正常工作。我想匹配以下内容:
[Tue Jun 24 10:22:14.528987 2014] [fcgid:warn] [pid 22526:tid 139757615011584] [client IP:PORT] mod_fcgid: stderr: user admin joomla authentication failure, referer: http://www.mydomain.com/administrator/index.php?option=com_login
我试过:
^\[.*\s*.*]* \[client <HOST>\] mod_fcgid: stderr: user .* joomla authentication failure, referer: .*
任何帮助都将非常感激。
答案1
仅需 2 条注释:
- 在示例中我们需要使用实际的 IP 和端口而不是
IP:PORT
,即使它是假的。 - 在正则表达式中,您需要捕获 IP,并单独指定端口:
<HOST>:[0-9]+
。我假设端口是强制性的。
测试(最后一行是正则表达式):
fail2ban-regex \
'[Tue Jun 24 10:22:14.528987 2014] [fcgid:warn] [pid 22526:tid 139757615011584] [client 1.2.3.4:1234] mod_fcgid: stderr: user admin joomla authentication failure, referer: http://www.mydomain.com/administrator/index.php?option=com_login' \
'^\[.*]* \[client <HOST>:[0-9]+\] mod_fcgid: stderr: user .* joomla authentication failure, referer: .*'
这个对我有用。
答案2
您不需要使用复杂的正则表达式来跳过前导时间字段。我怀疑这就是导致您出现问题的原因。对于给定的日志条目,只要我将其转换IP:PORT
为数字 ip:port 值,此方法即可奏效。
'^.*[[]client <HOST>.*user .*joomla authentication failure,'
上述操作将禁止任何身份验证失败次数过多的用户。
我不知道你是否使用它,但 fail2ban-regex 是一个很好的工具