操作方式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 如何, 亞馬遜 CloudFront 或 Application Load Balancer 響應 Web 請求。首先,建立條件、規則和 web 存取控制清單 (Web ACL)。定義您的條件,並將您的條件組合成規則,再組合這些規則到 Web ACL 中。

注意

您也可以使用AWS WAFClassic (傳統),保護 Amazon Elastic Container Service (Amazon ECS) 容器中託管的 Application (傳統)。Amazon ECS 是高可擴展性且快速的容器管理服務,可以在集羣上輕鬆執行、停止和管理 Docker 容器。要使用此選項,您需要將亞馬遜雲服務器配置為使用AWS WAF傳統啟用的 Application Load Balancer,可在服務中任務間路由和保護 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 WAFClassic (傳統) 提供兩種規則:

一般規則

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

  • 來自 192.0.2.44 的請求。

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

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

當規則包含多個條件時,如本例所示,AWS WAFClassic 查找與所有條件匹配的請求-即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 WAFClassic (傳統) 可以封鎖請求或允許將請求轉送到 API Gateway API, CloudFront 分發或 Application Load Balancer。您可以指定您想要的動作AWS WAFClassic (傳統) 執行每一個規則。

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

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

預設動作

默認操作決定AWS WAFClassic (傳統) 會允許或封鎖不符合 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 (傳統) 僅當請求不符合任一規則中的所有條件時,Classic (傳統) 才會執行預設動作。例如,假設您新增第二個規則,其中含有一項條件:

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

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

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