【问题标题】:how to determine who sent request to my smtp server: mail-client (such as outlook) or other smtp servers如何确定谁向我的 smtp 服务器发送了请求:邮件客户端(例如 Outlook)或其他 smtp 服务器
【发布时间】:2021-01-23 18:00:52
【问题描述】:

我正在开发 smtp 服务器,有一个关于 smtp 握手的问题我不明白。

#1。邮件客户端(outlook)-> 我的 SMTP 服务器 EHLO - 授权 - 从 - 到 - 数据 - 退出 这是 smtp 中继请求。我的 smtp 服务器接受请求并将邮件传递到其他邮件服务器。

#2。其他 SMTP 服务器 -> 我的 SMTP 服务器 EHLO - 从 - 到 - 数据 - 退出 我理解 SMTP 服务器之间的 smtp 流如下。在这种情况下不需要 AUTH 命令,因为 AUTH 命令是用于客户端向 smtp 服务器发送请求中继的身份验证。

#1、#2 是我理解的 SMTP 流程。我很好奇的是我的 smtp 服务器如何确定这个请求是来自客户端还是来自服务器。我想通过它来决定是否执行AUTH命令。

如果我的想法是错误的,请不要笑太多,我请求一个善意的解释。 谢谢。

【问题讨论】:

  • 垃圾邮件发送者会制作任何东西来绕过任何类型的限制。所以他们可以“冒充”服务器,对吧?基本上 smtp 服务器使用反向 dns 解析来检查远程 IP 是否有权发出或中继消息。

标签: smtp protocols smtpclient


【解决方案1】:

通常的现代解决方案是将 SMTP提交与常规 SMTP 传输流量分开,并要求对前者进行身份验证,而不是对后者进行身份验证。

后者应该只接受您正在 MX 处理的域的入站流量,并在端口 25 上运行。

应该阻止普通用户使用端口 25(您的 ISP 或公司防火墙可能已经这样做了)并使用端口 587 提交消息。 (一些遗留系统仍然使用 465,但你不应该。)

在实际操作中,你会在MAIL FROM检查发件人是否是内部的,如果没有经过身份验证则拒绝;否则,检查RCPT TO是否所有收件人都是内部的,并拒绝不是的。

有关 SMTP 提交规范,请参阅 RFC 6409,有关相关安全建议,请参阅 RFC 8314

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 2014-07-16
    • 1970-01-01
    • 2016-02-09
    • 2013-08-20
    • 2016-12-05
    • 2011-04-19
    • 2011-02-07
    • 2013-07-09
    相关资源
    最近更新 更多