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 彈性容器服務開發人員指南中的主題服務負載平衡

條件

條件定義了您希望 C AWS WAF lassic 在 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 程式碼的查詢字串。

當規則包含多個條件時 (如此範例所示),C AWS WAF lassic 會尋找符合所有條件的要求,也就是說,它是一起的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 請求符合規則中的所有條件時,C AWS WAF lassic 可以阻止請求或允許將請求轉發到 API Gateway API, CloudFront 分發或 Application Load Balancer。您可以指定要AWS WAF傳統針對每個規則執行的動作。

AWS WAF「典型」會依照您列出規則的順序,將請求與 Web ACL 中的規則進行比較。 AWS WAFClassic 接著會採取與要求相符之第一個規則相關聯的動作。例如,如果 Web 要求符合一個允許要求的規則,而另一個封鎖要求的規則相符,則AWS WAF傳統會根據最先列出的規則來允許或封鎖要求。

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

預設動作

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

  • 來自 192.0.2.44 的請求。

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

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

如果要求不符合規則中的全部三個條件,且預設動作為ALLOW,C AWS WAF lassic 會將要求轉送至 API Gateway CloudFront 或 Application Load Balancer,而服務會以要求的物件回應。

如果您將兩個或多個規則新增至 Web ACL,則只有在要求不符合任何規則中的所有條件時,C AWS WAF lassic 才會執行預設動作。例如,假設您新增第二個規則,其中含有一項條件:

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

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

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