通过安装TOA模块获取真实请求来源IP

阿里云ECS服务器、非阿里云ECS服务器(主要指线下IDC服务器)通过端口方式接入DDoS高防后,由于业务请求流量先经过DDoS高防清洗过滤再转发到源站服务器,源站无法直接获取真实的请求来源IP,您可以通过在服务器安装TOA模块来获取真实的来源IP。本文介绍如何安装TOA模块。

适用场景

适用场景

描述

DDoS高防-阿里云ECS

源站部署在阿里云ECS上。业务流量经过DDoS高防清洗后到达阿里云ECS。

DDoS高防-四层SLB-阿里云ECS

源站部署在阿里云ECS上。业务流量先经过DDoS高防清洗后,由四层SLB转发到达阿里云ECS。

DDoS高防-云下IDC服务器

源站部署在IDC服务器上。业务流量经过DDoS高防清洗后到达IDC服务器。

注意事项

  • 本文仅适用于基于Linux内核的操作系统。

  • 仅支持通过端口接入DDoS高防的四层TCP协议业务,不支持UDP协议业务。网站业务,请参见配置DDoS高防后获取真实的请求来源IP

  • 请确保服务器可以访问源码下载链接。

  • 如果是非root用户,需拥有sudo权限。

  • 建议您先在测试环境中执行本文的操作,观察环境稳定后再在正式环境中进行配置。

  • 如果您的操作系统中自带TOA模块,建议您提前备份,如果出现重启失败,可以切换到原有内核执行系统恢复。

  • 网络连接通过TOA模块转换,TOA模块是部署在旁路的,因此对网络性能几乎没有影响。

  • Linux升级内核后,会导致现有TOA模块不匹配,因此每次升级内核都需要重新编译、安装TOA模块。

方式一:通过modprobe命令加载VTOA模块

仅适用于Alibaba Cloud Linux 3操作系统。

  1. 加载VTOA模块。

    #modprobe vtoa
  2. 验证VTOA模块是否加载成功。

    #lsmod | grep vtoa
  3. 设置VTOA模块,开启系统启动时自动加载功能。

    1. 创建文件/etc/sysconfig/modules/vtoa.modules,并在文件中添加以下内容。

      #!/bin/bash
      modprobe vtoa > /dev/null 2>&1
    2. 执行以下命令,授予vtoa.modules文件可执行权限。

      sudo chmod +x /etc/sysconfig/modules/vtoa.modules

方式二:通过源码加载TOA模块

  1. 访问TOA源码下载链接,下载源码包。

    • 内核版本为2.x时,请使用toa_kernel2.x文件。

    • 内核版本为3.x时,请使用toa_kernel3.x文件。

    • 内核版本 4.x/5.x时,请使用toa_kernel_common文件。

  2. 安装编译环境(gcc、kernel-headers和kernel-devel)。

    • CentOS系统

      #yum install gcc kernel-headers kernel-devel -y
    • Ubuntu/Debian系统

      #apt-get install gcc linux-headers-$(uname -r) -y
  3. 编译TOA模块。

    将源码包解压,执行cd命令进入文件夹中并编译源码文件。编译过程未提示warning或者error,说明编译成功,检查当前目录下是否已经生成toa.ko文件。

    //源码包路径,以toa_kernel3.x为例介绍
    #cd toa_kernel3.x/ 
    //编译
    #make
    说明

    如果要在其他相同操作系统中加载此TOA模块,可以直接将toa.ko文件拷贝到其他服务器,然后直接参照后续步骤加载TOA模块。

  4. 加载TOA模块。

    #mv toa.ko /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko && depmod
    #insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko
  5. 确认TOA模块是否已加载成功。

    # lsmod | grep toa 
  6. 设置TOA模块,开启系统启动时自动加载功能。

    • CentOS系统

      1. 创建文件/etc/sysconfig/modules/toa.modules,并在文件中添加以下内容。

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko ] ;
        then
        insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko > /dev/null 2>&1
        fi
      2. 执行以下命令,授予toa.modules文件可执行权限。

        sudo chmod +x /etc/sysconfig/modules/toa.modules
    • Ubuntu/Debian系统

      创建文件/etc/modules-load.d/toa.conf,并在文件中添加以下内容。

      toa
  7. 执行sudo reboot命令,重启系统。

方法三:通过RPM包加载TOA模块

适用的操作系统:

  • Redhat Linux

  • CentOS 6.x

  • CentOS 7.x

  1. 根据您的服务器系统类型,下载对应的TOA模块安装文件。

  2. 安装TOA模块。

    • CentOS 7.x系统

      定位到安装文件目录,执行以下命令:

      sudo yum localinstall kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
      说明

      建议您使用yum localinstall命令安装内核,避免出现依赖问题。您也可以执行sudo rpm -ivh kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm命令进行安装。

    • CentOS 6.x或Redhat Linux系统

      定位到安装文件目录,执行以下命令:

      sudo rpm -ivh kernel-firmware-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm
      sudo rpm -ivh kernel-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm
      说明
      • 如果系统中的kernel-firmware版本大于或等于2.6.32-696.13.2.el6.centos.plus.toa,只需要执行上述第二行命令。

      • 如果安装过程中出现依赖错误,可以尝试在rpm命令中加上额外参数--nodeps

      • 如果内核版本大于toa内核版本,可以尝试在rpm命令中加上额外参数--force,进行强制安装。

  3. 设置TOA模块,开启系统启动时自动加载功能。

    1. 创建文件/etc/sysconfig/modules/toa.modules,并在文件中添加以下内容。

      • CentOS 7.x系统:

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko.xz ] ;
        then 
        modprobe toa > /dev/null 2>&1
        fi                            
      • CentOS 6.x或Redhat Linux系统:

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko ] ;
        then 
        modprobe toa > /dev/null 2>&1
        fi                            
    2. 执行以下命令,授予toa.modules文件可执行权限。

      sudo chmod +x /etc/sysconfig/modules/toa.modules
  4. 执行reboot命令,重启系统。

执行结果

安装完成后,服务器能够正常获取真实访问源IP。

如果仍无法获取真实访问源IP,建议您执行lsmod|grep toa命令检测TOA模块的加载情况。如果TOA模块未加载,您可以执行modprobe toa命令手动加载。加载成功后,您可以查看服务端访问日志,重新测试主机能否获取真实的访问源IP。

相关操作

  • 临时关闭TOA :rmmod 路径/模块名

    rmmod toa.ko
  • 卸载TOA模块。

    rmmod toa
  • 确认TOA模块是否卸载成功。若提示“TOA unloaded”,则说明卸载成功。

    dmesg -T