MailABC是科普电子邮件知识的个人Blog,接受交换友链。您可以关注公众号mailabc留言,或邮件联系feedback@mailabc.cn 。

SMTP协议透传IP方法:通过扩展指令XCLIENT实现IP透传

邮件协议 小胡子大魔王 3个月前 (08-16) 147次浏览 0个评论
邮件从源系统发送到目标系统时,通常通过SMTP协议进行传输。然而,在某些特殊的网络环境下,目标系统可能无法获取源系统的出口IP地址。这种情况会带来诸多安全风险,例如无法准确溯源,反垃圾邮件功能受限等。本文将重点介绍如何通过SMTP协议中的XCLIENT指令来传递IP信息,以解决这些问题。当然,除了本文提到的方法外,还有其他方法获取源系统IP,其他文章我们会做介绍。

XCLIENT指令语法

注意:这里的描述来自Postfix的官方文档,不同邮件服务器对XCLIENT支持是不同的。

xclient-command = XCLIENT 1*( SP attribute-name"="attribute-value )
attribute-name = ( NAME | ADDR | PORT | PROTO | HELO | LOGIN | DESTADDR | DESTPORT )
attribute-value = xtext
  • NAME属性:指定远程SMTP客户端的主机名(而不是SMTP客户端地址),如果由于永久错误导致客户端主机名查找失败,则为[UNAVAILABLE],如果查找错误条件是瞬时的,则为[TEMPUNAVAIL]。
  • ADDR属性:指定远程SMTP客户端的数值IPv4网络地址、以IPV6:为前缀的IPv6地址,或者在地址信息不可用时为[UNAVAILABLE]。地址信息不用方括号括起来。
  • PORT属性:指定远程SMTP客户端的TCP端口号(十进制数),或者在信息不可用时为[UNAVAILABLE]。
  • PROTO属性:指定SMTP或ESMTP。
  • DESTADDR属性:指定本地SMTP服务器的数值IPv4网络地址、以IPV6:为前缀的IPv6地址,或者在地址信息不可用时为[UNAVAILABLE]。地址信息不用方括号括起来。
  • DESTPORT属性:指定本地SMTP服务器的TCP端口号(十进制数),或者在信息不可用时为[UNAVAILABLE]。
  • HELO属性:指定SMTP HELO参数值,或者在信息不可用时为[UNAVAILABLE]。
  • LOGIN属性:指定SASL登录名,或者在信息不可用时为[UNAVAILABLE]。

注意:语法上有效的NAME和HELO属性值元素可以长达255个字符。客户端不得发送超过SMTP命令512个字符限制的XCLIENT命令。为避免超出限制,客户端应在多个XCLIENT命令中发送信息;例如,在HELO和PROTO之后最后发送NAME和ADDR。一旦发送ADDR,客户端通常不再被授权发送XCLIENT命令。

参考来源:https://www.postfix.org/XCLIENT_README.html

服务端响应码

返回代码 含义
220 success
421 unable to proceed, disconnecting
501 bad command parameter syntax
503 mail transaction in progress
550 insufficient authorization
other connection rejected by connection-level access decision

XCLIENT指令示例

220 server.example.com ESMTP Postfix
EHLO client.example.com
250-server.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XCLIENT NAME ADDR PROTO HELO
250 8BITMIME
XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2
220 server.example.com ESMTP Postfix
EHLO spike.porcupine.org
250-server.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XCLIENT NAME ADDR PROTO HELO
250 8BITMIME
MAIL FROM:<wietse@porcupine.org>
250 Ok
RCPT TO:<user@example.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
. . .message content. . .
.
250 Ok: queued as 763402AAE6
QUIT
221 Bye

示例中 XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2  这是常用的方法。

支持XCLIENT的邮件系统

支持XCLIENT扩展指令的邮件系统包括Postfix、Exim、Coremail等,在邮件系统端也需要做相关设置。如果需要了解这部分信息,可以关注公众号mailabc获取。


未标注来源的文章均为原创作品,版权所有,转载请注明出处。非原创文章均已标注来源,如有侵权请告知。 如您喜欢本站,可以收藏加关注(扫码关注右上角微信公众号mailabc)。
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址