使用流量篩選器規則封鎖 DoS 和 DDoS 攻擊
瞭解如何在AEM as a Cloud Service (AEMCS)管理的CDN中使用 速率限制流量篩選器 規則和其他策略,以封鎖拒絕服務(DoS)和分散式拒絕服務(DDoS)攻擊。 這些攻擊會導致CDN和潛在的AEM Publish服務(亦稱為來源)的流量尖峰,並可能影響網站的回應能力和可用性。
本教學課程可作為 如何分析您的流量模式並設定速率限制流量篩選器規則 以緩解這些攻擊的指南。 本教學課程也說明如何設定警示,以便在懷疑有攻擊時通知您。
瞭解保護
讓我們來瞭解一下AEM網站的預設DDoS保護:
- 快取: 如果快取原則良好,DDoS攻擊的影響會比較受限,因為CDN會防止大多數要求前往來源並造成效能降低。
- 自動縮放: AEM製作和發佈服務會自動縮放,以處理流量尖峰,但它們仍會受到流量突然大幅增加的影響。
- 封鎖: 如果來自特定IP位址的Adobe流量超過每個CDN PoP (Point of Presence)的Adobe定義速率,則CDN會封鎖流向來源的流量。
- 警示: 當流量超過特定速率時,動作中心會在來源警示通知中傳送流量尖峰。 當任何指定CDN PoP的流量超過每個IP位址的 Adobe定義的 要求速率時,就會觸發此警報。 如需詳細資訊,請參閱流量篩選規則警示。
這些內建的保護應視為組織將DDoS攻擊對效能影響降到最低的能力的基準。 由於每個網站都有不同的效能特性,且在達到Adobe定義的速率限制之前,可能會發現效能降低,因此建議透過 客戶組態 來延伸預設保護。
讓我們來看看客戶可採取的一些其他建議措施,以保護其網站免受DDoS攻擊:
- 宣告 速率限制流量篩選器規則 以封鎖來自單一IP位址的流量(每個PoP)。 這些通常是低於Adobe定義之速率限制的臨界值。
- 透過「警示動作」設定速率限制流量篩選規則的 警示,如此一來,當規則觸發時,就會傳送動作中心通知。
- 宣告 要求轉換 以忽略查詢引數,以增加快取涵蓋範圍。
速率限制流量規則變化 rate-limit-variations
速率限制流量規則有兩種變化:
- Edge — 根據指定IP每個Po的所有流量(包括可從CDN快取提供的流量)的速率封鎖請求。
- 來源 — 根據指定IP的來源流量比率(每個PoP),封鎖要求。
客戶歷程
以下步驟反映了客戶保護其網站的可能過程。
- 辨識速率限制流量篩選器規則的必要性。 這可能是由於收到Adobe在來源警報時出現的現成流量尖峰所致,也可能是主動決定採取預防措施,以降低DDoS成功的風險。
- 如果您的網站已上線,請使用控制面板分析流量模式,以決定速率限制流量篩選規則的最佳臨界值。 如果您的網站尚未上線,請根據您的流量預期挑選值。
- 使用上一步的值,設定速率限制流量篩選規則。 請務必啟用對應的警報,以便在達到臨界值時通知您。
- 每當流量尖峰發生時,都會收到流量篩選規則警報,針對您的組織是否可能遭惡意行動者設為目標,提供寶貴的深入分析。
- 視需要執行警示。 分析流量,判斷尖峰是否反映合法要求,而非攻擊。 如果流量合法,請增加臨界值,否則請降低臨界值。
本教學課程的其餘部分將引導您完成此程式。
瞭解設定規則的必要性 recognize-the-need
如先前所述,Adobe預設會封鎖超過特定速率的CDN流量,但有些網站可能會遇到效能降低至低於該臨界值的情況。 因此,應設定速率限制流量篩選器規則。
理想情況下,您最好在進入生產階段前設定規則。 實際上,許多組織只會在收到流量尖峰的警報後,以反應式方式宣告規則,表示可能會發生攻擊。
當超過指定PoP的單一IP位址流量的預設臨界值時,Adobe會在來源警示傳送流量尖峰作為動作中心通知。 如果您收到這類警報,建議設定速率限制流量篩選器規則。 此預設警報不同於客戶在定義流量篩選規則時必須明確啟用的警報,您將在未來章節中瞭解這些警報。
分析流量模式 analyze-traffic
如果您的網站已經上線,您可以使用CDN記錄和Adobe提供的儀表板來分析流量模式。
-
CDN流量儀表板:透過CDN和原始要求率、4xx和5xx錯誤率以及非快取要求,提供流量的深入分析。 此外,也提供每個使用者端IP位址每秒最大CND和來源要求數,以及最佳化CDN設定的更多深入分析。
-
CDN快取命中率:提供按HIT、PASS和MISS狀態區分的快取命中率總計和要求總數的深入分析。 也提供熱門點選、通過和錯過URL。
使用下列其中一個選項 來設定儀表板工具:
ELK — 設定儀表板工具
Adobe提供的 Elasticsearch、Logstash和Kibana (ELK) 儀表板工具可用來分析CDN記錄。 此工具包括視覺化流量模式的儀表板,讓您更容易決定速率限制流量篩選規則的最佳臨界值。
-
複製AEMCS-CDN-Log-Analysis-Tooling GitHub存放庫。
-
依照如何設定ELK Docker容器步驟來設定工具。
-
在設定過程中,匯入
traffic-filter-rules-analysis-dashboard.ndjson
檔案以視覺化資料。 CDN流量 儀表板包含的視覺效果會顯示在CDN Edge和Origin的每個IP/POP的最大請求數。 -
從Cloud Manager的 環境 卡中,下載AEMCS Publish服務的CDN記錄。
note tip TIP 新請求可能需要5分鐘的時間才會出現在CDN記錄檔中。
Splunk — 設定控制面板工具
已啟用Splunk記錄檔轉送的客戶可以建立新的儀表板,以分析流量模式。
若要在Splunk中建立儀表板,請依照適用於AEMCS CDN記錄分析的Splunk儀表板步驟操作。
檢視資料
ELK和Splunk儀表板中提供下列視覺效果:
-
每個使用者端IP和POP的Edge RPS:此視覺效果顯示在CDN Edge 每個IP/POP的最大要求數。 視覺效果中的尖峰表示請求數量上限。
ELK儀表板:
Splunk儀表板:
-
每個使用者端IP和POP的原始RPS:此視覺效果顯示在原點 每個IP/POP的最大要求數目。 視覺效果中的尖峰表示請求數量上限。
ELK儀表板:
Splunk儀表板:
選擇臨界值
速率限制流量篩選器規則的臨界值應以上述分析為基礎,並確保合法流量不會遭到封鎖。 如需如何選擇臨界值的指引,請參閱下表:
使用的倍數取決於您對由於自然流量、行銷活動和其他事件造成的正常流量尖峰的期望。 介於5到10之間的倍數可能是合理的。
如果您的網站尚未上線,表示沒有資料可分析,您應教育性猜測要為速率限制流量篩選器規則設定的適當值。 例如:
設定規則 configure-rules
在您的AEM專案的/config/cdn.yaml
檔案中設定 速率限制流量篩選器 規則,其值以上述討論為基礎。 如有需要,請洽詢您的Web安全性團隊,以確定速率限制值適當,且不會封鎖合法流量。
如需詳細資訊,請參閱在您的AEM專案中建立規則。
kind: CDN
version: '1'
metadata:
envTypes:
- dev
- stage
- prod
data:
trafficFilters:
rules:
...
# Prevent attack at edge by blocking client for 5 minutes if they make more than 500 requests per second on average
- name: prevent-dos-attacks-edge
when:
reqProperty: tier
in: ["author","publish"]
rateLimit:
limit: 500 # replace with the appropriate value
window: 10 # compute the average over 10s
penalty: 300 # block IP for 5 minutes
count: all # count all requests
groupBy:
- reqProperty: clientIp
action:
type: log
experimental_alert: true
# Prevent attack at origin by blocking client for 5 minutes if they make more than 100 requests per second on average
- name: prevent-dos-attacks-origin
when:
reqProperty: tier
in: ["author","publish"]
rateLimit:
limit: 100 # replace with the appropriate value
window: 10 # compute the average over 10s
penalty: 300 # block IP for 5 minutes
count: fetches # count only fetches
groupBy:
- reqProperty: clientIp
action:
type: log
experimental_alert: true
請注意,來源和邊緣規則皆已宣告,且警示屬性設定為true
,因此只要達到臨界值,您就可以收到警示,可能表示發生攻擊。
建議一開始將動作型別設為記錄,以便監視數小時或數天的流量,確保合法流量不會超過這些速率。 幾天後,請變更為封鎖模式。
請依照下列步驟,將變更部署至AEMCS環境:
- 提交上述變更並將其推播至您的Cloud Manager Git存放庫。
- 使用Cloud Manager的配置管道將變更部署到AEMCS環境。 如需詳細資訊,請參閱透過Cloud Manager部署規則。
- 若要驗證 速率限制流量篩選規則 是否如預期運作,您可以模擬攻擊,如攻擊模擬區段中所述。 將請求數限制在高於規則中設定的速率限制值的值。
設定請求轉換規則 configure-request-transform-rules
除了速率限制流量篩選規則之外,建議使用要求轉換來取消設定應用程式不需要的查詢引數,以最小化透過快取破壞技術略過快取的方式。 例如,如果您只想允許search
和campaignId
查詢引數,則可宣告下列規則:
kind: "CDN"
version: "1"
metadata:
envTypes:
- dev
- stage
- prod
data:
experimental_requestTransformations:
rules:
- name: unset-all-query-params-except-those-needed
when:
reqProperty: tier
in: ["publish"]
actions:
- type: unset
queryParamMatch: ^(?!search$|campaignId$).*$
接收流量篩選規則警示 receiving-alerts
如上所述,如果流量篩選規則包含 experimental_alert: true,則符合規則時會收到警示。
對警報執行動作 acting-on-alerts
有時候,警報會提供資訊,讓您察覺到攻擊的頻率。 使用上述儀表板來分析您的CDN資料非常有價值,以驗證流量尖峰是否是因為攻擊,而不只是因為合法流量增加。 如果是後者,請考慮增加臨界值。
攻擊模擬 attack-simulation
本節說明模擬DoS攻擊的方法,這些方法可用來產生本教學課程所用控制面板的資料,並驗證任何設定的規則是否成功封鎖攻擊。
若要模擬攻擊,可以使用Apache Benchmark、Apache JMeter、Vegeta等工具。
Edge請求
使用下列Vegeta命令,您可以對您的網站提出許多要求:
$ echo "GET https://<YOUR-WEBSITE-DOMAIN>" | vegeta attack -rate=120 -duration=5s | vegeta report
上述命令會在5秒內發出120個請求並輸出報表。 假設網站沒有速率限制,這可能會導致流量尖峰。
來源請求
若要略過CDN快取並向來源(AEM Publish服務)提出請求,您可以在URL中新增唯一的查詢引數。 請參考使用JMeter指令碼模擬DoS攻擊中的範例Apache JMeter指令碼