如何获取真实源IP
业务接入DDoS高防后,经过高防转发的流量到服务端之后真实源IP将被隐藏,客户业务源站所见的源IP为高防的回源IP,从tcp报文中的tcp option字段获取真实源IP,支持获取IPv6真实访问源。
在业务应用开发中,通常需要获取客户端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真实IP地址,限制每个客户端IP地址只能投票一次。
本章节介绍如何通过安装DDoS高防提供的TOA模块获取真实源IP。
约束条件
- CentOS6.5(对应Linux内核版本2.6.X)
- CentOS7(对应Linux内核版本3.10.X)
- toa_common(通用版本toa,一般针对Linux内核3.0及其以上的系统,如Ubuntu 14/16 、Suse 11/42等)
- toa_linux-2.6.32-220.23.1.el6.x86_64.rs(对应指定的版本:linux-2.6.32-220.23.1.el6.x86_64.rs)
- DDoS高防+Web源站场景下,如果DDoS高防关闭了Web基础防护,则需要在源站安装TOA以获取真实源IP。
- 如果DDoS高防开启了Web基础防护或源站配置为华为云WAF的场景,不需要安装TOA获取真实源IP,可从xff,x-real等7层请求头部获取真实源IP,仅支持获取IPv4真实访问源。
- 如果源站服务器使用了其他操作系统(Ubuntu、SUSE等),请参考TOA插件配置定制编译安装TOA插件以获取真实源IP。
应用场景
安装高防TOA插件是基于四层协议(TCP)获取真实源IP的方法。如果您的业务部署场景为DDoS+WAF,请参考获取客户端真实IP获取七层协议(HTTP)真实源IP。
原理说明
通常情况下,经过高防的流量会修改真实源IP与高防IP(由真实源IP->高防IP转换为回源IP->源站IP),用户在自己的源站服务器上看到的流量源IP是回源IP,如图1所示。
- 高防IP:华为云为用户提供的IP,用来代理源站IP,确保源站的稳定可靠。
- 回源IP:用户在自己的源站服务器上看到的所有流量的源IP就是回源IP。
- 源站IP:用户的实际业务对外提供服务所使用的公网IP地址。
操作步骤
- 请参考TOA模块的开源代码编译安装TOA模块。
挂载内核模块过程中,不影响服务器现有业务,不用修改原有服务器进程即可获取真实源IP。
- 验证TOA内核模块。
可以参考TOA插件配置获取真实源IP,或参考原理说明如下示例获取源站IP。
>>print(newServerSocket.getpeername()) >>"('cip',cport)"