本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS WAF Classic 的運作方式
警告
AWS WAF 傳統支援將於 2025 年 9 月 30 日結束。
注意
這是 AWS WAF Classic 文件。只有在您在 2019 年 11 月 AWS WAF 之前建立 AWS WAF 規則和 Web 等資源ACLs,且尚未將其遷移至最新版本時,才應該使用此版本。若要遷移您的 Web ACLs,請參閱 將您的 AWS WAF Classic 資源遷移至 AWS WAF。
如需 的最新版本 AWS WAF,請參閱 AWS WAF。
您可以使用 AWS WAF Classic 來控制 API Gateway、Amazon CloudFront 或 Application Load Balancer 如何回應 Web 請求。首先建立條件、規則和 Web 存取控制清單 (web ACLs)。您可以定義條件、將條件合併為規則,並將規則合併為 Web ACL。
注意
您也可以使用 AWS WAF Classic 來保護託管在 Amazon Elastic Container Service (Amazon ECS) 容器中的應用程式。Amazon ECS 是一項高度可擴展的快速容器管理服務,可讓您在叢集上輕鬆執行、停止和管理 Docker 容器。若要使用此選項,請將 Amazon 設定為ECS使用啟用 AWS WAF Classic 的 Application Load Balancer,以路由和保護服務中任務的 HTTP/HTTPS (第 7 層) 流量。如需詳細資訊,請參閱 Amazon Elastic Container Service 開發人員指南 中的 Service Load Balancing 主題。
- 條件
-
條件定義您希望 AWS WAF Classic 在 Web 請求中注意的基本特徵:
-
指令碼可能為惡意。攻擊者可以利用 web 應用程式的漏洞內嵌指令碼。此為跨網站指令碼。
-
發出請求的 IP 地址或地址範圍。
-
發出請求的國家/地區或地理位置。
-
指定請求的部分長度,例如:查詢字串。
-
SQL 可能是惡意的程式碼。攻擊者嘗試透過在 Web 請求中內嵌惡意程式SQL碼,從資料庫中擷取資料。這稱為SQL注入 。
-
字串會出現在請求,例如出現在
User-Agent
標頭的值或出現在查詢字串的文字字串。您也可以使用規則運算式 (regex) 指定這些字串。
某些條件採用多種數值 例如,您可以指定(最多) 10,000 個 IP 地址或在此 IP 條件下的 IP 地址範圍。
-
- 規則
-
您可以將條件結合到規則中,以精確地鎖定要允許、封鎖或計數的請求。 AWS WAF Classic 提供兩種類型的規則:
- 一般規則
-
一般規則只使用條件針對特定請求。例如,根據最近已知攻擊者的請求,您可建立包括以下條件的規則:
-
來自 192.0.2.44 的請求。
-
在
User-Agent
標頭中包含BadBot
值。 -
它們似乎在查詢字串中包含SQL類似 的程式碼。
當規則包含多個條件時,如本範例所示, AWS WAF Classic 會尋找符合所有條件的請求,也就是說,這些
AND
條件會一起存在。請至少新增一項條件至一般規則。沒有條件的一般規則無法符合任何請求,因此永遠不會觸發規則的動作 (允許、計數或封鎖)。
-
- 以速率為基礎的規則
-
以速率為基礎的規則就像一般規則,但增加了速率限制。以速率為基礎的規則會計算從滿足規則條件的 IP 地址抵達的請求數。如果在五分鐘期間內,來自 IP 地址的請求超過速率限制,規則就會觸發動作。可能需要一兩分鐘的時間來觸發動作。
條件對以速率為基礎的規則來說是選用的。如果您未在以速率為基礎的規則中新增任何條件,速率限制會套用到所有 IP 地址。如果您結合條件與速率限制,速率限制會套用到符合條件的 IP 地址。
例如,根據最近已知攻擊者的請求,您可建立包括以下條件的以速率為基礎的規則:
-
來自 192.0.2.44 的請求。
-
在
User-Agent
標頭中包含BadBot
值。
在這以速率為基礎的規則中,您還可以定義的速率限制。在這個範例中,假設您建立的速率限制為 1,000。符合上述兩個條件且每分鐘超過 1,000 個請求的請求會觸發規則的動作 (封鎖或計數),其定義於 Web 中ACL。
未同時符合這兩個條件的請求不會計入速率限制,也不會受到此規則影響。
在第二個範例中,假設您想要限制對您網站的特定頁面所發出的請求。若要這麼做,您可以新增以下字串比對條件至以速率為基礎的規則中:
-
要篩選的請求部分是
URI
。 -
請求類型是
Starts with
。 -
符合值是
login
。
更進一步,您需要指定
RateLimit
為 1,000。透過將此速率型規則新增至 Web ACL,您可以將請求限制在登入頁面,而不會影響網站的其他部分。
-
- Web ACLs
-
將條件合併為規則後,您可以將規則合併為 Web ACL。您可以在此處為每個規則定義動作,例如允許、封鎖或計數,以及預設動作:
- 每個規則的動作
-
當 Web 請求符合規則中的所有條件時, AWS WAF Classic 可以封鎖請求,或允許將請求轉送至API閘道 API、 CloudFront 分佈 或 Application Load Balancer 。您可以指定要 AWS WAF Classic 為每個規則執行的動作。
AWS WAF Classic ACL會根據列出規則的順序,將請求與 Web 中的規則進行比較。 AWS WAF 然後,Classic 會採取與請求相符的第一個規則相關聯的動作。例如,如果 Web 請求符合一個允許請求的規則和另一個封鎖請求的規則, AWS WAF Classic 會根據首先列出的規則允許或封鎖請求。
如果您想要在開始使用新規則之前進行測試,您也可以設定 AWS WAF Classic 來計算符合規則中所有條件的請求。與允許或封鎖請求的規則一樣,計數請求的規則會受到其在 Web 中規則清單中的位置所影響ACL。例如,如果 web 請求符合兩個規則,一個為允許請求,另一個為計數請求,如果該允許請求的規則先列於清單,則不會對此請求進行計數。
- 預設動作
-
預設動作會判斷 AWS WAF Classic 是否允許或封鎖不符合 Web 中任何規則中所有條件的請求ACL。例如,假設您建立 Web ACL並僅新增之前定義的規則:
-
來自 192.0.2.44 的請求。
-
在
User-Agent
標頭中包含BadBot
值。 -
它們似乎在查詢字串中包含惡意程式SQL碼。
如果請求不符合規則中的所有三個條件,且預設動作為
ALLOW
, AWS WAF Classic 會將請求轉送至 API Gateway CloudFront 或 Application Load Balancer ,且服務會以請求的物件回應。如果您將兩個或多個規則新增至 Web ACL,只有在請求不符合任何規則中的所有條件時, AWS WAF Classic 才會執行預設動作。例如,假設您新增第二個規則,其中含有一項條件:
-
請求在
User-Agent
標頭有BIGBadBot
值。
AWS WAF Classic 只有在請求不符合第一個規則中的所有三個條件,且不符合第二個規則中的一個條件時,才會執行預設動作。
-
在某些情況下, AWS WAF 可能會遇到內部錯誤,延遲對 Amazon API Gateway、Amazon CloudFront 或 Application Load Balancer 的回應,以決定是否允許或封鎖請求。在這些情況下 CloudFront,通常會允許請求或提供內容。API Gateway 和 Application Load Balancer 通常會拒絕請求,而不會提供內容。