流量篩選規則包括 WAF 規則 traffic-filter-rules-including-waf-rules
流量篩選規則可用於封鎖或允許 CDN 層的要求,這在以下情境中可能很有用:
- 在新網站上線之前,限制特定網域存取公司內部流量
- 建立速率限制,以減少受到容量 DoS 攻擊的影響
- 防止已知的惡意 IP 位址目標定位您的頁面
大多數流量篩選器規則可供所有 AEM as a Cloud Service 網站和表單客戶使用。它們主要是根據要求屬性和請求標頭進行操作,包括 IP、主機名稱、路徑和使用者代理程式。
流量篩選規則的子類別需要增強的安全性授權或 WAF-DDoS 保護授權。這些強大的規則也稱為 WAF (Web 應用程式防火牆) 流量篩選規則 (或簡稱 WAF 規則),且可以存取本文稍後將進行說明 WAF 標幟。
流量篩選規則可以透過 Cloud Manager 設定管道部署到生產 (非沙箱) 程式中的開發、中繼和生產環境類型。未來將推出對 RDE 的支援。
按照教學課程進行操作,快速建立有關此功能的具體專業知識。
本文的結構方式 how-organized
本文章分為以下幾個章節:
- 流量保護概觀: 了解如何保護您以避免受惡意流量的傷害。
- 設定規則的建議流程: 閱讀關於保護網站的高級方法。
- 設定: 了解如何設定、配置和部署流量篩選規則,包括進階的 WAF 規則。
- 規則語法: 閱讀有關如何在
cdn.yaml
設定檔案宣告流量篩選規則。此包括可供所有 Sites 和 Forms 客戶使用的流量篩選規則,以及針對那些授權該功能者所提供的 WAF 規則子類別。 - 規則範例: 查看已宣告的規則範例以協助您進行。
- 速率限制規則: 了解如何使用速率限制規則保護您的網站避免受到大量的攻擊。
- 流量篩選規則警報:設定警報,以便在觸發規則時收到通知。
- 來源流量尖峰預設警報:來源出現暗示可能發生 DDoS 攻擊的流量尖峰時收到通知。
- CDN 日誌: 查看哪些宣告的規則和 WAF 標幟與您的流量相符。
- 儀表板工具: 分析您的 CDN 日誌以提出新的流量篩選規則。
- 推薦的入門規則: 一組可以開始使用的入門規則。
- 教學課程: 有關該功能的實用知識,包括如何使用儀表板工具宣告正確的規則。
Adobe 邀請您透過傳送電子郵件至:aemcs-waf-adopter@adobe.com,以提供意見回饋或詢問有關流量篩選規則的問題。
流量保護概觀 traffic-protection-overview
在目前的數位環境中,惡意流量是一種揮之不去的威脅。Adobe 了解風險的嚴重性,並提供多種方法保護客戶應用程式,以及在發生時減輕攻擊。
在邊緣,Adobe Managed CDN 吸收網路
層上的 DoS 攻擊 (第 3 層和第 4 層),包括洪水攻擊和反射/放大攻擊。
預設情況下,Adobe 會採取措施防止因超出特定閾值的意外爆發高流量而導致效能下降。如果有影響網站可用性的 DoS 攻擊,Adobe 的營運團隊會收到警報並採取減輕影響的步驟。
客戶可以透過在不同層的內容傳遞流程設定規則,以採取主動式措施減輕應用程式層攻擊 (第 7 層)。
例如,在 Apache 層,客戶可以設定 Dispatcher 模組或 ModSecurity 以限制對特定內容的存取。
如本文所述,可以將流量篩選器規則部署到 Adobe Managed CDN,方法是使用 Cloud Manager 的設定管道。除了根據 IP 位址、路徑和標頭等屬性的流量篩選規則,或根據設定速率限制的規則之外,客戶也可以授權稱為 WAF 規則的強大流量篩選規則子類別。
建議的流程 suggested-process
以下是制定正確流量篩選規則的高階建議端到端流程:
- 設定非生產和生產設定管道,如設定章節的敘述。
- 已獲得 WAF 流量篩選規則子類別授權的客戶應於 Cloud Manager 加以啟用。
- 閱讀並嘗試本教學課程,以具體了解如何使用流量篩選規則,包括 WAF 規則 (若已獲得授權)。本教學課程將引導您將規則部署到開發環境、模擬惡意流量、下載 CDN 日誌,以及在儀表板工具中進行分析。
- 將推薦的入門規則複製到
cdn.yaml
,並以日誌模式將設定部署到生產環境。 - 在收集一些流量之後,使用儀表板工具分析結果,以了解是否有任何符合的項目。留意誤報,並進行任何必要的調整,最終在區塊模式下啟用入門規則。
- 根據 CDN 日誌的分析新增自訂規則,首先在開發環境中使用模擬流量進行測試,然後以日誌模式部署到中繼和生產環境,然後以區塊模式部署。
- 持續監控流量,隨著威脅態勢的發展來變更規則。
設定 setup
-
建立包含一組流量篩選規則 (包括 WAF 規則) 的檔案
cdn.yaml
。code language-none kind: "CDN" version: "1" metadata: envTypes: ["dev"] data: trafficFilters: rules: # Block simple path - name: block-path when: allOf: - reqProperty: tier matches: "author|publish" - reqProperty: path equals: '/block/me' action: block
有關
data
節點上方屬性的描述,請參閱設定管道文章。kind
屬性值應設定為 CDN,版本應設定為1
。 -
如果 WAF 規則已獲得授權,則應在 Cloud Manager 中啟用該功能 (如下所述),對於新的和現有的計畫案例都適用。
-
在 Cloud Manager 中建立設定管道,依照此文章中所述執行:設定管道文章。管道將參考頂層
config
資料夾,並將cdn.yaml
檔案放置在下面的某個位置,如此處所述。
流量篩選規則語法 rules-syntax
您可以將 流量篩選規則 設定為符合 IPS、使用者代理、要求標頭、主機名稱、地理位置和 URL 等模式。
授權強化的安全性或 WAF-DDoS 保護安全性產品的客戶,也可以設定特殊類別的流量篩選規則 WAF 流量篩選規則 (或簡稱為 WAF 規則),其參考一個或多個 WAF 標幟。
以下是一組流量篩選規則的範例,其中也包括 WAF 規則。
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when:
allOf:
- { reqProperty: path, equals: /block-me }
- { reqProperty: tier, equals: publish }
action:
type: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS]
cdn.yaml
檔案中流量篩選規則的格式如下所述。請參閱後面章節的一些其他範例,和關於速率限制規則的獨立章節。
string
Condition
Action
RateLimit
以下會有一個單獨的章節說明 rateLimit 語法以及範例。
條件結構 condition-structure
條件可以是一個簡單的條件,也可以是一個條件群組。
簡單條件
簡單條件由 getter 和述詞組成。
{ <getter>: <value>, <predicate>: <value> }
群組條件
條件群組由多個簡單和/或群組條件組成。
<allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
- { <getter>: <value>, <predicate>: <value> }
- <allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
array[Condition]
array[Condition]
Getter
string
要求屬性。
之一:
path
:傳回不帶查詢參數的 URL 完整路徑。queryString
:傳回 URL 的查詢部分method
:傳回要求中所使用的 HTTP 方法。tier
:傳回author
、preview
或publish
其中之一。domain
:傳回小寫的網域屬性 (如Host
標頭的定義)clientIp
:傳回用戶端 IP 位址。clientCountry
:傳回兩個字母的代碼 (區域指示器符號),可識別客戶位於哪個國家/地區。
string
string
string
string
application/x-www-form-urlencoded
時才有效述詞
string
string
string
string
string
string
array[string]
array[string]
boolean
附註
- 要求屬性
clientIp
只能與以下述詞一起使用:equals
、doesNotEqual
、in
、notIn
。clientIp
也可以比對 IP 範圍 (在使用in
和notIn
述詞時)。以下範例實作一個條件以評估用戶端 IP 是否在 192.168.0.0/24 的 IP 範圍內 (即從 192.168.0.0 到 192.168.0.255):
when:
reqProperty: clientIp
in: [ "192.168.0.0/24" ]
- Adobe 建議使用 regex101,以及在搭配規則運算式時使用 Fastly Fiddle。您也可以在本文章中了解更多有關 Fastly 如何處理規則運算式的資訊。
動作結構 action-structure
一個action
可以是指定動作 (允許、封鎖或記錄) 的字串,也可以是由動作類型 (允許、封鎖或記錄) 以及 wafFlags 和/或狀態等選項組成的物件。
動作類型
動作根據下表中的類型排定優先順序,以反映動作的執行順序:
wafFlags
(可選),alert
(可選)如果已指定要發送警報,則當規則在 5 分鐘內觸發 10 次時,系統將發送行動中心通知。一旦觸發特定規則的警報,直到第二天 (UTC) 它才會再次觸發。
status, wafFlags
(可選且互斥),alert
(可選)如果已指定要發送警報,則當規則在 5 分鐘內觸發 10 次時,系統將發送行動中心通知。一旦觸發特定規則的警報,直到第二天 (UTC) 它才會再次觸發。
wafFlags
(可選),alert
(可選)如果已指定要發送警報,則當規則在 5 分鐘內觸發 10 次時,系統將發送行動中心通知。一旦觸發特定規則的警報,直到第二天 (UTC) 它才會再次觸發。
WAF 標幟清單 waf-flags-list
在可授權 WAF 流量篩選規則中可以使用的 wafFlags
屬性,可以參考以下內容:
/bin/
以外)CMDEXE
等級的保護,但停用 /bin
的誤報。/foo/./bar
會標準化為 /foo/bar
).htaccess
檔案或可能洩漏敏感資訊的設定檔案考量事項 considerations
-
建立兩個衝突規則時,允許的規則總是優先於封鎖規則。例如,如果您建立一條封鎖特定路徑的規則,又建立一條允許特定 IP 位址的規則,則來自遭封鎖路徑上的該 IP 位址的要求會受到允許。
-
如果規則相符並遭封鎖,CDN 會以
406
傳回代碼回應。 -
設定檔不應包含密碼,因為任何有權存取 git 存放庫的人都可以讀取。
-
在 Cloud Manager 中定義的 IP 允許清單優先於流量篩選規則。
-
WAF 規則的符合項目只會出現在 CDN 未命中和通過的 CDN 記錄中,而非點擊的記錄中。
規則範例 examples
下面是一些規則範例。如需進一步探討速率限制規則的範例,請參閱「速率限制」一節。
範例 1
此規則會封鎖來自 IP 192.168.1.1 的要求:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-from-ip"
when: { reqProperty: clientIp, equals: "192.168.1.1" }
action:
type: block
範例 2
此規則會使用包含 Chrome 的使用者代理程式封鎖發佈的路徑 /helloworld
上的要求:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-from-chrome-on-path-helloworld-for-publish-tier"
when:
allOf:
- { reqProperty: path, equals: /helloworld }
- { reqProperty: tier, equals: publish }
- { reqHeader: user-agent, matches: '.*Chrome.*' }
action:
type: block
範例 3
此規則會封鎖含有查詢參數 foo
的發佈要求,但會允許來自 IP 192.168.1.1 的每個要求:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-that-contains-query-parameter-foo"
when:
allOf:
- { queryParam: url-param, equals: foo }
- { reqProperty: tier, equals: publish }
action:
type: block
- name: "allow-all-requests-from-ip"
when: { reqProperty: clientIp, equals: 192.168.1.1 }
action:
type: allow
範例 4
此規則會封鎖發佈時對路徑 /block-me
的要求,並封鎖和 SQLI
或 XSS
模式相符的每個要求。此範例包含 WAF 流量篩選規則,其參考了 SQLI
和 XSS
WAF 標幟,因此需要單獨的授權。
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when:
allOf:
- { reqProperty: path, equals: /block-me }
- { reqProperty: tier, equals: publish }
action:
type: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS]
範例 5
此規則會封鎖對 OFAC 國家的存取:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: block-ofac-countries
when:
allOf:
- reqProperty: tier
matches: "author|publish"
- reqProperty: clientCountry
in:
- SY
- BY
- MM
- KP
- IQ
- CD
- SD
- IR
- LR
- ZW
- CU
- CI
action: block
速率限制規則
有時,如果流量超過傳入要求的特定速率 (基於特定條件),則需要封鎖流量。設定 rateLimit
屬性的值會限制那些和規則條件相符的要求的速率。
速率限制規則不能參考 WAF 標幟。它們提供給所有網站和表單客戶使用。
速率限制是根據 CDN POP 計算的。例如,假設蒙特婁、邁阿密和都柏林的 POP 流量分別為每秒 80、90 和 120 個請求。並且,速率限制規則設定在以 100 為限。在這種情況下,只有到都柏林的流量會受到速率限制。
速率限制是根據到達邊緣的流量、到達來源的流量或錯誤數量進行評估。
rateLimit 結構 ratelimit-structure
範例 ratelimiting-examples
範例 1
當在過去 10 秒內超過平均 60 個要求/秒時 (per CDN POP),此規則將封鎖用戶端 5 毫秒:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: limit-requests-client-ip
when:
reqProperty: tier
matches: "author|publish"
rateLimit:
limit: 60
window: 10
penalty: 300
count: all
groupBy:
- reqProperty: clientIp
action: block
範例 2
當在 10 秒時間內每秒對來源平均發出超過 100 個要求 (每個 CDN POP),系統就會封鎖在 path /critical/resource 上的要求達 60 秒:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: rate-limit-example
when:
allOf:
- { reqProperty: path, equals: /critical/resource }
- { reqProperty: tier, equals: publish }
action:
type: block
rateLimit: { limit: 100, window: 10, penalty: 60, count: fetches }
流量篩選規則警報 traffic-filter-rules-alerts
規則可設定為在 5 分鐘時間內觸發十次時發送行動中心通知。當出現某些流量模式時,此類規則會向您發送警報,以便您採取任何必要的措施。一旦觸發特定規則的警報,直到第二天 (UTC) 它才會再次觸發。
了解更多關於行動中心,包括如何設定接收電子郵件所需的通知設定檔。
警報屬性可以套用到所有動作類型 (允許、封鎖、記錄) 的動作節點。
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when:
allOf:
- { reqProperty: path, equals: /block-me }
- { reqProperty: tier, equals: publish }
action:
type: block
alert: true
來源流量尖峰預設警報 traffic-spike-at-origin-alert
有大量流量傳送到來源,且其中來自相同 IP 位址的請求臨界值相當高,因而暗示可能發生 DDoS 攻擊時,將傳送行動中心電子郵件通知。
如果達到此臨界值,Adobe 將阻止來自該 IP 位址的流量,但建議採取其他措施來保護您的來源,包括設定速率限制流量篩選規則,以便在臨界值較低時阻擋流量尖峰。請參閱「使用流量篩選器規則封鎖 DoS 和 DDoS 攻擊」教學課程以瞭解引導式逐步說明。
此警報預設為啟用,但可以將 defaultTrafficAlerts 屬性設定為 False 來加以停用。一旦觸發特定規則的警報,直到第二天 (UTC) 它才會再次觸發。
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
defaultTrafficAlerts: false
CDN 記錄 cdn-logs
AEM as a Cloud Service 會提供對 CDN 記錄的存取權,這對於包括快取命中率最佳化以及設定流量篩選規則等使用案例都非常有幫助。選取作者或發佈服務時,CDN 記錄會顯示在 Cloud Manager 下載記錄 對話框中。
CDN 記錄可能會延遲最多五分鐘。
rules
屬性描述要符合哪些流量篩選規則,並具有以下模式:
"rules": "match=<matching-customer-named-rules-that-are-matched>,waf=<matching-WAF-rules>,action=<action_type>"
例如:
"rules": "match=Block-Traffic-under-private-folder,Enable-SQL-injection-everywhere,waf="SQLI,SANS",action=block"
這些規則的行為方式如下:
- 任何符合規則的客戶宣告規則名稱會列於
match
屬性中。 action
屬性會確定規則是阻止、允許或記錄。- 如果 WAF 已取得授權並啟用,
waf
屬性會列出所有偵測到的 WAF 標幟 (例如 SQLI)。無論 WAF 標幟是否列在任何規則中,都是如此。這是提供深入分析要宣告的潛在新規則。 - 如果沒有客戶宣告的規則相符且沒有 WAF 規則相符,則
rules
屬性為空。
如前所述,WAF 規則的符合項目只會出現在 CDN 未命中和通過的 CDN 記錄中,而非點擊的記錄中。
以下範例顯示了一個範例 cdn.yaml
和兩個 CDN 記錄條目:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when: { reqProperty: path, equals: /block-me }
action: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS ]
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/block-me",
"method": "GET",
"res_ctype": "",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=path-rule,action=blocked"
}
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"rid": "974e67f6",
"host": "example.com",
"url": "/?sqli=%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20fAPK",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked"
}
記錄格式 cdn-log-format
以下是 CDN 記錄中使用的欄位名稱清單以及簡要說明。
還會指出該相符程度是否導致封鎖。
例如,「
match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked
」如果沒有相符的規則,則為空白。
儀表板工具 dashboard-tooling
Adobe 提供了將儀表板工具下載到您電腦上的機制,以擷取透過 Cloud Manager 下載的 CDN 日誌。使用此工具,您可以分析流量,以協助制定要宣告的適當流量篩選規則,包括 WAF 規則。
儀表板工具可以直接從 AEMCS-CDN-Log-Analysis-Tooling GitHub 存放庫原地複製。
教學課程可供了解何使用儀表板工具的具體說明。
推薦的入門規則 recommended-starter-rules
您可以將以下推薦的規則複製到您的 cdn.yaml
以開始使用。從日誌模式開始分析您的流量,在滿意之後,變更為封鎖模式。您可能想要根據網站即時流量的獨有特徵修改規則。
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev", "stage", "prod"]
data:
trafficFilters:
rules:
# Block client for 5m when it exceeds an average of 100 req/sec to origin on a time window of 10sec
- name: limit-origin-requests-client-ip
when:
reqProperty: tier
equals: 'publish'
rateLimit:
limit: 100
window: 10
count: fetches
penalty: 300
groupBy:
- reqProperty: clientIp
action: log
# Block client for 5m when it exceeds an average of 500 req/sec on a time window of 10sec
- name: limit-requests-client-ip
when:
reqProperty: tier
equals: 'publish'
rateLimit:
limit: 500
window: 10
count: all
penalty: 300
groupBy:
- reqProperty: clientIp
action: log
# Block requests coming from OFAC countries
- name: block-ofac-countries
when:
allOf:
- { reqProperty: tier, in: ["author", "publish"] }
- reqProperty: clientCountry
in:
- SY
- BY
- MM
- KP
- IQ
- CD
- SD
- IR
- LR
- ZW
- CU
- CI
action: log
# Enable recommended WAF protections (only works if WAF is licensed enabled for your environment)
- name: block-waf-flags-globally
when:
reqProperty: tier
in: ["author", "publish"]
action:
type: log
wafFlags:
- TRAVERSAL
- CMDEXE-NO-BIN
- XSS
- LOG4J-JNDI
- BACKDOOR
- USERAGENT
- SQLI
- SANS
- TORNODE
- NOUA
- SCANNER
- PRIVATEFILE
- NULLBYTE
教學課程 tutorial
有兩個教學課程可供使用。
使用流量篩選規則 (包括 WAF 規則) 保護網站 tutorial-protecting-websites
完成教學課程以獲得有關流量篩選器規則 (包含 WAF 規則) 的實用知識和經驗。
本教學課程將引導您完成:
- 設定 Cloud Manager 設定管道
- 使用工具模擬惡意流量
- 宣告流量篩選規則,包括 WAF 規則
- 使用儀表板工具分析結果
- 最佳做法
使用流量篩選器規則封鎖 DoS 和 DDoS 攻擊 tutorial-blocking-DDoS-with-rules
深入探討如何使用速率限制流量篩選器規則和其他策略來封鎖阻斷服務 (DoS) 和分散式阻斷服務 (DDoS) 攻擊。
本教學課程將引導您完成:
- 了解保護措施
- 當超出速率限制時接收提醒
- 使用儀表板工具分析流量模式,以便設定速率限制流量篩選器規則的臨界值