狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA]IIS/Tomcat/Nginx/Apache如何獲取訪問者真實(shí)IP?

admin
2022年11月4日 16:47 本文熱度 4539

客戶端IP指的是訪問者(用戶設(shè)備)的IP地址。在Web應(yīng)用開發(fā)中,通常需要獲取客戶端真實(shí)的IP地址。例如,投票系統(tǒng)為了防止刷票,需要通過獲取客戶端真實(shí)IP地址,限制每個(gè)客戶端IP地址只能投票一次。

當(dāng)您的網(wǎng)站已接入Web應(yīng)用防火墻(Web Application Firewall,簡稱WAF)進(jìn)行安全防護(hù)后,WAF作為一個(gè)反向代理存在于客戶端和服務(wù)器之間,服務(wù)器的真實(shí)IP被隱藏起來,Web訪問者只能看到WAF的IP地址。此時(shí),您可直接通過WAF獲取客戶端的真實(shí)IP,也可以通過配置網(wǎng)站服務(wù)器獲取客戶端的真實(shí)IP。

本章節(jié)介紹了通過WAF直接獲取真實(shí)IP的方法,以及不同類型的Web應(yīng)用服務(wù)器(包括Tomcat、Apache、Nginx、IIS 6和IIS 7)如何進(jìn)行相關(guān)設(shè)置,以獲取客戶端的真實(shí)IP。

背景信息

通常情況下,網(wǎng)站訪問并不是簡單地從用戶的瀏覽器直達(dá)服務(wù)器,中間可能部署有CDN、WAF、高防等代理服務(wù)器(架構(gòu)為用戶 > CDN/WAF/高防等代理服務(wù) > 源站服務(wù)器)。以WAF為例,部署示意圖如圖1所示。

圖1 部署WAF原理圖

說明:
  • 當(dāng)網(wǎng)站沒有接入到WAF前,DNS直接解析到源站的IP,用戶直接訪問服務(wù)器。
  • 當(dāng)網(wǎng)站接入WAF后,需要把DNS解析到WAF的CNAME,這樣流量才會先經(jīng)過WAF,WAF再將流量轉(zhuǎn)到源站,實(shí)現(xiàn)網(wǎng)站流量檢測和攻擊攔截。

在這種情況下,訪問請求到達(dá)源站服務(wù)器之前可能經(jīng)過了多層安全代理轉(zhuǎn)發(fā)或加速代理轉(zhuǎn)發(fā),服務(wù)器如何獲取發(fā)起請求的真實(shí)客戶端IP呢?

一個(gè)透明的代理服務(wù)器在把用戶的HTTP請求轉(zhuǎn)到下一環(huán)節(jié)的服務(wù)器時(shí),會在HTTP的頭部中加入一條“X-Forwarded-For”記錄,用來記錄用戶的真實(shí)IP,其形式為“X-Forwarded-For:客戶端的真實(shí)IP,代理服務(wù)器1-IP, 代理服務(wù)器2-IP,代理服務(wù)器3-IP,……”

因此,您可以通過獲取“X-Forwarded-For”對應(yīng)的第一個(gè)IP來得到客戶端的真實(shí)IP。

約束條件

  • 添加域名時(shí)“是否已使用代理”配置錯(cuò)誤將導(dǎo)致無法成功獲取Web訪問者請求的真實(shí)IP地址。

    為了保證WAF的安全策略能夠針對真實(shí)源IP生效,成功獲取Web訪問者請求的真實(shí)IP地址,如果WAF前使用了CDN、云加速等七層代理的產(chǎn)品,“是否已使用代理”務(wù)必選擇“是”,其他情況,“是否已使用代理”選擇“否”

  • 常規(guī)情況下,X-Forwarded-For字段中,第一個(gè)IP就是客戶端真實(shí)IP,當(dāng)IPV6地址長度超過X-Forwarded-For字段長度限制時(shí),將讀取不到IP地址;另外,nat64下,ELB是IPv4的監(jiān)聽器,也讀不到ipv6地址。

通過WAF直接獲取客戶端真實(shí)IP

網(wǎng)站接入WAF后,WAF作為一個(gè)反向代理部署于客戶端和服務(wù)器之間,實(shí)現(xiàn)網(wǎng)站安全防護(hù)。根據(jù)業(yè)務(wù)需求,您可以通過以下兩種推薦方式獲取客戶端真實(shí)IP:

  • WAF使用X-Forwarded-For的方式獲取客戶端的真實(shí)IP地址。

    WAF將“真實(shí)的客戶端IP”放在HTTP頭部的“X-Forwarded-For”字段,格式如下:

    X-Forwarded-For: 用戶真實(shí)IP, 代理服務(wù)器1-IP 代理服務(wù)器2-IP...
    

    說明:

    當(dāng)使用此方式獲取客戶端真實(shí)IP時(shí),獲取的第一個(gè)地址就是客戶端真實(shí)IP。

    各種語言通過調(diào)用SDK接口獲取X-Forwarded-For字段的方式:
    • ASP:
      Request.ServerVariables("HTTP_X_FORWARDED_FOR")

    • ASP.NET(C#):
      Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

    • PHP:
      $_SERVER["HTTP_X_FORWARDED_FOR"]

    • JSP:
      request.getHeader("HTTP_X_FORWARDED_FOR")

  • WAF服務(wù)還支持使用X-Real-IP變量,獲取客戶的來源IP(使用過程中考慮了后面經(jīng)過的多層反向代理對該變量的修改)。
    各種語言通過調(diào)用SDK接口獲取X-Real-IP字段的方式:
    • ASP:
      Request.ServerVariables("HTTP_X_REAL_IP")

    • ASP.NET(C#):
      Request.ServerVariables["HTTP_X_REAL_IP"]

    • PHP:
      $_SERVER["HTTP_X_REAL_IP"]

    • JSP:
      request.getHeader("HTTP_X_REAL_IP")

Tomcat如何在訪問日志中獲取客戶端真實(shí)IP

如果您的源站部署了Tomcat服務(wù)器,可通過啟用Tomcat的X-Forwarded-For功能,獲取客戶端的真實(shí)IP地址。

  1. 打開“server.xml”文件(“tomcat/conf/server.xml”),AccessLogValue日志記錄功能部分內(nèi)容如下:

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.values.AccessLogValue" directory="logs"
                   prefix="localhost_access_log." suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />

  2. 在pattern中增加“%{X-Forwarded-For}i”,修改后的server.xml為:

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValue" directory="logs"
                   prefix="localhost_access_log." suffix=".txt"
                   pattern="%{X-Forwarded-For}i %h %l %u %t "%r" %s %b" />
    </Host>

  3. 查看“l(fā)ocalhost_access_log”日志文件,可獲取X-Forwarded-For對應(yīng)的訪問者真實(shí)IP。

Apache如何在訪問日志中獲取客戶端真實(shí)IP

如果源站部署的Apache服務(wù)器為2.4及以上版本,您可以使用Apache安裝包中自帶“remoteip_module”模塊文件“mod_remoteip.so”,獲取客戶端IP地址。

  • CentOS 7.6
    1. 編輯“httpd.conf”配置文件,在文件中添加以下內(nèi)容:
      LoadModule remoteip_module modules/mod_remoteip.so  ##加載mod_remoteip.so模塊
      RemoteIPHeader X-Forwarded-For   ##設(shè)置RemoteIPHeader頭部
      RemoteIPInternalProxy WAF的回源IP段  ##設(shè)置WAF回源IP段

      有關(guān)獲取WAF回源IP段的詳細(xì)介紹,請參見如何放行WAF回源IP段

      說明:
      • “mod_remoteip.so”模塊已默認(rèn)加載在以下文件:“/etc/httpd/conf.modules.d/00-base.conf:46”
      • 多個(gè)回源IP段請使用空格分隔。
    2. 修改配置文件日志格式,即將日志格式文件中的“%h”修改為“%a”
      LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
      LogFormat "%a %l %u %t \"%r\" %>s %b" common

    3. 重啟Apache服務(wù),使配置生效。
  • Ubuntu 20.04.2
    1. 編輯“apache2.conf”配置文件,在文件中添加以下內(nèi)容:
      ln -s ../mods-available/remoteip.load /etc/apache2/mods-enabled/remoteip.load  ##加載mod_remoteip.so模塊
      RemoteIPHeader X-Forwarded-For   ##設(shè)置RemoteIPHeader頭部
      RemoteIPInternalProxy WAF的回源IP段  ##設(shè)置WAF回源IP段

      有關(guān)獲取WAF回源IP段的詳細(xì)介紹,請參見如何放行WAF回源IP段

      說明:
      • 您也可以添加以下內(nèi)容加載mod_remoteip.so模塊:

        LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so

      • 多個(gè)回源IP段請使用空格分隔。
    2. 修改配置文件日志格式,即將日志格式文件中的“%h”修改為“%a”
      LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
      LogFormat "%a %l %u %t \"%r\" %>s %b" common

    3. 重啟Apache服務(wù),使配置生效。

如果源站部署的Apache服務(wù)器為2.2及以下版本,您可通過運(yùn)行命令安裝Apache的第三方模塊mod_rpaf,并修改“http.conf”文件獲取客戶IP地址。

  1. 執(zhí)行以下命令安裝Apache的一個(gè)第三方模塊mod_rpaf。

    wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz
    tar xvfz mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

  2. 打開“httpd.conf”配置文件,并將文件內(nèi)容修改為如下內(nèi)容:

    LoadModule rpaf_module   modules/mod_rpaf-2.0.so ##加載mod_rpaf模塊
    <IfModule mod_rpaf.c>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1 <反向代理IPs>
    RPAFheader X-Forwarded-For
    </IfModule>

  3. 定義日志格式。

    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common

  4. 啟用自定義格式日志。

    CustomLog "/[apache目錄]/logs/$access.log" common

  5. 重啟Apache,使配置生效。

    /[apached目錄]/httpd/bin/apachectl restart

  6. 查看“access.log”日志文件,可獲取X-Forwarded-For對應(yīng)的客戶端真實(shí)IP。

Nginx如何在訪問日志中獲取客戶端真實(shí)IP

如果您的源站部署了Nginx反向代理,可通過在Nginx反向代理配置Location信息,后端Web服務(wù)器即可通過類似函數(shù)獲取客戶的真實(shí)IP地址。

  1. 根據(jù)源站Nginx反向代理的配置,在Nginx反向代理的相應(yīng)location位置配置如下內(nèi)容,獲取客戶IP的信息。

    Location ^ /<uri> {
        proxy_pass  ....;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

  2. 后端Web服務(wù)器通過定義Nginx日志參數(shù)$http_x_forwarded_for來獲取客戶的真實(shí)IP。

    示例:
    log_format main ' "<$http_Cdn_Src_IP>" "{$http_x_real_ip}" "[$http_x_forwarded_for]" "$remote_addr" ' '$http_user_agent - $remote_user [$time_local] "$request" '   ' $status $body_bytes_sent "$http_referer" '; 

IIS 6如何在訪問日志中獲取客戶端真實(shí)IP

如果您的源站部署了IIS 6服務(wù)器,您可以通過安裝“F5XForwardedFor.dll”插件,從IIS 6服務(wù)器記錄的訪問日志中獲取客戶端真實(shí)的IP地址。

  1. 下載F5XForwardedFor模塊。
  2. 根據(jù)您服務(wù)器的操作系統(tǒng)版本將“x86\Release”或者“x64\Release”目錄中的“F5XForwardedFor.dll”文件拷貝至指定目錄(例如,“C:\ISAPIFilters”),同時(shí)確保IIS進(jìn)程對該目錄有讀取權(quán)限。
  3. 打開IIS管理器,找到當(dāng)前開啟的網(wǎng)站,在該網(wǎng)站上右鍵選擇“屬性”,打開“屬性”頁面。
  4. “屬性”頁面,切換至“ISAPI篩選器”,單擊“添加”,在彈出的窗口中,配置如下信息:

    • “篩選器名稱”“F5XForwardedFor”
    • “可執(zhí)行文件”“F5XForwardedFor.dll”的完整路徑,例如:“C:\ISAPIFilters\F5XForwardedFor.dll”

  5. 單擊“確定”,重啟IIS 6服務(wù)器。
  6. 查看IIS 6服務(wù)器記錄的訪問日志(默認(rèn)的日志路徑為:“C:\WINDOWS\system32\LogFiles\ ”,IIS日志的文件名稱以“.log”為后綴),可獲取X-Forwarded-For對應(yīng)的客戶端真實(shí)IP。

IIS 7如何在訪問日志中獲取客戶端真實(shí)IP

如果您的源站部署了IIS 7服務(wù)器,您可以通過安裝“F5XForwardedFor”模塊,從IIS 7服務(wù)器記錄的訪問日志中獲取客戶端真實(shí)的IP地址。

  1. 下載F5XForwardedFor模塊。
  2. 根據(jù)服務(wù)器的操作系統(tǒng)版本將“x86\Release”或者“x64\Release”目錄中的“F5XFFHttpModule.dll”“F5XFFHttpModule.ini”文件拷貝到指定目錄(例如,“C:\x_forwarded_for\x86”“C:\x_forwarded_for\x64”),并確保IIS進(jìn)程對該目錄有讀取權(quán)限。
  3. 在IIS服務(wù)器的選擇項(xiàng)中,雙擊“模塊”,進(jìn)入“模塊”界面。
  4. 單擊“配置本機(jī)模塊”,在彈出的對話框中,單擊“注冊”

    圖2 注冊模塊

  5. 在彈出的對話框中,按操作系統(tǒng)注冊已下載的DLL文件后,單擊“確定”

    • x86操作系統(tǒng):注冊模塊“x_forwarded_for_x86”
      • 名稱:x_forwarded_for_x86
      • 路徑:“C:\x_forwarded_for\x86\F5XFFHttpModule.dll”
      圖3 x86操作系統(tǒng)注冊模塊

    • x64操作系統(tǒng):注冊模塊“x_forwarded_for_x64”
      • 名稱:x_forwarded_for_x64
      • 路徑:“C:\x_forwarded_for\x64\F5XFFHttpModule.dll”
      圖4 x64操作系統(tǒng)注冊模塊

  6. 注冊完成后,勾選新注冊的模塊(“x_forwarded_for_x86”“x_forwarded_for_x64”)并單擊“確定”
  7. “ISAPI和CGI限制”中,按操作系統(tǒng)添加已注冊的DLL文件,并將其“限制”改為“允許”

    • x86操作系統(tǒng):
      • ISAPI或CGI路徑:“C:\x_forwarded_for\x86\F5XFFHttpModule.dll”
      • 描述:x86
    • x64操作系統(tǒng):
      • ISAPI或CGI路徑:“C:\x_forwarded_for\x64\F5XFFHttpModule.dll”
      • 描述:x64

  8. 重啟IIS 7服務(wù)器,等待配置生效。
  9. 查看IIS 7服務(wù)器記錄的訪問日志(默認(rèn)的日志路徑為:“C:\WINDOWS\system32\LogFiles\ ”,IIS日志的文件名稱以“.log”為后綴),可獲取X-Forwarded-For對應(yīng)的客戶端真實(shí)IP。

該文章在 2022/11/4 16:53:04 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved