更新时间:2024-09-29 GMT+08:00

如何获取真实源IP

业务接入DDoS高防后,经过高防转发的流量到服务端之后真实源IP将被隐藏,客户业务源站所见的源IP为高防的回源IP,从tcp报文中的tcp option字段获取真实源IP,支持获取IPv6真实访问源。

在业务应用开发中,通常需要获取客户端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真实IP地址,限制每个客户端IP地址只能投票一次。

本章节介绍如何通过安装DDoS高防提供的TOA模块获取真实源IP。

约束条件

源站服务器为以下Linux操作系统时,您可以通过安装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所示。

图1 原理说明
  • 高防IP:华为云为用户提供的IP,用来代理源站IP,确保源站的稳定可靠。
  • 回源IP:用户在自己的源站服务器上看到的所有流量的源IP就是回源IP。
  • 源站IP:用户的实际业务对外提供服务所使用的公网IP地址。

操作步骤

  1. 请参考TOA模块的开源代码编译安装TOA模块。

    挂载内核模块过程中,不影响服务器现有业务,不用修改原有服务器进程即可获取真实源IP。

  2. 验证TOA内核模块。

    可以参考TOA插件配置获取真实源IP,或参考原理说明如下示例获取源站IP。

    >>print(newServerSocket.getpeername())
    >>"('cip',cport)"