日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

獲取客戶端真實IP

網站接入Web應用防火墻(Web Application Firewall,簡稱WAF)后,訪問請求在到達源站服務器之前,需要經過WAF的代理轉發。這種情況下,源站服務器可以通過解析回源請求中的X-Forwarded-For記錄,獲取客戶端的真實IP。本文介紹如何配置不同類型的Web應用服務器(包括Nginx、IIS 6、IIS 7、Apache、Tomcat)以及容器K8s,以獲取客戶端的真實IP。

背景信息

WAF在將客戶端的訪問請求轉發到下一環節的服務器時,會在HTTP的請求頭中添加一條X-Forwarded-For記錄,用于記錄客戶端的IP,格式為X-Forwarded-For:客戶端IP。如果客戶端和源站服務器之間有多個代理服務器(例如WAF、DDoS高防、CDN等),則X-Forwarded-For記錄使用以下格式記錄客戶端IP和依次經過的代理服務器IP:X-Forwarded-For:客戶端IP, 代理服務器1IP, 代理服務器2IP, 代理服務器3IP, ……

因此,常見的Web應用服務器(包括Nginx、IIS 6、IIS 7、Apache、Tomcat)以及容器K8s可以通過解析X-Forwarded-For記錄獲取客戶端真實IP。

下文分別介紹如何配置Nginx、IIS 6、IIS 7、ApacheTomcat服務器以及容器K8s,解析X-Forwarded-For記錄,獲取客戶端的真實IP。

重要

開始配置之前,請務必備份現有環境,包括ECS快照備份和Web應用服務器配置文件備份。

Nginx配置方案

Nginx服務器使用http_realip_module模塊解析X-Forwarded-For記錄。您可以參考如下步驟,安裝http_realip_module模塊,修改Nginx配置。

  1. 安裝http_realip_module模塊。

    Nginx服務器上執行# nginx -V | grep http_realip_module命令,查看是否已安裝http_realip_module模塊。

    • 如果已在Nginx服務器上安裝該模塊,請跳過安裝步驟。

    • 如果沒有在Nginx服務器上安裝該模塊,請重新編譯Nginx服務并參考如下方法安裝該模塊。

      說明

      一般情況下,通過一鍵安裝包安裝的Nginx服務器默認不安裝http_realip_module模塊。

      wget http://nginx.org/download/nginx-1.12.2.tar.gz
      tar zxvf nginx-1.12.2.tar.gz
      cd nginx-1.12.2
      ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
      make
      make install
      kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`
      kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`
  2. 修改Nginx服務器配置文件。

    1. 打開nginx.conf配置文件。

    2. http {}中添加以下內容:

      http {
        # 定義可從哪些IP地址接收真實客戶端IP
        set_real_ip_from    <ip_range1>;    
        set_real_ip_from    <ip_range2>;   
        ...
        set_real_ip_from    <ip_rangex>;
        # 定義客戶端IP地址的HTTP頭
        real_ip_header      X-Forwarded-For;
      }
      

      其中,<ip_range1><ip_range2><ip_rangex>需要設置為代理服務器(即WAF)的回源IP段。您需要登錄Web應用防火墻控制臺,在頂部菜單欄,選擇WAF實例的資源組和地域(中國內地非中國內地),單擊接入管理 > CNAME接入 > Web應用防火墻回源IP網段列表即可獲取所有的WAF回源IP段。

      多個回源IP段必須分行添加,且需要添加所有回源IP段。假設WAF回源IP段包括10.10.10.0/24、11.11.XX.X/25、2.13.XX.XX/27,則使用如下格式:

      set_real_ip_from 10.10.10.0/24;
      set_real_ip_from 11.11.XX.X/25;
      set_real_ip_from 2.13.XX.XX/27;
      real_ip_header X-Forwarded-For;

      這里提供一個腳本將復制到的WAF回源IP段字符串(僅IPv4地址)轉換成set_real_ip_from <ip_rangeX>格式

      import re
      def format_ip_ranges(ip_ranges_str):
          # 使用正則表達式匹配所有的IP段
          ip_pattern = re.compile(r'\d+\.\d+\.\d+\.\d+/\d\d')
          ip_list = ip_pattern.findall(ip_ranges_str)
          formatted_ips = [f"    set_real_ip_from {ip};" for ip in ip_list]
          output = "\n".join(formatted_ips)
          return output
      
      ip_ranges_str = "WAF回源ip段字符串"
      formatted_output = format_ip_ranges(ip_ranges_str)
      print(formatted_output)
  3. 修改log_format日志記錄格式。

    1. 打開nginx.conf配置文件,定位到http配置部分的log_format

    2. log_format中添加x-forwarded-for字段,替換默認的remote-address字段。

      修改后的log_format內容如下:

      log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" ';
  4. 執行nginx -s reload命令,重啟Nginx服務器,使配置生效。

  5. 測試配置是否生效。

    1. 使用curl命令模擬請求:

      curl -H "X-Forwarded-For: 1.2.3.4" http://example.com
    2. 檢查Nginx訪問日志,確認客戶端IP已成功提取:

      tail -f access.log

IIS 6配置方案

IIS 6服務器使用F5XForwardedFor模塊解析X-Forwarded-For記錄。您可以參考如下步驟,安裝F5XForwardedFor模塊。

  1. x86\Releasex64\Release目錄下的F5XForwardedFor.dll文件拷貝到某個自定義目錄(例如C:\ISAPIFilters\x86C:\ISAPIFilters\x64)。

    說明
    • 請確保IIS進程擁有自定義目錄的讀寫權限。

    • 如果該目錄下,沒有F5XForwardedFor.dll文件,請手動下載該文件,并將該文件放到自定義目錄。下載路徑,請參見F5XForwardedFor.dll

  2. 打開IIS管理器,定位到目標站點,右鍵單擊屬性

  3. ISAPI篩選器頁簽,單擊添加。完成如下配置后,單擊確定

    32位操作系統為例:

    • 篩選器名稱x_forwarded_for_x86

    • 可執行文件F5XForwardedFor.dll文件所在的完整路徑(例如C:\ISAPIFilters\x86\F5XForwardedFor.dll)。

  4. 重啟IIS 6服務器,使配置生效。

IIS 7配置方案

IIS 7服務器使用F5XForwardedFor模塊解析X-Forwarded-For記錄。您可以參考如下步驟,安裝F5XForwardedFor模塊。

  1. x86\Releasex64\Release目錄下的F5XFFHttpModule.dllF5XFFHttpModule.ini文件拷貝到某個自定義目錄(例如C:\x_forwarded_for\x86C:\x_forwarded_for\x64)。

    說明
    • 請確保IIS進程擁有自定義目錄的讀寫權限。

    • 如果該目錄下,沒有F5XForwardedFor.dllF5XFFHttpModule.ini文件,請手動下載文件,并將文件放到自定義目錄。下載路徑,請參見F5XForwardedFor模塊

  2. 打開IIS管理器,在IIS區域,雙擊模塊

  3. 模塊頁面右側操作區域,單擊配置本機模塊

  4. 配置本機模塊對話框,單擊注冊。填寫注冊信息后,單擊確定

    32位操作系統為例:

    • 名稱x_forwarded_for_x86

    • 路徑F5XFFHttpModule.dll文件所在的完整路徑(例如C:\x_forwarded_for\x86\F5XFFHttpModule.dll)。

  5. 配置本機模塊對話框,選中新注冊的模塊,單擊確定

  6. ISAPI 和CGI限制頁面,添加已注冊的DLL,并將限制設置為允許

  7. 重啟IIS 7服務器,使配置生效。

Apache配置方案

Windows操作系統

Apache 2.4及以上版本的安裝包中自帶remoteip_module模塊文件(mod_remoteip.so),Apache服務器使用該模塊獲取客戶端IP地址。

  1. 進入Apache服務器的extra配置文件夾(conf/extra/),新建httpd-remoteip.conf配置文件。

    說明

    通過引入remoteip.conf配置文件的方式加載相關配置,減少直接修改httpd.conf配置文件的次數,避免因操作失誤導致業務異常。

  2. 編輯httpd-remoteip.conf配置文件,在文件中添加以下內容:

    # 加載mod_remoteip.so模塊
    LoadModule remoteip_module modules/mod_remoteip.so
    # 設置RemoteIPHeader頭部
    RemoteIPHeader X-Forwarded-For
    # 設置回源IP段
    RemoteIPInternalProxy <ip_range1> <ip_range2> …… <ip_rangex>

    其中,<ip_range1><ip_range2><ip_rangex>需要設置為代理服務器(即WAF)的回源IP段。您需要登錄Web應用防火墻控制臺,在頂部菜單欄,選擇WAF實例的資源組和地域(中國內地非中國內地),單擊接入管理 > CNAME接入 > Web應用防火墻回源IP網段列表即可獲取所有的WAF回源IP段。

    多個回源IP段之前使用空格分隔。假設代理服務器的回源IP段包含10.0.0.1、10.0.0.2、10.0.0.3,則使用以下格式:

    RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3
  3. 編輯conf/httpd.conf配置文件,在文件中添加以下內容:

    Include conf/extra/httpd-remoteip.conf

    以上命令表示在conf/httpd.conf中插入httpd-remoteip.conf配置文件。

  4. httpd.conf配置文件中修改日志格式。

    LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common
  5. 重啟Apache服務,使配置生效。

Linux操作系統

您可以參考上述Windows操作系統服務器的配置方式,添加Apache 2.4及以上版本自帶的remoteip_module模塊(mod_remoteip.so)并配置日志格式,獲取客戶端IP地址。

如果Linux服務器使用的Apache版本低于2.4,請參照以下步驟,通過設置Apache的第三方模塊(mod_rpaf)來獲取客戶端IP地址。

  1. 安裝mod_rpaf模塊。

    wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz
    tar zxvf mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. 編輯Apache配置文件/alidata/server/httpd/conf/httpd.conf,在文件最后添加以下內容:

    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips <rpaf ip地址>
    RPAFheader X-Forwarded-For

    其中,<rpaf ip地址>不是代理服務器的公網IP地址,具體IP請通過Apache日志查詢。通常包含兩個IP地址,示例如下:

    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 10.XX.XX.65 10.XX.XX.131
    RPAFheader X-Forwarded-For
  3. 重啟Apache服務,使配置生效。

    /alidata/server/httpd/bin/apachectl restart

更多Apache相關模塊的信息,請參見Apache幫助文檔

Tomcat配置方案

Tomcat服務器通過啟用X-Forwarded-For功能,獲取客戶端IP地址。

  1. 打開tomcat/conf/server.xml配置文件。

  2. AccessLogValve日志記錄功能部分修改為以下內容:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>

容器K8s配置方案

如果您的服務部署在K8s上,K8s會將真實的客戶端IP記錄在X-Original-Forwarded-For字段中,并將WAF回源地址記錄在X-Forwarded-For字段中。您需要修改容器的配置文件,使Ingress將真實的IP添加到X-Forwarded-For字段中,以便您正常獲取真實的客戶端IP地址。

您可以參考以下步驟,對容器配置文件進行修改。

  1. 執行以下命令修改配置文件kube-system/nginx-configuration

    kubectl -n kube-system edit cm nginx-configuration
  2. 在配置文件中添加以下內容:

    compute-full-forwarded-for: "true"
    forwarded-for-header: "X-Forwarded-For"
    use-forwarded-headers: "true"
  3. 保存配置文件。

    保存后配置即刻生效,Ingress會將真實的客戶端IP添加到X-Forwarded-For字段中。

  4. 將業務程序獲取客戶端真實IP的字段修改為X-Original-Forwarded-For。