这个问题在 SF 上没有得到很好的解决,但正如我在那里所说的那样,我设法找到了很多密切相关的信息,但没有真正解决我的问题的答案。
我正在扩展我的家庭实验室服务器,并决定使用一个小型公共托管服务器作为简单代理。我的家庭实验室将运行 Mailcow,我想仅使用端口 587用于安全的 SMTP 提交,但我想确保我的域或 IP 没有出现损坏、关闭或以某种方式异常 - 可传递性扫描或黑名单/灰名单爬虫或电子邮件客户端/等等。
因此,我将通过 IPtables 明确禁止(拒绝)端口 25,以防止因欺诈性访问尝试而耗尽资源,但我不想看起来服务器没有可用的 SMTP - 而是端口 587 上需要安全的 SMTP。
有没有办法向发出请求的客户端/扫描仪/MTS 服务器表明 SMTP 需要端口 587 上的 TLS,这是否应该通过重定向来处理?我不想拒绝重定向 25 上的恶意或机器人流量(所有到 25 的流量都被视为可疑)到 587,我想拒绝 - 但以一种传达“无法访问,抱歉”以外的其他信息的方式 - 是否有可以与拒绝一起解释它的状态,例如 HTTP 错误代码或类似的东西?
我希望有某种 IPtables 配置魔法或某种可以自然地集成在第 2 层或第 3 层的东西,也许是一个简单的 TCP 状态服务,只处理状态拒绝?所以我可以让 IPtables 中的端口保持关闭状态,但不会在 SMTP 上显示为关闭状态。
我不确定这是否有意义或是否有必要,但谷歌显然不知道我在问什么,本质上我希望通过公共 DNS MX 记录进行正常的外部访问,而不会被任何可能的影子禁令或声誉管理列表视为可疑或损坏,并可能促使一些(主要是基于 Web 的)客户端或 MTS 服务器标记或更糟的是丢弃往返于我的域/IP 的流量,或者让客户端认为它根本无法进行 SMTP 提交 - 等等。
我疯了吗?或者有办法做到这一点/这是一个明智的担忧吗?提前谢谢。
编辑:
刚刚偶然发现了这个:
reject-with icmp-host-prohibited
类似这样但拒绝 smtp-port-587(作为概念示例) - 可能有任何类似的东西吗?
答案1
我正在扩展我的家庭实验室服务器,并决定使用一个小型公共托管服务器作为简单代理。我的家庭实验室将运行 Mailcow,我只想使用端口 587 进行安全 SMTP 提交,但我想确保我的域或 IP 不会出现故障、关闭或某种异常(比如传递率扫描或黑名单/灰名单爬虫或电子邮件客户端等)。
如果你使用 MX 代理,并且家庭实验室主机本身没有出现在 DNS 中,那么你在后者中做什么都无关紧要,因为家庭实验室主机并不“代表”你的域名– 只有代理或 DNS MX 记录中出现的内容才是相关的。
您的家庭实验室和代理之间的通信几乎可以使用任何东西,无论是带有 TLS 的 SMTP,还是明文 SMTP,还是拨号 UUCP;这些都是内部事务,超出了“可传递性扫描”所知的范围。
我不想看起来服务器没有可用的 SMTP - 而是端口 587 上需要安全的 SMTP。
这对于 TLS 来说完全没用,因为两个端口都可以工作完全相同在设置 TLS 的方式上。它们都接受稍后通过“STARTTLS”命令升级的明文 SMTP – 因此,如果您的目标只是为了启用 STARTTLS 使用而重定向到 587,您已经可以在端口 25 上启用相同的 STARTTLS。
(一般来说,没有必要明确地将客户端从端口 A 重定向到端口 B,在端口 B 中他们将获得完全相同的服务,您还不如直接在端口 A 上提供服务。)
事实上,大多数 SMTP MX 服务器已经在端口 25 上支持 STARTTLS,方式与端口 587 上完全相同(Gmail 在“鼓励”域名摆脱现在显示的不支持 TLS 的 MX 服务器的红色锁定图标方面做得很好)。
(25 和 587 之间的区别并不在于 TLS,而在于身份验证要求,即分离的目的是端口 587 应该需要用户身份验证,并且严格用于注入出站消息(即允许中继),而端口 25 不提供身份验证,应该严格用于入站消息。)
大多数域名通常不会要求目前还没有在端口 25 上启用 TLS,但这是因为他们仍然希望接受来自不支持 TLS 的 MX 客户端的消息,而不是因为端口 25 会使其本质上变得不可能。但是,您可以轻松地在自己的服务器上强制执行此要求,例如在 Postfix 中,您只需复制 master.cf 中的“smtpd_tls_security_level”设置即可。
同样,大多数域名也不需要 TLS 进行出站交付 - 因此,即使您强制执行 TLS,您仍然可能被假装 TLS 设置不良的服务器冒充。如果您想告诉其他域名(至少是那些运行现代设置的域名),在向您的 MX 服务器(仍在端口 25 上)交付时,他们应该期望 TLS 成功,您可以设置转运站为了这个目的 – 它有点像 HTTP 的 HSTS。
最后,如果 TLS(或端口)要求适用于您的内部的homelab 到代理通信,则不需要重定向 - 您可以直接在相关配置中指定端口号,例如在 homelab 的“智能主机地址”中。
因此,我将通过 IPtables 明确禁止(拒绝)端口 25,以防止因欺诈性访问尝试而导致资源耗尽,但我不想看起来服务器没有可用的 SMTP
为了从其他域名进行传递,这恰恰意味着您的服务器没有可用的 SMTP。
如上所述,25 和 587 之间的划分与 TLS 无关,而与不同的身份验证和中继策略有关。端口 465 和 587 专门用于经过身份验证的客户端提交消息,将不会被使用通过外部邮件交换服务器。
您无法指示邮件交换服务器在与您交谈时应使用不同的端口;当他们想通过 MX 记录向您发送消息时,要么通过端口 25,要么什么都不用做。
是否有可以与拒绝一起解释的状态,例如 HTTP 错误代码或类似的东西?
对于 SMTP – 有(实际上 SMTP 状态代码是起源HTTP 代码),但没有一个会说“您需要在不同的端口上使用”。
(再次强调,因为这在功能上是无用的;端口号并未定义您可以在其上执行的操作。)
如果您通过 iptables 阻止端口,使客户端根本无法建立连接,则不会出现将客户端重定向到另一个目的地的 ICMP 错误代码。(现有的“重定向”数据包有不同的用途,只能指向另一个网关。)
也许是一个仅处理状态拒绝的简单 TCP 状态服务?所以我可以在 IPtables 中将该端口保持关闭状态,但不会在 SMTP 上显示为关闭状态。
不,这确实没有任何意义。如果端口“在 iptables 中关闭”,那么字面意思是任何 TCP 客户端都无法连接到该端口上的任何服务,无论是真正的 SMTP 服务还是仅仅是“状态服务”,因此将要SMTP 客户端似乎已关闭。