Fail2ban 无法识别 IP

Fail2ban 无法识别 IP

我在这里遇到了一个问题,Fail2ban 无法识别 IP,因此我尝试禁止失败的 MySQL 访问,以下是系统日志受到监控

Sep  6 01:45:18 vps6XXXXX mysqld: 2019-09-06  1:45:18 140581192722176 [Warning] IP address '120.160.120.60' has been resolved to the host name '67.subnet120-160-120.speedy.telkom.net.id', which resembles IPv4-address itself.
Sep  6 01:45:18 vps6XXXXX mysqld: 2019-09-06  1:45:18 140581192722176 [Warning] Access denied for user 'global'@'120.160.120.60' (using password:YES)

但是,fail2ban 无法从120.160.120.60检测为0.0.0.7. 来自的日志文件fail2ban.log如下面所述

2019-09-06 01:45:18,742 fail2ban.filter [3793]: WARNING Determined IP using DNS Lookup: 7 = ['0.0.0.7'] 
2019-09-06 01:45:18,742 fail2ban.filter [3793]: INFO [mysql] Found 0.0.0.7

这是我的习惯filter.d mysql.conf正则表达式

[Definition]
failregex = ^.*\[Warning\] Access denied for user.*<HOST>.*\(using password: YES\)$
ignoreregex =

我不确定是 fail2ban 无法确定 IP 还是我的正则表达式无法完成工作。

我将非常感激任何针对此问题的建议或解决方案。谢谢。

答案1

原始问题中的正则表达式<HOST>仅解析部分:

  • IP_V4_RE0.160.120.60
  • DNS0

(看https://github.com/fail2ban/fail2ban/search?q=IP_4_RE&unscoped_q=IP_4_RE有关 fail2ban 内部表达式的详细信息<HOST>)

当调整到以下内容时,主机部分将被正确考虑:

failregex = ^.*\[Warning\] Access denied for user '[^']+'@'<HOST>' \(using password: YES\)$

自定义正则表达式似乎没有考虑其他可能性,例如在https://github.com/fail2ban/fail2ban/blob/0.11/config/filter.d/mysqld-auth.conf#L20

failregex = ^%(__prefix_line)s(?:\d+ |\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[\w+\] (?:\[[^\]]+\] )*Access denied for user '[^']+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$

答案2

尽管已知存在类似恼人的双时间戳问题(某些服务或 syslog 会写入双重日期时间,一个在前面,另一个在消息正文中),但我不知道为什么日志消息中的格式会因系统而异。

无论如何,现在应该修复了(见https://github.com/fail2ban/fail2ban/commit/50595b70fd4e2563ba816acf4877775eda36e248)。

顺便说一句。您的正则表达式有点“脆弱”,因为未锚定(^.*没有意义)并且.*在 之前和 之后包含 catch-all()<HOST>

相关内容