全部產品
Search
文件中心

Anti-DDoS:配置DDoS高防後擷取真實的請求來源IP

更新時間:Jun 09, 2026

業務接入DDoS高防後,到達來源站點的所有業務流量都由DDoS高防轉寄,來源站點伺服器通常可以通過解析回源請求中的X-Forwarded-For記錄或者安裝TOA模組,擷取用戶端的真實IP。本文介紹如何擷取真實的請求來源IP。

配置連接埠接入的業務(非網站業務)

部分情境下您可以通過安裝TOA模組,擷取真實來源IP。具體操作,請參見通過安裝TOA模組擷取真實請求來源IP。無法安裝TOA模組的情境,請您聯絡技術支援人員。

高防IPv4執行個體

TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 254、源連接埠號碼和源IP等資訊,共佔8個位元組。以下為 Wireshark 抓包解析的 TCP 報文樣本,其中 TCP Option – Experimental 地區包含連接埠號碼與源 IP 位址資訊:

    Destination Port: 443
     [Stream index: 0]
     [TCP Segment Len: 0]
    Sequence number: 1    (relative sequence number)
    Acknowledgment number: 1    (relative ack number)
    1001 .... = Header Length: 36 bytes (9)
  ▶ Flags: 0x010 (ACK)
    Window size value: 65535
     [Calculated window size: 65535]
     [Window size scaling factor: -2 (no window scaling used)]
    Checksum: 0x90fb [unverified]
     [Checksum Status: Unverified]
    Urgent pointer: 0
  ▼ Options: (16 bytes), Experimental
    ▼ TCP Option – Experimental
        Kind: RFC3692-style Experiment 2 (254)
        Length: 8
        Magic Number: 0xc406
      Unknown (0xfa) (8 bytes)
0000   b4 0c 25 e2 80 46 4c e1   75 f7 e5 c1 08 00 45 00   ..%..FL. u.....E.
0010   00 38 00 00 40 00 26 06   cf e9 2f 70 49 ce 67 96   .8..@.&. ../pI.g.
0020   a4 02 1b 2e 01 bb c8 c1   cf 98 ab 2f 54 e1 90 10   ........ .../T...
0030   ff ff 90 fb 00 00 fe 08   c4 06 65 xx xx 85 fa 08   ........ ..exx...
0040   01 bb cb 6b 34 80                                     ...k4.
  • 連接埠號碼:Magic Number欄位表示連接埠號碼,十六進位字元。樣本中為c4 06,轉為十進位可以獲得對應的連接埠號碼50182。

  • 源IP地址:連接埠號碼後的連續四個位元組表示源IP地址,十六進位字元。樣本中為65 ** ** 85,轉為十進位可以獲得對應的源IP地址為101.*.*.133。

高防IPv6執行個體

v6tov4模式

TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 249、源連接埠號碼、源IP、高防IP等資訊,共佔40個位元組。具體位置如下所示。

Destination Port: 8080
[Stream index: 1]
[Stream Packet Number: 3]
[Conversation completeness: Incomplete, ESTABLISHED (7)]
[TCP Segment Len: 0]
Sequence Number: 1    (relative sequence number)
Sequence Number (raw): 2505761997
[Next Sequence Number: 1    (relative sequence number)]
Acknowledgment Number: 1    (relative ack number)
Acknowledgment number (raw): 483970095
1111 .... = Header Length: 60 bytes (15)
Flags: 0x010 (ACK)
Window: 4096
[Calculated window size: 262144]
[Window size scaling factor: 64]
Checksum: 0xbc88 [unverified]
[Checksum Status: Unverified]
Urgent Pointer: 0
Options: (40 bytes), Unknown (0xf9)
  TCP Option – Unknown
    Kind: Unknown (249)
    Length: 40
    Payload: 9d7d2401b180xxxd960f875d960f87000000012405e000100300000000000a7304b55
[Timestamps]
  • 連接埠號碼:Payload前兩個位元組表示連接埠號碼,十六進位字元。樣本中為9d7d,轉為十進位可以獲得對應的連接埠號碼40317。

  • 源IP地址:連接埠號碼後的連續十六個位元組表示源IP地址,十六進位字元,直接對應IPv6地址資訊。樣本中為2401*****0f87,即源IP地址為2401:b180:100*:*:*:f87:5d96:f87。

    說明

    Payload中除連接埠號碼和源IP地址外,剩餘二十位元組為高防IP資訊。

v6tov6情境

TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 253、源連接埠號碼和源IP等資訊,共佔20個位元組。具體位置如下所示。

Destination Port: 8080
 [Stream index: 0]
 [Stream Packet Number: 1]
 [Conversation completeness: Incomplete (12)]
 [TCP Segment Len: 0]
 Sequence Number: 1    (relative sequence number)
 Sequence Number (raw): 721958393
 [Next Sequence Number: 1    (relative sequence number)]
 Acknowledgment Number: 1    (relative ack number)
 Acknowledgment number (raw): 2789445640
 1010 .... = Header Length: 40 bytes (10)
 Flags: 0x010 (ACK)
 Window: 65535
 [Calculated window size: 65535]
 [Window size scaling factor: -1 (unknown)]
 Checksum: 0x90cc [unverified]
 [Checksum Status: Unverified]
 Urgent Pointer: 0
 Options: (20 bytes), Experimental
   TCP Option - Experimental: Unknown
       Kind: RFC3692-style Experiment 1 (253)
       Length: 20
       Experiment Identifier: Unknown (0xeb98)
       Data: 2401b180100xxx0f875d960f87
  • 連接埠號碼:Experiment Identifier欄位表示連接埠號碼,十六進位字元。樣本中為eb98,轉為十進位可以獲得對應的連接埠號碼60312。

  • 源IP地址:Data欄位表示源IP地址,十六進位字元,直接對應IPv6地址資訊。樣本中為2401*****0f87,即源IP地址為2401:b180:100*:*:*:f87:5d96:f87。

重要

為避免DDoS高防的回源流量被誤攔截,請您在來源站點允許存取DDoS高防的回源IP段。如何查詢回源IP段,請參見允許存取DDoS高防回源IP

  • 網路架構為DDoS高防->阿里雲ECS:請將DDoS高防的回源IP段,加入ECS安全性群組的白名單中。具體操作,請參見添加安全性群組規則

  • 網路架構為DDoS高防->Server Load Balancer->阿里雲ECS:請將DDoS高防的回源IP段,添加到Server Load Balancer的存取控制白名單中。具體操作,請參見開啟存取控制

佈建網域名接入的業務(網站業務)

方式一:使用 X-Forwarded-For 擷取用戶端 IP

情境說明

  • 當七層Proxy 伺服器(例如DDoS高防)將使用者的訪問請求轉寄到後端伺服器時,來源站點看到的請求來源預設是七層Proxy 伺服器(例如DDoS高防)的回源IP,而真實的請求來源IP被記錄在HTTP頭部的X-Forwarded-For欄位中,格式為X-Forwarded-For: 使用者真實IP

  • 如果訪問請求到後端伺服器間經過了一台以上Proxy 伺服器(例如經過WAF、CDN等Proxy 伺服器),則HTTP頭部的X-Forwarded-For欄位記錄了真實的請求來源IP和所有經過的Proxy 伺服器IP,格式為X-Forwarded-For: 使用者真實IP, Proxy 伺服器1-IP, Proxy 伺服器2-IP, Proxy 伺服器3-IP, …。代理節點在回源時會在X-Forwarded-For中追加上一個節點的地址,而不會追加自身 IP。

擷取方法

針對不同的程式設計語言,常用的擷取X-Forwarded-For內容的方式如下:

重要
  • 擷取到X-Forwarded-For欄位的內容後,以英文逗號(,)作為分隔字元,截取其中的第一個IP地址,即可擷取真實的請求來源IP。

  • 也可以通過配置Web伺服器(例如Nginx、IIS 6、IIS 7、Apache、Tomcat)解析X-Forwarded-For擷取真實來源IP,具體操作,請參見擷取用戶端真實IP

  • 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”)

方式二:使用自訂 Header 擷取用戶端 IP

情境說明

在複雜的網路架構中,依賴標準的 X-Forwarded-For (XFF) 頭可能存在被偽造、多層代理導致 IP 混淆或解析邏輯複雜等風險。為提升安全性和可控性,可自訂專屬 HTTP Header 用於透傳真實用戶端 IP。

擷取方式

將用戶端 IP 寫入自訂 HTTP Header。具體操作,請參見添加網站配置

  1. 登入DDoS高防控制台的網域名稱接入頁面。

  2. 網域名稱接入頁面,單擊添加網站

  3. 網站接入頁面轉寄配置地區,配置流量標記時選擇自訂Header(如:Custom-True-IP)。

  4. 在業務代碼中截取對應欄位,如request.getHeader(“Custom-True-IP”)