如何設定網路防火牆規則以封鎖或允許特定網域?
我想使用 AWS Network Firewall 來篩選來自 Amazon Virtual Private Cloud (Amazon VPC) 中資源的傳出 Web 流量。
簡短描述
AWS Network Firewall 使用動作順序或嚴格評估順序來支援網域型傳出 Web 流量篩選。若要設定規則,請使用可設定狀態網域清單規則群組或與 Suricata 相容的字串。網域檢查適用於 HTTP 和 HTTPS 通訊協定。
對於 HTTP,防火牆會檢查主機標頭。對於 HTTPS,防火牆會在 TLS 交握中使用伺服器名稱指示 (SNI)。當您使用網域允許清單時,網路防火牆只會向指定網域傳送流量,並刪除所有其他請求。
如需詳細資訊,請參閱 AWS Network Firewall 中的 Suricata 相容規則字串和 AWS Network Firewall 中的可設定狀態網域清單規則群組。
解決方法
為具有預設動作順序的政策設定網域清單群組
請完成下列步驟:
- 建立防火牆。
- 在 Amazon VPC 主控台的導覽窗格中,在 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。
- 選取要編輯的預設動作順序防火牆政策。
- 在 Stateful rule groups (可設定狀態規則群組) 下,選擇 Actions (動作),然後選擇 Create stateful rule group (建立可設定狀態規則群組)。
- 在 Stateful rule group format (可設定狀態規則群組格式) 中,選擇 Domain list (網域清單)。
注意:您無法變更可設定狀態規則順序,因為它是從政策繼承的。規則順序顯示為動作順序。 - 輸入唯一的規則群組名稱。
- 在 Capacity reservation (容量保留) 中,輸入要包含在清單中的預估網域數量。
**注意:**建立規則群組後,您無法變更其值。 - 在 Domain list (網域清單) 下的 Domain name source (網域名稱來源) 中,輸入您要比對的網域名稱。您可以將網域定義為完全相符,例如 abc.example.com。您也可以將它們定義為萬用字元,例如 .example.com。
- 在 CIDR ranges (CIDR 範圍),請選擇下列其中一個選項:
預設情況下,來源 IP 位址位於與防火牆相同的 VPC 中。
自訂情況下,來源 IP 位址位於遠端 VPC 中。在 Source IP CIDR ranges (來源 IP CIDR 範圍) 下輸入您希望防火牆檢查的來源子網路。 - 在 Protocols (通訊協定) 中,選擇 HTTP and HTTPS (HTTP 和 HTTPS)。
- 在 Action (動作) 中,選擇 Allow (允許)。
- 選擇 Create rule group (建立規則群組)。
為具有動作順序評估的政策定義與 Suricata 相容的 IPS 規則
請完成下列步驟:
- 建立防火牆。
- 在 Amazon VPC 主控台的導覽窗格中,在 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。
- 選取要編輯的預設動作順序防火牆政策。
- 在 Stateful rule groups (可設定狀態規則群組) 下,選擇 Actions (動作),然後選擇 Create stateful rule group (建立可設定狀態規則群組)。
- 在 Stateful rule group format (可設定狀態規則群組格式) 中,選擇 Suricata Compatible rule string (與 Suricata 相容的規則字串)。
注意:您無法變更可設定狀態規則順序,因為它是從政策繼承的。規則順序顯示為動作順序。 - 輸入唯一的規則群組名稱。
- 在 Capacity reservation (容量保留) 中,輸入要包含在清單中的預估網域數量。
**注意:**建立規則群組後,您無法變更其值。 - (選用) 定義要在 Suricata 簽章中使用的自訂規則變數。
- (選用) 定義要在 Suricata 簽章中使用的 IP 集參考。
- 在 Suricata compatible rule string (與 Suricata 相容的規則字串) 下,輸入以下規則:
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;) pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;) drop http $HOME_NET any -> $EXTERNAL_NET any (http.header_names; content:"|0d 0a|"; startswith; msg:"not matching any HTTP allowlisted FQDNs"; flow:to_server, established; sid:5; rev:1;) drop tls $HOME_NET any -> $EXTERNAL_NET any (msg:"not matching any TLS allowlisted FQDNs"; flow:to_server, established; sid:6; rev:1;)
**注意:**在上述規則中,將網域替換為您要包含的網域。 選擇 Create rule group (建立規則群組)。
**注意:**網域規則通常包括已建立的流程關鍵字,但它可能無法解釋所有流程外的封包交換邊緣情況。在使用範例規則清單之前,請測試該規則以確認其是否如預期運作。
為具有嚴格評估順序的政策設定網域清單規則群組
請完成下列步驟:
- 建立防火牆。
- 在 Amazon VPC 主控台的導覽窗格中,在 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。
- 選取要編輯的嚴格評估順序防火牆政策。
- 在 Stateful rule groups (可設定狀態規則群組) 下,選擇 Actions (動作),然後選擇 Create stateful rule group (建立可設定狀態規則群組)。
- 在 Stateful rule group format (可設定狀態規則群組格式) 中,選擇 Domain list (網域清單)。
注意:您無法變更可設定狀態規則順序,因為它是從政策繼承的。規則順序顯示為嚴格。 - 輸入唯一的規則群組名稱。
- 在 Capacity reservation (容量保留) 中,輸入要包含在清單中的預估網域數量。
**注意:**建立規則群組後,您無法變更其值。 - 在 Domain list (網域清單) 下的 Domain name source (網域名稱來源) 中,輸入您要比對的網域名稱。您可以將網域定義為完全相符,例如 abc.example.com。您也可以將它們定義為萬用字元,例如 .example.com。
- 在 CIDR ranges (CIDR 範圍),請選擇下列其中一個選項:
預設情況下,來源 IP 位址位於與防火牆相同的 VPC 中。
自訂情況下,來源 IP 位址位於遠端 VPC 中。在 Source IP CIDR ranges (來源 IP CIDR 範圍) 下輸入您希望防火牆檢查的來源子網路。 - 在 Protocols (通訊協定) 中,選擇 HTTP and HTTPS (HTTP 和 HTTPS)。
- 在 Action (動作) 中,選擇 Allow (允許)。
- 選擇 Create rule group (建立規則群組)。
- 在導覽窗格中的 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。
- 選取您的嚴格順序政策。
- 在 Stateful rule evaluation order and default actions (可設定狀態規則評估順序和預設動作) 中,選擇 Edit (編輯)。
- 在 Default actions (預設動作) 中,選擇 Drop established (刪除已建立),然後選擇 Save (儲存)。
為具有嚴格評估順序的政策定義與 Suricata 相容的 IPS 規則
請完成下列步驟:
- 建立防火牆。
- 在 Amazon VPC 主控台的導覽窗格中,在 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。
- 選取要編輯的嚴格評估順序防火牆政策。
- 在 Stateful rule groups (可設定狀態規則群組) 下,選擇 Actions (動作),然後選擇 Create stateful rule group (建立可設定狀態規則群組)。
- 在 Stateful rule group format (可設定狀態規則群組格式) 中,選擇 Suricata Compatible rule string (與 Suricata 相容的規則字串)。
注意:您無法變更可設定狀態規則順序,因為它是從政策繼承的。規則順序顯示為嚴格。 - 輸入唯一的規則群組名稱。
- 在 Capacity reservation (容量保留) 中,輸入要包含在清單中的預估網域數量。
**注意:**建立規則群組後,您無法變更其值。 - (選用) 定義自訂規則變數,以在您定義的 Suricata 簽章中使用。
- (選用) 定義 IP 集參考,以在您定義的 Suricata 簽章中使用。
- 在 Suricata compatible rule string (與 Suricata 相容的規則字串) 下,輸入以下規則:
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;) pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)
**注意:**在上述規則中,將網域替換為您要包含的網域。 選擇 Create rule group (建立規則群組)。 在導覽窗格中的 Network Firewall (網路防火牆) 下,選擇 Firewall policies (防火牆政策)。 選取您的嚴格順序政策。 在 Stateful rule evaluation order and default actions (可設定狀態規則評估順序和預設動作) 中,選擇 Edit (編輯)。 在 Default actions (預設動作) 中,選擇 Drop established (刪除已建立),然後選擇 Save (儲存)。
**注意:**網域規則通常包含已建立的流程關鍵字,但此關鍵字可能無法涵蓋所有封包在正常連線流程之外交換的邊緣情況。在使用範例規則清單之前,請測試該規則以確認其是否如預期運作。
測試您的組態
若要測試您的組態是否有效,請對指定的網域執行 curl 命令。
以下範例命令會測試對 https:///example.com 網域的 HTTPS 存取:
curl -v --silent https://example.com --stderr - | grep 200
如果允許存取,那麼您將收到以下輸出:
< HTTP/2 200
以下範例命令會測試對 http://www.google.com 的 HTTP 存取:
curl -v http://www.google.com
以下範例輸出顯示防火牆規則會封鎖 HTTP 流量,因為連線在 GET 請求處停止:
* Trying 172.253.115.99:80... * Connected to www.google.com (http://www.google.com/) (172.253.115.99) port 80 (#0) > GET / HTTP/1.1 > Host: www.google.com (http://www.google.com/) > User-Agent: curl/7.79.1 > Accept: /
以下範例命令會測試對 https://www.google.com 的 HTTPS 存取:
curl -v https://www.google.com
輸出顯示 HTTPS 流量遭封鎖,因為連線在 TLS 交握期間停止:
* Trying 172.253.115.147:443... * Connected to www.google.com (https://www.google.com/) (172.253.115.147) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1):
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前