iptables 仅允许使用 start tls 的 smtp 连接

iptables 仅允许使用 start tls 的 smtp 连接

是否可以通过 iptables 来阻止/中止未加密的 smtp 连接?

有效地拒绝所有没有执行启动 tls 的连接。

答案1

这不可避免地很棘手。TLS 的本质是必须建立与 MTA 的纯文本连接TLS 可以协商,因此 iptables(在传输层运行)设计不良,无法影响应用层的问题。

您可以编写另一个目标模块并通过该模块引导您的流量,但除非您是网络大神,否则这对您来说可能并不比对我来说更可行。而且我绝对不知道该怎么做。

结果是,在应用程序内部执行应用层内容要容易得多。你没有说你使用的是哪种 MTA,但我怀疑大多数足够聪明可以执行 TLS 的 MTA 都足够聪明可以强制执行它。

我使用 sendmail。各家提供商有一篇关于强制使用 TLS 的文章,地址如下:http://www.brandonhutchinson.com/Using_TLS_with_Sendmail.html,它将我引导到 Access 数据库条目

TLS_Clt:communication_partner_MTA                           PERM+VERIFY:112

这需要特定的通信伙伴(可能通过 IP 地址标识)使用至少 112 位长度的密钥进行身份验证,并拥有正确签名的证书。sendmail 配置页面位于http://www.sendmail.org/documentation/configurationReadme在 ANTI-SPAM CONFIGURATION CONTROL 部分中,指出涉及 IPv4 地址的访问数据库条目可以采用单个八位字节的形式,然后应用于以该八位字节开头的所有地址。所以我推测,我强调这只是猜测,sendmail 允许我拥有一系列条目

TLS_Clt:1       PERM:112
TLS_Clt:2       PERM:112
TLS_Clt:3       PERM:112
....
TLS_Clt:223       PERM:112

强制所有 IP 地址加密(但不是可验证签名的证书;自签名 TLS 证书非常常见,我倾向于不禁止它们)。我还会不是有一个条目TLS_Clt:127,因为 localhost 可能不应该受到如此限制。

我再说一遍,我没有测试过上述任何一项,如果您的 MTA 不是 sendmail,上述内容不会特别有帮助;但我想表明我的 MTA(至少)似乎有钩子可以做您想做的事情。祝您调查顺利。

答案2

Iptables 主要用于过滤网络数据包的元数据,例如 IP 标头、TCP 选项等。TLS 在应用程序级别处理:您需要观察 TCP 流内部发生的情况。

您可以使用扩展检查数据包的内容string,如果内核过滤器不够用,您可以编写用户空间过滤器。但这会非常困难:例如,TCP 流可以以任意方式分解为数据包,并且 TCP 数据包可能会无序接收...您必须处理所有这些问题(重复内核的工作)。

您在这里寻找的是转发 TLS 连接并阻止非 TLS 连接的 SMTP 代理。Iptable 的贡献只是确保 SMTP 流量确实通过代理。

相关内容