將啟用 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 方法,或標頭索引鍵。
先決條件
建立以規則為基礎的 Web ACL
請使用以下 3 個步驟的程序,來建立以規則為基礎的 Web ACL。如需詳細資訊,請參閱建立 Web ACL。
建立 Web ACL
- 導覽至 AWS WAF 主控台,以建立 Web ACL。
- 選擇建立 Web ACL。
- 為 Web ACL 命名。選取 Application Load Balancer 的區域。
- 將 Application Load Balancer 與 Web ACL 建立關聯。
- 選擇下一步。
將自訂規則新增至 Web ACL
繼續如下設定:
- 選擇新增規則。從下拉式清單中選取新增我自己的規則和規則群組。
- 在規則產生器下方新增規則。
- 為規則命名 (例如 deny_User-Agent_with_POST)。
- 在類型下方,選取一般規則。
設定規則的符合條件
完成其餘步驟:
-
選取與至少一個陳述式 (OR) 相符。
-
在 statement1 下完成如下操作:
**檢查:**單一標頭
**標頭欄位名稱:**User-Agent
**比對類型:**與字串完全相符
**比對字串:**curl/7.79.0
在 statement2 下完成如下操作:
**檢查:**HTTP 方法
**比對類型:**與字串完全相符
**比對字串:**POST
-
選擇封鎖以執行動作。
使用 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 禁止」訊息。