如何將 AWS Global Accelerator 與 AWS WAF 搭配使用,以阻止採用 Layer 7 HTTP 方法和標頭存取我的應用程式?

2 分的閱讀內容
0

將啟用 AWS WAF 的 Application Load Balancer 與 AWS Global Accelerator 搭配使用時,如果請求方法為 POST,或者 user-agent 標頭值與 curl/7.79 相符,我想要封鎖對應用程式的請求。

簡短說明

您可以將 AWS WAF 和 Application Load Balancer 與 Global Accelerator 搭配使用,以封鎖對 Layer 7 HTTP 方法和標頭的存取。在此架構中,AWS WAF 會將 Web 存取控制清單 (Web ACL) 規則與 Application Load Balancer 搭配使用。負載平衡器成為 Global Accelerator 的端點。
**注意:**AWS Global Accelerator 本身並不支援 AWS WAF。

與負載平衡器關聯的 Web ACL 規則將評估傳入的流量,並且僅會將符合規則的要求轉傳至端點。

解決方法

針對受保護資源的所有 HTTP(S) Web 請求,Web ACL 規則將提供精細的控制。使用此規則來設定字串,或者與一項或多項請求屬性相符的規則運算式,例如統一資源識別項 (URI)、查詢字串、HTTP 方法,或標頭索引鍵。

先決條件

  • 請確定您具有 Global Accelerator、Application Load Balancer 和 AWS WAF 的下列流量組態:
    User --> Global Accelerator --> Application Load Balancer with AWS WAF --> EC2 instance
    **注意:**在此設定中,使用者向加速器發出請求,藉此來存取應用程式。加速器會將使用者流量路由至與之關聯的 Application Load Balancer 和 AWS WAF。AWS WAF 會進行評估,然後會封鎖或允許採用 Layer 7 HTTP 方法或 user-agent 標頭值的使用者請求。

建立以規則為基礎的 Web ACL

請使用以下 3 個步驟的程序,來建立以規則為基礎的 Web ACL。如需詳細資訊,請參閱建立 Web ACL

建立 Web ACL

  1. 導覽至 AWS WAF 主控台,以建立 Web ACL。
  2. 選擇建立 Web ACL
  3. 為 Web ACL 命名。選取 Application Load Balancer 的區域。
  4. 將 Application Load Balancer 與 Web ACL 建立關聯。
  5. 選擇下一步

將自訂規則新增至 Web ACL

繼續如下設定:

  1. 選擇新增規則。從下拉式清單中選取新增我自己的規則和規則群組
  2. 規則產生器下方新增規則。
  3. 為規則命名 (例如 deny_User-Agent_with_POST)。
  4. 類型下方,選取一般規則

設定規則的符合條件

完成其餘步驟:

  1. 選取與至少一個陳述式 (OR) 相符

  2. statement1 下完成如下操作:
    **檢查:**單一標頭
    **標頭欄位名稱:**User-Agent
    **比對類型:**與字串完全相符
    **比對字串:**curl/7.79.0

    statement2 下完成如下操作:
    **檢查:**HTTP 方法
    **比對類型:**與字串完全相符
    **比對字串:**POST

  3. 選擇封鎖以執行動作。

使用 user-agent 標頭值來測試結果

使用 Global Accelerator 的 URL 和 user-agent 標頭值 curl/7.79.0,搭配 GET 請求方法,來存取應用程式。

curl http://<your Global Accelerator URL> -v -H "User-Agent:curl/7.79.0"
> GET / HTTP/1.1
> Host: <your Global Accelerator DNS>
> User-Agent:curl/7.79.0

< HTTP/1.1 403 Forbidden  
< Server: awselb/2.0
<
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>

**注意:**使用您的 Global Accelerator URL <your Global Accelerator URL> 來取代。使用您的 DNS <your Global Accelerator DNS> 來取代。

請注意,AWS WAF 已封鎖請求,Application Load Balancer 則已回應並顯示「403 禁止」訊息。

使用 POST 請求來測試結果

使用 Global Accelerator 的 URL 和 user-agent 標頭值 curl/7.79.1,搭配 POST 請求方法,來存取應用程式。

curl -X POST http://<your Global Accelerator URL> --user "test-user:test-password" -v
> POST / HTTP/1.1
> Host: <your Global Accelerator DNS>
> Authorization: Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=
> User-Agent: curl/7.79.1
>
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>

**注意:**使用您的 Global Accelerator URL <your Global Accelerator URL> 來取代。使用您的 DNS <your Global Accelerator DNS> 來取代。

請注意,AWS WAF 已封鎖請求,Application Load Balancer 則已回應並顯示「403 禁止」訊息。

AWS 官方
AWS 官方已更新 1 年前