很多提供公開服務的網站都會遇到單一客戶IP大量訪問導致性能受到影響的問題,這些訪問有可能是攻擊流量,也有可能是來自代理服務器或者NAT設備后端若干客戶的訪問。如何有效地對這些流量進行限制而不影響正常用戶使用,不同類別產品在這方面提供不同程度的防護。現(xiàn)以A10負載均衡產品AX為例介紹如何實現(xiàn)客戶端IP限制。本文提到所有連接為完整TCP連接或未開啟SYN-Cookie功能時的半連接。關于SYN-Flooding的防護,負載均衡設備均有較強防護能力,本文不做討論。也可以針對服務器和虛擬服務器進行總連接數或連接速率限制,也不在本文討論范圍。
首先,某個客戶端過渡使用資源體現(xiàn)在以下幾個方面:并發(fā)連接數,同一客戶IP打開大量連接不關閉,耗費服務器連接資源;新建連接速率,同一客戶IP每秒新建連接數量。并發(fā)7層請求數,同一客戶IP并發(fā)的請求數量,并發(fā)連接限制了TCP連接數量,但一個TCP連接中可以傳送很多個HTTP請求。7層請求速率,同樣由于一個TCP連接中有多個7層請求,單純TCP連接限制可能無法有效防護。流行的CC攻擊就是利用少數TCP連接發(fā)送大量HTTP請求的。帶寬使用,作為負載均衡設備,以連接為基礎進行處理是更合理的方式。限制了合理的連接數量和請求數量后,帶寬也相應得到限制。
負載均衡設備通常有足夠的并發(fā)連接數和新建連接處理性能將這些連接轉發(fā)給服務器,但服務器往往無法承受這些負擔,因此客戶端IP限制很多時候是為了避免服務器過載。而單純針對服務器的連接限制保護又會導致所有客戶端受影響。基于客戶端IP的限制則可以保證未過量使用的用戶不受影響,只是攻擊流量和過量使用的用戶收到限制。
下面介紹其工作原理,涉及部分配置命令,但不做完整配置介紹。AX可以定義叫做Class List的IP列表,最多可以定義255個Class List,每個Class List可以包含800萬主機IP地址(/32掩碼)和64K個網絡子網。Class List可以以文件形式存在。Class List的格式如下:
ipaddr /network-mask [glidnum | lidnum] [ageminutes] [; comment-string]
lid為Limiting ID,是在某個策略下定義的限制規(guī)則編號;
glid為Global Limiting ID,是全局下定義的限制規(guī)則編號;
age可以設定這個條目存在多久后刪除,只對主機IP地址適用,可對可疑攻擊IP短時間限制。
在制定限制規(guī)則時,要考慮代理服務器和NAT設備后端若干客戶使用同一IP的問題,采用的限制值由較大值逐漸下調。或者先采取只log不限制的方式獲得IP地址,分析后再逐一制定具體限制策略。