使用TOA模块获取真实请求来源IP
应用场景
业务接入DDoS高防后,经过高防转发的流量到服务端之后真实源IP将被隐藏,客户业务源站所见的源IP为高防的回源IP,从tcp报文中的tcp option字段获取真实源IP,支持获取IPv6真实访问源。
在业务应用开发中,通常需要获取客户端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真实IP地址,限制每个客户端IP地址只能投票一次。
本章节介绍如何通过安装DDoS高防提供的TOA模块获取真实源IP。
方案架构
通常情况下,经过高防的流量会修改真实源IP与高防IP(由真实源IP->高防IP转换为回源IP->源站IP),用户在自己的源站服务器上看到的流量源IP是回源IP,如图1所示。
- 高防IP:华为云为用户提供的IP,用来代理源站IP,确保源站的稳定可靠。
- 回源IP:用户在自己的源站服务器上看到的所有流量的源IP就是回源IP。
- 源站IP:用户的实际业务对外提供服务所使用的公网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)
实施步骤
- 请参考TOA模块的开源代码编译安装TOA模块。
挂载内核模块过程中,不影响服务器现有业务,不用修改原有服务器进程即可获取真实源IP。
- 验证TOA内核模块。
可以参考TOA插件配置获取真实源IP,或参考原理说明如下示例获取源站IP。
>>print(newServerSocket.getpeername()) >>"('cip',cport)"