我正在寻找一种方法来禁用所有人的 Qmail 中继,但允许一组特定的主机这样做。这些主机都使用相同的标识 rDNS 条目。
在 Exchange 2003、Postfix、Exim 和 cPanel 中,这可以很容易地实现。但是,使用 Qmail 实现此目的的唯一方法是基于 IP 来实现。
然而 IP 往往会发生变化。这些变化可能随时发生,不可能让所有服务器都更新到新的 IP。
运行一个脚本来解析主机名并相应地将其列入白名单是我的最后选择,但这并不是万无一失的。
有人知道这是否可能,如果可能,如何实现?
谢谢!
答案1
如果您以 Life With qmail 的方式运行 qmail,使用 tcpserver 生成 qmail-smtp 进程,则可以在 /etc/tcp.smtp 文件中添加一条规则,告诉它根据连接主机的 rDNS 接受连接:
=rdns.of.host:允许,RELAYCLIENT=""
'=' 告诉 tcpserver 您想要检查服务器的名称,而不是通常的 IP 地址。如果您的客户端使用唯一的主机名进行解析,但域是相同的,您可以仅指定域部分,tcpserver 将依次将解析的名称的后缀与您定义的规则进行比较。
例如,如果客户端解析为 client1.example.com 并且您有一条规则 '=example.com:allow,RELAYCLIENT=""' 那么 tcpserver 将首先检查 client1.example.com,但它不匹配,然后它将尝试匹配并允许中继的 example.com。
这是 tcprules 的文档以及它们的解释方法。
答案2
你应该接受 David Smith 的答案,因为它完全正确。不过我想指出一些补充。
首先:您写道“这些主机都使用相同的标识 rDNS 条目”。这确实是一种糟糕的做法,因为您的反向查找不是持续的在这种情况下:IP 地址的反向查找将不是必然会解析回相关的 IP,使得反向查找几乎毫无用处,无论从意义上还是从实践上来说。
第二:我真的很想知道所描述的情况,即允许中继的用户的 IP 地址经常更改,但每个新 IP 都会得到与您的中继规则相匹配的反向查找。如果有“某种”技术可以自动为相关 IP 设置 PTR 记录,那么应该可以使用相同的技术自动将它们添加到允许的中继器列表中。
无论如何,您最好使用基于 IP 的中继,而不是依赖主机名。原因是任何人控制某些 IP 地址空间的 PTR 记录的人可以轻松伪造与您的中继规则相匹配的主机名,并提供伪造的记录。这意味着任何人佯装被允许中继将要被允许中继。
如果你在以下环境中运行 qmailtcp服务器您可以通过设置-P
选项(偏执模式)来解决此问题。如果查找结果中的主机名无法解析回连接 IP,则会自动忽略 IP 地址的反向查找。请注意,此选项(“偏执模式”)离开默认情况下 - 并且它不会与您的“所有 IP 地址都具有相同的反向查找”一起工作。正如我所说,无论如何,这都是不好的做法,打破 的tcpserver
偏执模式就是一个很好的例子。