关于主机名的 postfix 警告的安全 fail2ban 正则表达式

关于主机名的 postfix 警告的安全 fail2ban 正则表达式

我有一个非常我的邮件服务器上安装了少量的 postfix。事实上,我是唯一一个从它那里收到邮件的人,尽管来自几个不同的域和邮箱。

仅昨天就有 811 条警告(52 个唯一主机/IP),遵循以下模式:

[...]warning: hostname <HOSTNAME> does not resolve to address <IP>: Name or service not known

查看主机名,它们似乎都与垃圾邮件有关。至少昨天是这样。

我的问题是,我有什么理由不应该向我的 fail2ban 添加一个正则表达式postfix.local来禁止这些行中报告的 IP 地址?

期望所有客户端主机名都解析为正确的客户端 IP 地址是否公平?

答案1

几年后通过谷歌找到了这个,因为我想要同样的东西。这个错误似乎有点误导,这实际上是由于反向查找失败造成的;至少在我的情况下是这样的:

我看到一名黑客试图强行破解 postfix 登录名(可通过 看到tshark -Y smtp),他们总是使用EHLO User而不是标识主机名打开 SMTP 会话。此警告被发送到我的日志中,因为 postfix 发现PTR从攻击者的源 IP 到指向另一个 IP 的主机名的反向 DNS 查找。因此,错误实际上是说正向查找与反向查找不匹配,并且消息中列出的主机名不是连接的客户端。

我创建了一个新监狱fail2ban来处理这个问题,并通过丢弃所有来自他们的数据包来自动禁止任何此类攻击者。不幸的是,我发现开发者fail2ban文档和网站没有什么帮助,但我设法通过查看现有示例(特别是内置的 postfix jail)来解决这个问题。

以下说明适用于 Debian 10,因此 YMMV。

首先我设置了过滤器/etc/fail2ban/filter.d/postfix-dns.conf

# Fail2Ban filter for postfix hostname resolution failures

[INCLUDES]

before = common.conf

[Definition]

_daemon = postfix(-\w+)?/(?:submission/|smtps/)?smtp[ds]

failregex = ^%(__prefix_line)swarning: hostname \S+ does not resolve to address <HOST>$

ignoreregex =

[Init]

journalmatch = _SYSTEMD_UNIT=postfix.service

并检查正则表达式是否正确:

fail2ban-regex -v 'Jul  8 18:35:32 coral postfix/smtpd[22514]: warning: hostname evil.attacker.com does not resolve to address 1.2.3.4' postfix-dns

该选项-v显示fail2ban-regex表达式提取了哪个 IP <HOST>

设置本地监狱需要创建/etc/fail2ban/jail.d/postfix-dns.conf

[postfix-dns]
logpath = %(postfix_log)s
backend = %(postfix_backend)s

enabled = true

要向上游提交此内容,必须将其放入/etc/fail2ban/jail.confenabled = true行之外,然后用户将

[postfix-dns]
enabled = true

/etc/jail.d/postfix-dns.conf启用监狱。

最后,我创建了/etc/fail2ban/jaild.d/bantime.conf包含以下内容:

[DEFAULT]
bantime = 1day

因为默认的 10 分钟禁令时间对我来说太短了。

相关内容