piw*_*iwi 5 debian smtp postfix fail2ban
我有一个 Fail2Ban 监狱,用于监视对我的 Postfix SMTP 服务器失败的 SASL 身份验证。发生这种情况时,/var/log/mail.log
包含以下三行:
postfix/smtpd[32591]: connect from unknown[x.x.x.x]
postfix/smtpd[32591]: warning: unknown[x.x.x.x]: SASL LOGIN authentication failed: authentication failure
postfix/smtpd[32591]: disconnect from unknown[x.x.x.x]
Run Code Online (Sandbox Code Playgroud)
并且Fail2Ban会过滤警告行:如果找到,则考虑禁止该IP。
最近,我更改了 Postfix,以便仅通过 TLS 提供 AUTH(使用选项smtpd_tls_auth_only
)。结果是,当有人尝试在不使用 TLS 的情况下进行身份验证时,不再生成警告行:
postfix/smtpd[22469]: connect from unknown[x.x.x.x]
postfix/smtpd[22469]: disconnect from unknown[x.x.x.x]
Run Code Online (Sandbox Code Playgroud)
这意味着 Fail2Ban 无法再监控所有 SASL 身份验证尝试。我怎样才能做到这一点?
我提出的一个解决方案是使 SMTP 更加详细(附加-v
到smtpd
in /etc/postfix/master.cf
)并解析适当的行,但我的问题是该-v
选项使日志过于详细:
postfix/smtpd[23185]: connect from unknown[x.x.x.x]
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? 127.0.0.0/8
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::ffff:127.0.0.0]/104
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::1]/128
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: send attr ident = smtp:x.x.x.x
postfix/smtpd[23185]: > unknown[x.x.x.x]: 220 example.org ESMTP Postfix (Debian/GNU)
postfix/smtpd[23185]: < unknown[x.x.x.x]: EHLO User
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-example.org
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-PIPELINING
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-SIZE 10240000
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-VRFY
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-ETRN
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-STARTTLS
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-ENHANCEDSTATUSCODES
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-8BITMIME
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250 DSN
postfix/smtpd[23185]: < unknown[x.x.x.x]: RSET
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250 2.0.0 Ok
postfix/smtpd[23185]: < unknown[x.x.x.x]: AUTH LOGIN
postfix/smtpd[23185]: > unknown[x.x.x.x]: 503 5.5.1 Error: authentication not enabled
postfix/smtpd[23185]: < unknown[x.x.x.x]: QUIT
postfix/smtpd[23185]: > unknown[x.x.x.x]: 221 2.0.0 Bye
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? 127.0.0.0/8
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::ffff:127.0.0.0]/104
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::1]/128
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: send attr ident = smtp:x.x.x.x
postfix/smtpd[23185]: disconnect from unknown[x.x.x.x]
Run Code Online (Sandbox Code Playgroud)
首先,我只需要过滤该authentication not enabled
行。是否可以使 SMTP 服务报告身份验证请求而不添加整个详细消息?理想情况下我的mail.log
文件只包含:
postfix/smtpd[32591]: connect from unknown[x.x.x.x]
postfix/smtpd[32591]: warning: unknown[x.x.x.x]: authentication not enabled
postfix/smtpd[32591]: disconnect from unknown[x.x.x.x]
Run Code Online (Sandbox Code Playgroud)
这有可能吗?如果是,怎么办?谢谢,
你的添加想法-v
帮助smtpd
我解决了这个问题。我在Debian上。
首先我创建了/etc/fail2ban/jail.local
:
[postfix]
enabled = true
logpath = /var/log/mail.log
bantime = 86400
findtime = 86400
maxretry = 2
Run Code Online (Sandbox Code Playgroud)
这表明24 小时内最多尝试fail2ban
观看2 次,这也会导致 24 小时禁止。/var/log/mail.log
然后我复制/etc/fail2ban/filter.d/postfix.conf
到/etc/fail2ban/filter.d/postfix.local
,并添加了这一行:
failregex = ^%(__prefix_line)s> \S+\[<HOST>\]: 503 5\.5\.1 .*$
Run Code Online (Sandbox Code Playgroud)
这将触发:
postfix/smtpd[23185]: > unknown[x.x.x.x]: 503 5.5.1 Error: authentication not enabled
Run Code Online (Sandbox Code Playgroud)
更新(2021 年 10 月):
以上与fail2ban 0.9.6 配合得很好。然而,fail2ban 0.10.2 稍微改变了 postfix.conf 的布局。
要再次修复,请将新内容复制/etc/fail2ban/filter.d/postfix.conf
到/etc/fail2ban/filter.d/postfix.local
. 在此.local
文件中,编辑正常部分如下:
mdpr-normal = (?:NOQUEUE: reject:|improper command pipelining after \S+|>)
mdre-normal=^RCPT from [^[]*\[<HOST>\]%(_port)s: 55[04] 5\.7\.1\s
^RCPT from [^[]*\[<HOST>\]%(_port)s: 45[04] 4\.7\.1 (?:Service unavailable\b|Client host rejected: cannot find your (reverse )?hostname\b)
^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.7\.1 (<[^>]*>)?: Helo command rejected: Host not found\b
^EHLO from [^[]*\[<HOST>\]%(_port)s: 504 5\.5\.2 (<[^>]*>)?: Helo command rejected: need fully-qualified hostname\b
^VRFY from [^[]*\[<HOST>\]%(_port)s: 550 5\.1\.1\s
^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.1\.8 (<[^>]*>)?: Sender address rejected: Domain not found\b
^from [^[]*\[<HOST>\]%(_port)s:?
^[^[]*\[<HOST>\]: 503 5\.5\.1 Error: authentication not enabled\b
Run Code Online (Sandbox Code Playgroud)
请注意添加|>
to mdpr-normal
。
在 中/etc/fail2ban/jail.local
,添加mode = normal
到该[postfix]
部分。
并且不要忘记添加-v
到以下smtp
指令中/etc/postfix/master.cf
:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd -v
Run Code Online (Sandbox Code Playgroud)
重新启动您的服务,您应该就可以开始了。
归档时间: |
|
查看次数: |
5836 次 |
最近记录: |