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 下載安全

相關文章
相關標籤/搜索