AD发布coremail邮箱虚拟服务透传源IP
问题描述:
客户发布邮箱虚拟服务,业务异常,内外网都有用户访问域名访问邮箱业务,虚拟服务要开SNAT策略,导致邮箱后端源IP只能看到虚拟服务地址,后端会封禁同一IP多次发邮件,从而业务异常
AD设备原始解决方案:
1、使用xff透传源IP
这个只能解决https业务端口透传问题,无法解决25 993 995等邮件端口透传源IP问题,后端还是无法识别源IP,业务无法恢复
2、tcp option字段
使用ipro插入option字段携带源IP,邮箱那段不支持,无法识别
最终解决方案:
使用插入ipro脚本,用PROXY协议携带一段实体头部,携带IP的方式
以下是脚本内容,复制粘贴txt,重命名后缀.lua格式从应用负载,ipro,导入
local proxyheader = nil
event CLIENT_ACCEPT {
-- 1. 获取客户端IP、端口和本地IP、端口
local remote_addr = TCP.remoteaddr()
local local_addr = TCP.localaddr()
local remote_port = TCP.remoteport()
local local_port = TCP.localport()
-- 2. 判断IP类型,确定是TCP4(IPv4)还是TCP6(IPv6)
local proxy_version = "4" -- 默认IPv4
if string.find(remote_addr, ":") then -- 包含冒号即为IPv6(覆盖所有IPv6格式)
proxy_version = "6"
end
-- 3. 拼接PROXY协议头(修复原脚本末尾多余空格的问题,保留原拼接方式)
proxyheader = 'PROXY TCP'..proxy_version..' '..remote_addr..' '..local_addr..' '..remote_port..' '..local_port..'\r\n'
-- 4. 释放连接(保留原逻辑)
TCP.release(0)
}
event SERVER_CONNECTED {
-- 增加非空判断,避免nil值导致的异常(原脚本无此处理,新增优化)
if proxyheader ~= nil then
TCP.respond(proxyheader)
end
}
再单独发布https的虚拟服务使用xff,保障页面可以正常访问,访问不了,邮件对端需要调整邮箱后端 |