可以在Postfix中实现一个基于IP地址的 SMTP AUTH 限制吗?
场景:我正在运行一个Postfix邮件服务器,接收来自所有Internet的邮件。 但是服务器不仅收到邮件,还允许其authentication用户向内部用户或外部用户发送邮件。 到目前为止没有问题。
不幸的是,在阅读日志文件时,我总是感到有些害怕。 世界各地的IP地址每天都有数千次不成功的非法login尝试。
但实际上,合法的发送者主机只来自less数几个已知的IP地址范围。 所以我知道只有一个人(例如)
甚至可能是一个合法的发送者。 (我知道上面例子中给出的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。
您想要使用否定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