![允许任何传出端口发送邮件](https://linux22.com/image/665348/%E5%85%81%E8%AE%B8%E4%BB%BB%E4%BD%95%E4%BC%A0%E5%87%BA%E7%AB%AF%E5%8F%A3%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.png)
我在 centos6.6 服务器上运行了一个小应用程序,它允许用户通过自定义端口发送电子邮件,并且我允许使用任何端口。允许此应用程序使用我的服务器上的任何传出端口进行 smtp 交易是否存在安全风险?
答案1
是的,有。根据您授予用户对内容的控制程度,范围可能从“用户可以恶作剧”到“您是完全开放的中继”。
举一个更偏向“恶作剧”的例子,Redis 有一个相当“宽容”的命令解析器。它会忽略它无法识别的任何命令,然后等待它能识别的命令。这意味着,如果用户发送一封电子邮件,其中一行开头包含字符串“flushall”,并将该电子邮件发送到互联网上的开放 Redis 服务器(是的,人们将他们的 Redis 服务器开放给互联网,不管这听起来多么愚蠢),该 Redis 服务器中的所有数据都将被删除。
当然,恶棍不会有使用您的服务来执行此操作——他们可以直接发送命令——但通过您的服务进行中继,这是掩盖其恶作剧真实来源的好方法。如果您的机器可以访问公共互联网之外的任何内容——例如防火墙后面的内部服务器或通过 VPN(包括笔记本电脑上的 roadwarrior VPN),问题可能会变得更加严重。在这种情况下,只需一点猜测,他们就可能对您的私人基础设施进行侦察或实际攻击。
您提供的电子邮件控制越多,发生这种情况的可能性就越大。因此,如果您允许用户设置标题,甚至更糟的是,控制 SMTP 对话本身,那么有人想出办法利用您的服务做坏事的可能性就会大大增加。
答案2
抱歉,但我认为@wombies 的回答是错误的。
更合乎逻辑的答案(可能意味着)是这样的 -
您可以允许(几乎)任何端口上的 SMTP 通信 - 安全性不是来自端口,而是来自邮件服务器中的访问控制,以确保只有经过身份验证的用户才能登录(通过用户名/密码或 IP 地址)
标准端口通常与特定角色相关联 - 25 通常是邮件服务器到邮件服务器(但您通常可以通过它作为最终用户发送)26 是端口 25 的非官方替代方案,因为一些 ISP 阻止通过端口 25 发送邮件 587 是作为最终用户发送电子邮件的“正确”端口 - 它通常使用 SSL 加密。465 通常用于发送“TLS”加密电子邮件。
我从未听说过 2525,但它可能相当于 26,并且端口号大于 1024,因此在 Linux 下它的权限较低。
您应该避开常见的端口 - 例如 80、3128、8080、443 - 这些端口通常位于代理后面,因此不会使用邮件协议并会被阻止 - 这是坚持使用端口 587 的一个很好的理由 - 这被认为是标准端口。
正确的答案可能是回答发送者想要问的问题,即“从 1024 TCP 以上的任何端口发送都是可以的,因为这模拟了标准行为 - 只要目标端口正确 [即,如果目的地是更广泛的互联网,则为端口 25]。也就是说,除非您正在编写自己的堆栈或邮件服务器,否则这可能不太相关。