如何同時設定網路防火牆標準規則群組和網域清單規則群組規則?
我想要設定 AWS Network Firewall 標準規則群組規則和網域清單規則群組規則,以便如預期控制流量。
簡短描述
您可以設定標準規則群組規則,以捨棄已建立的 TCP 流量。然後,您可以設定網域清單規則群組規則,以允許 TCP (TLS) 流程從網域清單規則群組傳送到允許的網域。您可以透過使用「flow」關鍵字設定網域清單規則群組和標準規則群組規則來達成此目的。
**注意:**Amazon 虛擬私有雲端 (Amazon VPC) 主控台只會顯示先前設定的規則選項。它不允許您添加規則選項。如需詳細資訊,請參閱 AWS 網路防火牆中的標準可設定狀態規則群組。
您可以使用 AWS CloudFormation 或 API 為標準規則群組規則指定規則選項。本文中的範例使用 AWS 命令列界面 (AWS CLI):
**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI。
解決方案
前提
在設定網路防火牆規則之前,請先檢閱下列資訊:
- 本文介紹一種設定標準規則群組規則的方法,以允許輸入規則選項。在此範例中,將規則選項新增至標準規則群組規則可讓其與網域清單規則群組搭配使用。這使您可以更好地控制流量。
- 本文使用其中一個分散式部署模型。此模型使用用戶端 Amazon 彈性運算雲端 (Amazon EC2) 執行個體和網際網路閘道,保護工作負載公有子網路之間的流量。防火牆策略規則順序設定為預設處理行動順序。
- 允許 Amazon EC2 執行個體在 VPC 安全群組和網路 ACL 中的 TCP 連接埠 443 上傳送流量。
- 本文中使用的防火牆規則是參考的範例。您必須確定為防火牆設定的規則符合您的特定需求,並如預期般運作。
**注意:**在本文的程式碼範例中,已使用省略符號 (...) 來縮短輸出。
不含流量關鍵字的網域清單規則群組與標準規則群組的一般組態
當您設定網域清單規則群組和標準規則群組時,您的組態可能類似於此範例中詳述的組態。如果您建立網域清單規則群組和標準規則群組,則必須使用 flow 關鍵字。如果您不使用 flow 關鍵字,則可能會遇到諸如此示例中詳述的問題。
在此範例中,Amazon VPC 主控台用於建立網域清單規則群組。此規則允許 HTTPS 流量範例使用網站。
Domain name source: example.com Source IPs type: Default Protocol: HTTPs Action: Allow
**注意:**動作設為「允許」的網域清單規則群組會產生另一個規則。此規則設定為拒絕與網域規格不符的指定通訊協定類型的流量。如需詳細資訊,請參閱網域篩選。
使用 Amazon VPC 主控台建立標準規則群組規則的通用組態會產生類似下表的輸出:
協議 | 來源 | 目的地 | 來源連接埠 | 目標連接埠 | 方向 | 動作 |
---|---|---|---|---|---|---|
傳輸控制協定 | 任何 | 任何 | 任何 | 任何 | 向前 | 掉落 |
傳送要求至允許的網域以測試您的規則組態時,流量會遭到封鎖,而您會收到「連線逾時」錯誤訊息:
$ curl -kv -so /dev/null https://example.com * Trying 93.184.216.34:443... * connect to 93.184.216.34 port 443 failed: Connection timed out * Failed to connect to example.com port 443 after 129180 ms: Connection timed out * Closing connection 0
此組態會導致所有 TCP 流量中斷,且連線逾時。這包括封鎖以 TCP 為基礎的流量傳輸至允許的網域** example.com**。
允許透過 HTTPS 進行** example.com 的網域清單規則群組規則失敗,因為 TCP 通訊協定是第一個出現在初始流程中的通訊協定。流程從較低層 TCP 交握開始,並評估拒絕規則。但是,仍然沒有要匹配的 TLS 協議,因此放置規則匹配。這會導致例如 .com** 的所有流量都下降。
**注意:**您可以為防火牆的可設定狀態引擎設定記錄等級,以便存取有關篩選流量的詳細資訊。如需詳細資訊,請參閱記錄來自 AWS 網路防火牆的網路流量。
具有流量關鍵字的網域清單規則群組和標準規則群組規則
您可以使用網路防火牆描述規則群組和更新規則群組命令來更新標準規則群組規則,以包含其他流程關鍵字。
- 對原始的可設定狀態規則群組物件執行描述規則群組命令。您需要更新權杖值才能執行更新規則群組命令。
**注意:**以下命令的一部分輸出用作 JSON 模板,以便稍後進行其他調整。
$ aws network-firewall describe-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --output json { "UpdateToken": "40b87af5-a20c-4f8c-8afd-6777c81add3c", (...) "RulesSource": { "StatefulRules": [{ "Action": "DROP", "Header": { "Protocol": "TCP", "Source": "Any", "SourcePort": "Any", "Direction": "FORWARD", "Destination": "Any", "DestinationPort": "Any" }, "RuleOptions": [{ "Keyword": "sid", "Settings": [ "5" ] }] }] } (...) }
- 使用修改後的規則組態建立 JSON 規則檔案。執行類似下列的命令來驗證 JSON 規則檔案內容:
$ cat tcp-drop-rule-updated.json { "RulesSource": { "StatefulRules": [ { "Action": "DROP", "Header": { "Direction": "FORWARD", "Protocol": "TCP", "Destination": "Any", "Source": "Any", "DestinationPort": "Any", "SourcePort": "Any" }, "RuleOptions": [ { "Keyword": "sid", "Settings": [ "5" ] }, { "Keyword": "flow", "Settings": [ "established, to_server" ] } ] } ] } }
在此範例中,當將要求傳送至** example.com** 時,flow 關鍵字允許 TCP 交涉在評估 TCP 放置規則之前完成。在此之後,規則預設動作順序優先順序。網域清單允許** example.com** 相符項目的 HTTPS 規則,允許其餘流量通過該流程。任何到不允許網域的流量都會遭到封鎖,以及任何其他已建立的 TCP 流量。
- 使用 ** UpdateToken** 值和 JSON 規則檔案執行更新規則群組命令,以更新標準規則群組:
$ aws network-firewall update-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --update-token 40b87af5-a20c-4f8c-8afd-6777c81add3c --rule-group file://tcp-drop-rule-updated.json --output json
結果看起來類似於以下輸出:
{ "UpdateToken": "bf8fe6d4-f13e-406c-90c1-9e3bad2118a7", "RuleGroupResponse": {(...)}, "LastModifiedTime": "2023-02-07T14:12:14.993000+11:00" } }
- 執行描述規則群組命令,以驗證可設定狀態規則群組的變更:
$ aws network-firewall describe-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --output json
輸出看起來類似下列訊息:
{(...) "RulesSource": { "StatefulRules": [ { "Action": "DROP", "Header": { "Protocol": "TCP", "Source": "Any", (...) }, "RuleOptions": [ { "Keyword": "sid", "Settings": [ "5" ] }, { "Keyword": "flow", "Settings": [ "established, to_server" ] (...) } }, "RuleGroupResponse": {(...) }, "LastModifiedTime": "2023-02-07T14:12:14.993000+11:00" } }
注意:在前面的例子中,「已建立,到\ _server」 反映了更新規則組命令的更改。
- 確認網域清單規則群組和標準規則群組都正確篩選流量:
$ curl -kv -so /dev/null https://example.com * Trying 93.184.216.34 :443... * Connected to example.com ( 93.184.216.34 ) port 443 (#0) (...) > GET / HTTP/1.1 > Host: example.com (...) < HTTP/1.1 200 OK (...)
在前面的範例中,輸出顯示連至允許的網域** example.com 的 HTTPS 流量會依照設定**成功。
在下一個範例中,不允許的網域的 HTTPS 流量會如預期般遭到封鎖:
$ curl -m 5 -kv -so /dev/null https://www.amazon.com * Trying 93.184.216.34 :443... * Connected to www.amazon.com ( 93.184.216.34 ) port 443 (#0) (...) * TLSv1.2 (OUT), TLS handshake, Client hello (1): (...) * Operation timed out after 5000 milliseconds with 0 out of 0 bytes received * Closing connection 0
其他類型的 TCP 流量也會根據組態封鎖:
$ aws s3 ls --cli-read-timeout 30 --debug (...) Read timeout on endpoint URL: "https://s3.amazonaws.com/"
相關資訊
相關內容
- 已提問 10 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前