Postfix:仅允许来自指定 IP 地址范围的 SMTP AUTH

Postfix:仅允许来自指定 IP 地址范围的 SMTP AUTH

可以实现基于 IP 地址的限制为了Postfix 中的 SMTP AUTH

场景:我正在运行一个 Postfix 邮件服务器,该服务器接收来自互联网各地的邮件。但该服务器不仅接收邮件,还允许经过身份验证的用户向内部用户或外部用户发送邮件。到目前为止没有问题。

不幸的是,每次读日志文件我都会有点害怕。每天有成千上万个来自世界各地的 IP 地址的非法登录尝试。

但实际上合法的发送方主机仅来自少数已知的 IP 地址范围。所以我知道仅有的某人(例如)

  • 134.500.0.0/16
  • 134.700.42.0/24
  • 134.800.133.7

可能甚至根本不是合法的发件人。(我知道上面示例中给出的 IP 地址格式不正确。我只是不想揭露真实的 IP 地址。)

因此,如果发送者来自不同的 IP 范围,那么他肯定不是我的用户,因此不允许中继任何内容。

我不希望这些子网之外的人能够中继甚至如果他找到了有效的 SMTP AUTH 用户名/密码组合。如果他来自非白名单 IP 地址范围,他一定不能发送。在任何情况下都不能。仅此而已permit_sasl_authenticated是不够的。只要有人来自“肯定”国家(我不想明确指出它们的名字......)能够使用被盗/暴力破解/监视的凭证登录,这不够安全。:-)(想想社会工程学,窃取帐户数据的木马键盘记录器,使用容易猜到的密码的头脑不清醒的用户等等)

=> 那么,是否可以对 SMTP AUTH 登录尝试实施 IP 地址限制?(接收传入邮件不得受此影响。为此,我有policyd-weight等等。这里仅涉及传出/要中继的邮件。)

解决方案不起作用

  • iptables防火墙限制。由于我希望能够在端口 25 上接收来自 Internet 各地的邮件,因此无法在传输层级别实施限制。- 此外,我希望合法用户能够连接到端口 25,以便允许新的外发邮件进入服务器。因此,仅允许通过子网受限的神秘 TCP 端口(例如 24343)发送邮件也不是解决方案。
  • permit_mynetworks:并非所有来自已知 IP 范围的用户都是合法用户。因此,我不能允许那里的每个人都发送邮件。SMTP AUTH 登录对于确定某人是否是授权用户是必需的。

答案1

将您的 SMTP AUTH 放在另一个端口(例如 587)上,并使用 iptables 限制对该端口的访问,怎么样?587 不是隐藏端口,而是 RFC 定义的邮件提交端口。发送给您的邮件将于 25 日到达,通过您的邮件需要经过 587。

https://www.rfc-editor.org/rfc/rfc6409

答案2

这个问题比较老了,但是如果你和我一样,可以从谷歌来这里 - 这可以通过smtpd_discard_ehlo_keyword_address_maps特征。

您只需添加参数

smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/discard_ehlo_keyword 

到您的 Postfixmain.cf配置(通常位于/etc/postfix/main.cf),其中/etc/postfix/discard_ehlo_keyword是 Postfix 查找表的路径。

接下来让我们通过例如创建一个文件sudo nano /etc/postfix/discard_ehlo_keyword并在其中放入内容:

# this is your trusted ip ranges you want to send AUTH:
134.500.0.0/16      silent-discard 
134.700.42.0/24     silent-discard
# and this is another world you don't want to send AUTH to:
0.0.0.0/0           silent-discard, auth 
::/0                silent-discard, auth

保存运行后sudo postmap /etc/postfix/discard_ehlo_keyword生成 Postfix 查找表(每次编辑后都应执行此操作/etc/postfix/discard_ehlo_keyword)。

别忘了重新启动 Postfix!

答案3

你想使用否定形式smtpd_sasl_exceptions_networks

smtpd_sasl_exceptions_networks = !134.500.0.0/16 !134.700.42.0/24 !134.800.133.7

你也可能对此有兴趣smtpd_client_connection_rate_limit

答案4

每天都有来自世界各地的 IP 地址进行数千次不成功的非法登录尝试。

安装 fail2ban 并调整现有过滤器或创建新过滤器来捕获这些内容。我使用:

failregex =\[<HOST>\]\: SASL LOGIN authentication failed

相关内容