1. 什么样的网络架构涉及IP透传?
在邮件系统前端部署了负载均衡服务器(如F5 BIG-IP、LVS、HAProxy等)或反向代理服务器(如Nginx),且这些设备未配置为直连模式或透明转发模式时,会导致邮件系统无法直接获取到客户端访问的原始IP地址。为了解决这个问题,确保邮件系统能够准确记录并识别访问者的真实IP,则需要实施IP透传策略。IP透传技术允许这些中间设备在转发请求时,将原始IP信息以特定方式传递给后端服务(如邮件系统),从而保持数据请求的透明性和可追溯性。
负载均衡双臂组网示例
2. 邮件系统IP透传能解决哪些问题?
邮件系统IP透传主要基于如下几种场景考虑:
- 邮件反垃圾:通过 SMTP 接收外部邮件时,对发件方的 IP 地址进行检查(如发信频率、RBL、PTR、SPF 等检查)是反垃圾邮件的重要环节。如果无法获取发信服务器的真实 IP 地址,就无法准确评估发件方的行为,进而影响垃圾邮件的防范效果。
- 用户访问行为溯源:用户通过HTTP、SMTP、POP3、IMAP等协议访问邮件系统时,如果无法获取终端用户的真实IP地址,将无法进行用户行为溯源。
- 用户访问限制:如果无法获取终端用户的真实IP地址,也无法配置基于IP的相关限制策略(如基于IP的防暴力破解机制、基于IP的发信频率限制等)。
3. IP透传的方案有哪些?
OSI 七层模型
图片来源:https://haicoder.net/http/http-osi.html
3.1 保持网络层(L3)源IP不变
这里根据负载均衡连接次数不同,可以划分两种基本场景:
- 一次连接模式:负载均衡器对数据包仅做转发,而不对后端重新发起三次握手,如LVS
- 二次连接模式:和一次连接相对应,在tcp转发时候,对后端重新进行了三次握手。如HAPROXY的透明模式、F5 BIG-IP的透明转发模式等。
3.2 在传输层(L4)数据里添加源IP信息
根据实现方式不同,大致分两种场景:
- 在4层的option字段里增加源IP信息:比如tcp option、udp option
- 在4层末尾和7层开头之间,增加proxy protocol信息。适用于SMTP、POP3、IMAP、HTTP等协议。可参考本站文章《邮件系统实现IP透传:Proxy Protocol方案(适用于SMTP/POP3/IMAP/HTTP协议)》
3.3 在应用层(L7)数据里添加源IP信息
根据实现方式不同,大致分两种场景:
- 协议自带:例如HTTP的X-FORWARD-FOR。针对这部分内容,后续会有文章专门介绍。
- 业务程序自行实现:如SMTP协议的XCLIENT扩展,可以参考本站文章《SMTP协议透传IP方法:通过扩展指令XCLIENT实现IP透传》
参考来源:https://developer.aliyun.com/article/672225