我遇到一个问题,我的 fail2ban 不会禁止针对我的 postfix 的 sasl 身份验证。
这是来自 /var/log/syslog 的示例日志条目:
Jul 31 13:42:21 v50428 postfix/smtps/smtpd[635398]: warning: xxxx.de[xx.xx.xx.98]: SASL LOGIN authentication failed: authentication failure
这是 fail2ban 中的 Jail 过滤器“postfix-sasl”:
[Definition]
_daemon = postfix/(submission/)?smtp(d|s)
failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL ((?i)LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/:]*={0,2})?\s*$
ignoreregex = authentication failed: Connection lost to authentication server$
[INCLUDES]
before = common.conf
[Init]
journalmatch = _SYSTEMD_UNIT=postfix.service
ignoreregex =
这是监狱:
[postfix-sasl]
enabled = true
filter = postfix-sasl
action = iptables-multiport[name=postfix-sasl, port="smtp,25,465,submission,imap3,imaps,pop3,pop3s"]
sendmail[dest="[email protected]", sender="[email protected]", sendername="Fail2Ban", name="apache"]
logpath = /var/log/syslog
maxretry = 3
这些是允许 sasl 身份验证的两种后缀服务类型:
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
答案1
我没有使用 postfix-sasl 过滤器,但根据我所看到的情况,问题似乎是由_daemon
错误的指令引起的(对于您提供的日志条目),因此 failregex 不会匹配任何内容。
将指令替换_daemon
为以下内容(取自 fail2ban 的当前库存后缀筛选):
_daemon = postfix(-\w+)?/\w+(?:/smtp[ds])?
另外,删除该部分之前的空格[Definition]
,以防复制粘贴时出现拼写错误。
如果你愿意的话可以测试一下正则表达式:
fail2ban-regex <log-file> /etc/fail2ban/filter.d/postfix-sasl.conf
重新加载 fail2ban 并尝试一下。