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

可以在Postfix中实现一个基于IP地址的 SMTP AUTH 限制吗?

场景:我正在运行一个Postfix邮件服务器,接收来自所有Internet的邮件。 但是服务器不仅收到邮件,还允许其authentication用户向内部用户或外部用户发送邮件。 到目前为止没有问题。

不幸的是,在阅读日志文件时,我总是感到有些害怕。 世界各地的IP地址每天都有数千次不成功的非法login尝试。

但实际上,合法的发送者主机只来自less数几个已知的IP地址范围。 所以我知道只有一个人(例如)

  • 134.500.0.0/16
  • 134.700.42.0/24
  • 134.800.133.7

甚至可能是一个合法的发送者。 (我知道上面例子中给出的IP地址格式不正确,我只是不想揭示真实的IP地址)。

所以如果发件人来自不同的IP范围,他肯定没有我的用户,因此不允许任何传递。

即使他为SMTP AUTH计算出有效的用户名/密码组合,我也不希望这些子网之外的人能够进行中继。 如果他来自非白名单的IP地址范围,则他不得发送。 在任何情况下。 所以permit_sasl_authenticated是不够的。 只要来自“某些”国家的某个人(我不想明确指出他们的名字)能够以被盗/强迫/间谍身份login,就不够安全。 :-)(想想社交工程,窃取账户数据的木马键盘logging程序,轻松猜测密码的头昏眼花的用户等等)

=>那么有可能为SMTP AUTHlogin尝试实施一个IP地址限制? (收到的邮件一定不能被这个影响,因为我有这个policyd-weight等等。这里只是关于传出/被转发的邮件。)

解决scheme将无法正常工作

  • iptables防火墙限制。 由于我希望能够通过端口25接收来自互联网的邮件,因此我无法对传输层级实施限制。 – 此外,我希望合法用户能够连接到端口25,以接纳新的传出邮件到服务器。 所以只允许通过子网限制的神秘TCP端口,例如24343发送邮件,也是没有解决scheme。
  • permit_mynetworks :并非来自已知IP范围的每个人都是合法用户。 所以我不能允许所有人发送。 需要SMTP AUTHlogin才能确定某人是否是授权用户。

把你的SMTP AUTH放在另一个端口如587,并使用iptables来限制访问端口? 587不是一个隐藏的端口,它是RFC定义的邮件提交端口。 邮寄给你25,邮件通过你需要超过587。

http://tools.ietf.org/html/rfc6409

您想要使用否定forms的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感兴趣。

我会build议你使用像OSSEC这样的HIDS来临时阻止试图login的IP地址。你也可以在OSSEC中添加一个规则,将你的可信networking从这个规则中排除,这样经过几次尝试后合法用户不会被阻塞。

我build议,因为我不认为Postfix实际上有一种方法来补充my_networks和SASL。

世界各地的IP地址每天都有数千次不成功的非法login尝试。

安装fail2ban并调整现有的或创build一个新的filter来捕获这些。 我用:

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