很多提供公開服務的網站都會遇到單一客戶IP大量訪問導致效能受到影響的問題,這些訪問有可能是攻擊流量,也有可能是來自Proxy 伺服器或者NAT裝置後端若干客戶的訪問。如何有效地對這些流量進行限制而不影響正常使用者使用,不同類別產品在這方面提供不同程度的防護。現以A10負載平衡產品AX為例介紹如何?用戶端IP限制。本文提到所有串連為完整TCP串連或未開啟SYN-Cookie功能時的半串連。關於SYN-Flooding的防護,負載平衡裝置均有較強防護能力,本文不做討論。也可以針對伺服器和虛擬伺服器進行總串連數或串連速率限制,也不在本文討論範圍。
首先,某個用戶端過渡使用資源體現在以下幾個方面:
- 並發串連數,同一客戶IP開啟大量串連不關閉,耗費伺服器串連資源
- 建立串連速率,同一客戶IP每秒建立串連數量
- 並發7層請求數,同一客戶IP並發的請求數量,並發串連限制了TCP串連數量,但一個TCP串連中可以傳送很多個HTTP請求。
- 7層請求速率,同樣由於一個TCP串連中有多個7層請求,單純TCP串連限制可能無法有效防護。流行的CC攻擊就是利用少數TCP串連發送大量HTTP請求的。
- 頻寬使用,作為負載平衡裝置,以串連為基礎進行處理是更合理的方式。限制了合理的串連數量和請求數量後,頻寬也相應得到限制。
負載平衡裝置通常有足夠的並發串連數和建立串連處理效能將這些串連轉寄給伺服器,但伺服器往往無法承受這些負擔,因此用戶端IP限制很多時候是為了避免伺服器過載。而單純針對伺服器的串連限制保護又會導致所有用戶端受影響。基於用戶端IP的限制則可以保證未過量使用的使用者不受影響,只是攻擊流量和過量使用的使用者收到限制。
下面介紹其工作原理,涉及部分配置命令,但不做完整配置介紹。
- AX可以定義叫做Class List的IP列表,最多可以定義255個Class List,每個Class List可以包含800萬主機IP地址(/32掩碼)和64K個網路子網。Class List可以以檔案形式存在。
- Class List的格式如下:
ipaddr /network-mask [glid num | lid num] [age minutes] [; comment-string]
lid為Limiting ID,是在某個策略下定義的限制規則編號;
glid為Global Limiting ID,是全域下定義的限制規則編號;
age可以設定這個條目存在多久後刪除,只對主機IP地址適用,可對可疑攻擊IP短時間限制。
例如:
1.1.1.1 /32 lid 1
2.2.2.0 /24 lid 2 ; LID 2 applies to every single IP of this subnet
0.0.0.0 /0 lid 10 ; LID 10 applied to every undefined single IP
3.3.3.3 /32 glid 3 ; Use global LID 3
- lid或glid下定義對應的限制規則,可定義單個IP並發串連數量、每100ms建立串連數量、並發請求數、每100ms請求數量、以及超過限制時的可選動作(轉寄、reset、鎖定、日誌)
conn-limit num
conn-rate-limit num per num-of-100ms
request-limit num
request-rate-limit num per num-of-100ms
over-limit-action [forward | reset] [lockout minutes] [log minutes]
樣本:
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
- 限制原則範本內會定義所使用的Class List名字和對應的lid規則,例如
AX(config)#slb template policy vp_policy
AX(config-policy)#class-list name vp_list
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
- 應用限制策略到VIP或者vport或者全域下,下面例子為應用到vport 80下對HTTP請求數量進行限制
AX(config)#slb virtual server vs1
AX(config-slb virtual server)#port 80 http
AX(config-slb virtual server-slb virtua...)#template policy vp_policy
在制定限制規則時,要考慮Proxy 伺服器和NAT裝置後端若干客戶使用同一IP的問題,採用的限制值由較大值逐漸下調。或者先採取只log不限制的方式獲得IP地址,分析後再逐一制定具體限制策略。