TOA - TCP Option Address

使用Haproxy转发TCP到业务服务器端,后端报文看到的源 IP 地址是代理服务器的IP 。
为了让后端可以获取到用户端实际的 IP 地址,有三个方案:html

1. http 请求记录标识:

在客户端和服务器创建TCP链接以前,通常都是先http请求拿到服务器的IP和PORT。 在http请求时,使用客户端的ID或者macid,device_id,golbal_id等惟一标识映射用户的ip,存储起来,ex:redis的hash 或 zset。 这样,后端tcp服务器就能够根据惟一标识,在存储中拿到用户的ip。虽然不是最精准的,可是也是最接近真实的。git

2. haproxy 配置添加send-proxy:

ex:github

listen tcp-frontend
    bind 192.168.123.77:8577
    balance roundrobin
    mode tcp
    option tcplog
    server tcp-backend 192.168.123.60:8577 send-proxy

加了send-proxy后,第一次socket链接时,服务端会收到proxy协议:redis

PROXY TCP4 192.168.123.55 192.168.123.77 52505 8577 
PROXY TCP6 ... .. ... ... 
#PROXY TCP4/6 client_ip, proxy_ip, client_port, proxy_port

里面有haproxy的Ip与用户真实IP。改造下tcp服务器,就能够拿到客户端tcp链接时的真实ip。shell

3. TOA(TCP Option Address):

TCP 协议下,为了将客户端 IP 传给服务器,会将客户端的 IP,port 在转发时放入了自定义的 tcp option 字段。后端

华为云的弹性负载均衡(ELB):

https://support.huaweicloud.com/eu-west-0-usermanual-elb/zh_cn_elb_06_0001.html
TOA模块源代码地址:
    https://github.com/Huawei/TCP_option_addresscentos

腾讯云的宙斯盾安全防御:

https://cloud.tencent.com/document/product/685/18805
TOA内核安装包地址:
    (1) Centos 6.x 下载
    (2) Centos 7.x 下载安全

相关文章
相关标签/搜索