请求优化Dovecot日志的Fail2ban过滤正则:匹配用户名与密码一致的登录尝试
解决Dovecot日志中用户名与密码一致的Fail2ban过滤规则问题
修改后的Failregex规则
要匹配任意用户名和输入密码相同的登录尝试,需要用正则的反向引用功能,捕获用户名后匹配对应的密码字段。修改后的规则如下:
failregex = auth-worker\(\d+\): sql\(([^,]+),<HOST>\): (Password mismatch|unknown user) \(given password: \1\)
规则拆解
auth-worker\(\d+\):匹配auth-worker(数字)的进程标识部分,\d+匹配任意位数的数字,括号转义是因为正则里括号属于特殊字符。sql\(([^,]+),<HOST>\):捕获用户名部分,([^,]+)匹配逗号前的任意非逗号字符(即用户名),用括号标记为捕获组1;<HOST>是Fail2ban内置的IP地址匹配标记,会自动匹配日志中的客户端IP。(Password mismatch|unknown user):匹配日志里的两种失败提示,覆盖你提到的登录失败场景。\(given password: \1\):\1引用前面捕获的第一个组(也就是用户名),确保这里的密码和之前捕获的用户名完全一致,括号同样需要转义。
验证规则有效性
可以用Fail2ban自带的测试工具验证规则是否匹配目标日志:
fail2ban-regex "Jun 1 04:16:24 mail dovecot: auth-worker(3158): sql(ryan,193.42.32.170): unknown user (given password: ryan)" /etc/fail2ban/filter.d/your-dovecot-filter.conf
如果返回结果显示匹配成功,说明规则生效。
内容的提问来源于stack exchange,提问作者Tim Altgeld
相关产品推荐
相关产品推荐

