操作說明AWS WAF傳統作品 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

操作說明AWS WAF傳統作品

注意

這是AWS WAF傳統文件中)。如果您在 2019 年 11 月 AWS WAF 之前建立 AWS WAF 資源 (例如規則和 Web ACL),而且並未將其移轉至最新版本,則應該只使用此版本。若要移轉資源,請參閱 遷移您的AWS WAF傳統資源AWS WAF

如需的最新版本AWS WAF,請參閱AWS WAF

您使用AWS WAF傳統控制 API Gateway、Amazon CloudFront 或 Application Load Balancer 回應 Web 請求的方式。首先,建立條件、規則和 web 存取控制清單 (Web ACL)。定義您的條件,並將您的條件組合成規則,再組合這些規則到 Web ACL 中。

注意

您也可以使用AWS WAF傳統保護 Amazon Elastic Container Service (Amazon ECS) 容器中託管的應用程式。Amazon ECS 是具高可擴展性且快速的容器管理服務,可以在叢集上輕鬆執行、停止和管理 Docker 容器。若要使用此選項,請將 Amazon ECS 配置為使用AWS WAF傳統啟用的 Application Load Balancer,以路由和保護服務中任務間的 HTTP/HTTPS (第 7 層) 流量。如需詳細資訊,請參閱主題服務負載平衡中的Amazon Elastic Container Service 開發者指南

條件

條件定義您希望的基礎特徵AWS WAF傳統在 Web 請求中觀看:

  • 指令碼可能為惡意。攻擊者可以利用 web 應用程式的漏洞內嵌指令碼。此為跨網站指令碼

  • 發出請求的 IP 地址或地址範圍。

  • 發出請求的國家/地區或地理位置。

  • 指定請求的部分長度,例如:查詢字串。

  • SQL 程式碼可能為惡意。攻擊者會藉由內嵌惡意 SQL 程式碼於 web 請求中,嘗試從您的資料庫碼擷取資料。此為 SQL injection

  • 字串會出現在請求,例如出現在 User-Agent 標頭的值或出現在查詢字串的文字字串。您也可以使用規則運算式 (regex) 指定這些字串。

某些條件採用多種數值 例如,您可以指定(最多) 10,000 個 IP 地址或在此 IP 條件下的 IP 地址範圍。

規則

您可以將條件組合成規則,以精準鎖定要允許、封鎖或計數的請求。AWS WAF傳統提供兩種規則類型:

一般規則

一般規則只使用條件針對特定請求。例如,根據最近已知攻擊者的請求,您可建立包括以下條件的規則:

  • 來自 192.0.2.44 的請求。

  • User-Agent 標頭中包含 BadBot 值。

  • 它們好像有包含類似 SQL 程式碼的查詢字串。

當規則包含多個條件時,如在此範例中,AWS WAF典型會尋找符合所有條件的請求 — 也就是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 ACL

將您的條件組合成規則後,再組合這些規則到 Web ACL 中。這是您定義每個規則動作的位置:允許、封鎖或計數和預設動作:

每個規則的動作

當 web 請求符合條件裡的所有規則時,AWS WAF傳統可以封鎖請求或允許請求轉送至 API Gateway API、CloudFront 分發或 Application Load Balancer。您可以指定您想要的動作AWS WAF傳統要為每個規則執行。

AWS WAF傳統會按照您列出規則的順序,比較請求與 Web ACL 中的規則。AWS WAF傳統接著採取與請求所符合的第一個規則關聯的動作。例如,如果 Web 請求符合兩個規則,一個為允許請求,另一個為封鎖請求,AWS WAF傳統將根據規則所列的順序決定允許或封鎖請求。

在使用新的規則前,如果您想先進行測試,您可以設定AWS WAF傳統計數符合規則中條件的請求數量。與允許或封鎖請求的規則一樣,計數請求的規則受其自身在 web ACL 清單上所列的順序影響。例如,如果 web 請求符合兩個規則,一個為允許請求,另一個為計數請求,如果該允許請求的規則先列於清單,則不會對此請求進行計數。

預設動作

預設動作會決定AWS WAF傳統允許或封鎖不符合 Web ACL 中任何規則中條件的請求。例如,假設您建立 Web ACL,僅新增您之前定義過的規則:

  • 來自 192.0.2.44 的請求。

  • User-Agent 標頭中包含 BadBot 值。

  • 它們好像有包含惡意 SQL 的查詢字串。

如果請求不符合這三個規則中的條件且假設預設動作為ALLOW、AWS WAF傳統會將請求轉送至 API Gateway、CloudFront 或 Application Load Balancer,且服務會回應請求的物件。

如果您將兩個或以上的規則新增至 Web ACL,AWS WAFClassic (傳統) 只當請求不滿足任何規則中的所有條件時,才會執行預設動作。例如,假設您新增第二個規則,其中含有一項條件:

  • 請求在 User-Agent 標頭有 BIGBadBot 值。

AWS WAF傳統只當請求不符合第一個規則中的所有三條件且不符合第二個規則中的一個條件時,才會執行預設動作。

在某些情況下AWS WAF可能會遭遇內部錯誤,導致對 Amazon API Gateway、Amazon CloudFront 或 Application Load Balancer 是否允許或封鎖請求的回應受到延遲。在這些情況下,CloudFront 通常會允許請求或提供內容。API Gateway 和應用程式負載平衡器通常則會拒絕請求,而且不會處理內容。