我运行一个通过smtp.mailgun.org发送邮件的服务器。 我locking了服务器,只允许端口587上的传出SMTP到smtp.mailgun.org。
该域的IP地址最近发生了变化,因此我的系统停止发送电子邮件。 作为试图找出停止工作的一部分,我开始意识到在iptables规则中使用域名的缺点以及iptables在运行规则时执行查找并在规则时保存IP地址的事实被创build,因此域中的IP地址更改不会反映在iptables中。
他们说,从mailgun的状态页面
我们的基础设施升级将导致这些IP地址在未来更频繁的更改,客户应确保在连接到Mailgun服务时只使用我们支持的主机名。
我没有通知IP地址的变化,我不知道我是否会被通知未来的变化。
pipe理这种情况的最好方法是什么? 我应该编写一个脚本,定期检查smtp.mailgun.org的IP地址,并在更改时更新iptables吗? (我知道这样做的安全风险,但也许值得一提)。
快速查看smtp.mailgun.org的当前IP地址,发现它们都在Amazon AWS上。 你应该期望这些变化频繁,所以在防火墙上编写它们的硬编码就变得棘手。 即使使用dynamic脚本,您也可能会丢失外发邮件,因为IP地址可能会更改,您会在下次运行脚本之前尝试发送邮件。 这被称为竞赛条件。 除了重新devise,你可以做的事情不多,这就是我所推荐的…
至于出口防火墙,我真的不太关心到端口587的输出stream量。所有这些stream量都必须通过远程邮件服务器的authentication,所以对我来说这不是一个重要的问题。 对于邮件,我担心到端口25的传出stream量; 如果你使用的是像mailgun这样的服务,那么不应该有这样的stream量,如果有的话,这几乎肯定是因为你被入侵了。
你可以考虑的一些事情是:
允许任何传出的TCPstream量到目标端口587.如上所述,这是相当低的风险,但您可以进一步降低风险…
在一个唯一的用户ID下运行您的Web应用程序,然后允许任何传出的TCP通信到目标端口587只有该用户ID。 (使用-m owner匹配。)通过规定只有web应用程序的用户可以发起这样的通信,这进一步降低了风险。 请注意,如果你这样做,其他用户将无法进行此传出连接,甚至不是根(但根可以改变防火墙规则,使之成为可能)。
通过运行configuration为使用mailgun作为智能主机的本地邮件服务器,中继它接收的所有邮件(因为它只在本地监听,这应该只来自您的Web应用程序),可以使您的设置更加健壮 。 然后,只允许邮件服务器的用户ID与上述端口587进行传出连接。 这为您提供了不会丢失邮件的额外好处,因为在您的Web应用程序尝试发送邮件时,mailgun无法访问。 如果mailgun无法访问,无论是由于networking问题还是由于防火墙configuration错误或其他原因,您的Web应用程序将logging错误并丢失邮件,但本地邮件服务器会在恢复服务时对邮件进行排队并发送邮件。 然后,将该Web应用程序configuration为在本地交付。