如何配置我的 Network Firewall 规则以阻止或允许特定域?

4 分钟阅读
0

我想使用 AWS Network Firewall 筛选来自 Amazon Virtual Cloud(Amazon VPC)中资源的出站网络流量。

简短描述

Network Firewall 策略和规则组由其规则评估顺序来定义,具有默认的操作顺序或严格的评估顺序。为默认操作顺序配置的防火墙策略将按以下顺序来评估规则:传递、丢弃、拒绝和告警。默认策略的有状态默认操作是通过。

通过严格的评估顺序,系统将按优先级从低到高的顺序来评估规则组。然后,系统将按照组内规则的配置顺序来对其进行评估。严格订单策略的有状态默认操作是可配置的,例如配置已建立丢弃。默认规则组与默认操作顺序策略关联,而严格顺序规则组与严格评估顺序策略关联。

您可以配置 Network Firewall 以允许或阻止对特定域的访问。对于使用默认操作顺序或严格评估顺序的策略或规则,可以使用以下方法之一来完成:

  • 有状态域列表规则组
  • Suricata 兼容的 IPS 规则

可以为 HTTP 和 HTTPS 协议配置有状态域名检查。对于 HTTP,请求不会被加密,并且允许 Network Firewall 查看 HTTP 主机标头中的主机名值。对于 HTTPS,Network Firewall 会在 TLS 握手中使用服务器名称指示 (SNI) 扩展名来确定主机名。然后,防火墙会将主机名(或域名)与配置的 HTTP 或 TLS 规则进行比较。

如果有域允许名单,防火墙就只会将 HTTP 或 HTTPS 请求传递到指定的域。对所有其他域的请求都将被丢弃。

解决方法

默认操作顺序

对于具有默认操作顺序的策略,请配置域列表规则组,以便允许向特定域传递 HTTP 和 HTTPS 请求。

1.    打开 Amazon VPC 控制台

2.    创建防火墙

3.    在导航窗格的 Network Firewall 下,选择防火墙策略

4.    选择您要编辑的默认操作顺序防火墙策略。

5.    在有状态规则组下,选择操作,然后选择创建有状态规则组

6.    输入唯一的规则组名称。

7.    对于容量预留,输入列表中将包括的估计域数。此值在创建规则组后无法更改。

8.    对于有状态规则组选项,选择域列表
注意:有状态规则顺序无法更改,因为它继承自策略。规则顺序显示为默认

9.    在域列表下的域名来源中,输入您要匹配的域名。域可定义为完全匹配,例如 abc.example.com。它们也可以定义为通配符,例如 .example.com

10.    对于源 IP 类型,如果源 IP 存在于与防火墙相同的 VPC 中,请选择默认。如果源 IP 存在于远程 VPC 中,请选择已定义。选择已定义时,在源 IP CIDR 范围下输入要让防火墙检查的源子网。

11.    对于协议,选择 HTTP 和 HTTPS

12.    对于操作,选择允许

13.    选择创建并添加到策略中

要为 HTTP 和 HTTPS 手动定义 Suricata 兼容的 IPS 规则,请在规则组中配置默认操作顺序 Suricata 兼容的 IPS 规则。

1.    打开 Amazon VPC 控制台

2.    创建防火墙

3.    在导航窗格的 Network Firewall 下,选择防火墙策略

4.    选择您要编辑的默认操作顺序防火墙策略。

5.    在有状态规则组下,选择操作,然后选择创建有状态规则组

6.    输入唯一的规则组名称。

7.    对于容量预留,输入列表中将包括的预计规则数。此值在创建规则组后无法更改。

8.    对于有状态规则组选项,选择 Suricata 兼容的 IPS 规则
注意:有状态规则顺序无法更改,因为它继承自策略。规则顺序显示为默认

9.    (可选)定义用于 Suricata 签名中的自定义规则变量。

10.    (可选)定义用于 Suricata 签名中的 IP 集参考。

11.    在 Suricata 兼容的 IPS 规则下,输入以下规则。将域更改为您要处理的特定域。

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;)

12.    选择创建并添加到策略中
**注意:**已建立的流关键字通常用于域规则中,但它可能没有考虑所有流数据包交换边缘的情况。在使用任何示例规则列表之前,测试该规则以验证其是否按预期工作。

严格评估顺序

对于具有严格评估顺序的策略,请配置域列表规则组,以允许向特定域发出 HTTP 和 HTTPS 请求。

1.    打开 Amazon VPC 控制台

2.    创建防火墙

3.    在导航窗格的 Network Firewall 下,选择防火墙策略

4.    选择您要编辑的严格评估顺序防火墙策略。

5.    在有状态规则组下,选择操作,然后选择创建有状态规则组

6.    输入唯一的规则组名称。

7.    对于容量预留,输入列表中将包括的估计域数。此值在创建规则组后无法更改。

8.    对于有状态规则组选项,选择域列表
注意:有状态规则顺序无法更改,因为它继承自策略。规则顺序显示为严格

9.    在域列表下的域名来源中,输入您要匹配的域名。域可定义为完全匹配,例如 abc.example.com。它们也可以定义为通配符,例如 .example.com

10.    对于源 IP 类型,如果源 IP 存在于与防火墙相同的 VPC 中,请选择默认。如果源 IP 存在于远程 VPC 中,请选择已定义。选择已定义时,在源 IP CIDR 范围下输入要让防火墙检查的源子网。

11.    对于协议,选择 HTTP 和 HTTPS

12.    对于操作,选择允许

13.    选择创建并添加到策略中

14.    在导航窗格的 Network Firewall 下,选择防火墙策略

15.    选择您将该规则组添加至的严格顺序策略。

16.    对于有状态规则评估顺序和默认操作,选择编辑

17.    对于默认操作,选择已建立丢弃。然后,选择保存

要为 HTTP 和 HTTPS 手动定义 Suricata 兼容的 IPS 规则,请在规则组中配置严格评估顺序 Suricata 兼容的 IPS 规则。

1.    打开 Amazon VPC 控制台

2.    创建防火墙

3.    在导航窗格的 Network Firewall 下,选择防火墙策略

4.    选择您要编辑的严格评估顺序防火墙策略。

5.    在有状态规则组下,选择操作,然后选择创建有状态规则组

6.    输入唯一的规则组名称。

7.    对于容量预留,输入列表中将包括的预计规则数。此值在创建规则组后无法更改。

8.    对于有状态规则组选项,选择 Suricata 兼容的 IPS 规则
注意:有状态规则顺序无法更改,因为它继承自策略。规则顺序显示为严格

9.    (可选)定义用于您定义的 Suricata 签名中的自定义规则变量。

10.    (可选)定义用于您定义的 Suricata 签名中的 IP 集参考。

11.    在 Suricata 兼容的 IPS 规则下,输入以下规则。将域更改为您要处理的特定域。

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;)

12.    选择创建并添加到策略中

13.    在导航窗格的 Network Firewall 下,选择防火墙策略

14.    选择您将该规则组添加至的严格顺序策略。

15.    对于有状态规则评估顺序和默认操作,选择编辑

16.    对于默认操作,选择已建立丢弃。然后,选择保存

**注意:**已建立的流关键字通常用于域规则中,但它可能没有考虑所有流数据包交换边缘的情况。在使用任何示例规则列表之前,测试该规则以验证其是否按预期工作。

验证

您可以对指定的域运行测试命令,以便验证是否根据您的配置对域进行了正确的处理。

在以下示例中,域 https://example.com 被允许并向客户端返回一个 200 OK 响应:

curl -v --silent https://example.com --stderr - | grep 200
< HTTP/2 200

在以下示例中,HTTP 域 http://www.google.com 被阻止:

curl -v http://www.google.com
* 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 域 https://www.google.com 被阻止:

curl -v https://www.google.com
* Trying 172.253.115.147:443...
* Connected to www.google.com (http://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):

相关信息

Network Firewall 中的防火墙策略

创建有状态规则组

Network Firewall 的有状态规则示例

有状态规则组的评估顺序

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