亚马逊AWS官方博客

通过 AWS Network Firewall 实现南北向资源和服务的有效防护

摘要

AWS在2020年底的Re:Invent大会上发布了新的安全产品的管理服务Network Firewall(网络防火墙),客户可以通过使用它来对外网进行隔离(也叫南北向),也可以用于内网之间进行隔离(也叫东西向,如同一个区域的不同VPC之间,不同区域的不同VPC之间,云和IDC之间等),实现基于规则的检测和防护。

它支持有状态的规则,也支持无状态的规则,可以灵活的配置。为了让客户更加快速的理解和使用Network Firewall,我们撰写了本系列文章。

在第一篇中,主要介绍Network Firewall的基本概念以及南北向防护的配置例子,并提供对应的CloudFormation模板让用户实现动手操作,更好的理解Network Firewall的架构设计和场景设计。

在第二篇中,将介绍基于云上的多区域互联的东西向防护,帮助客户基于Network Firewall的构建全方位的云上网络防护。

在第三篇中,将介绍在混合云环境下,本地IDC和云上资源如何协作并在防火墙的监管下的实现检测和保护下的互通。

本文为本系列的第一篇。

关键字

Network,Firewall,TGW,防火墙,网络防火墙,规则,规则组,中转网关,南北向,东西向,混合云,混合网络

基本概念

AWS Network Firewall(网络防火墙)提供常见的网络威胁保护的能力,他可以合并流量的上下文,如跟踪连接和协议识别,匹配对应策略进行处理,防止未经授权的访问。

图例:Network Firewall工作原理

AWS Network Firewall支持有状态的规则(最大规则组容量30,000),也支持无状态的规则(最大规则组容量10,000)。

无状态规则优先于有状态规则执行,且按配置的顺序执行,支持pass,drop和forward到有状态的规则三种处理方式。

假如无状态规则配置有冲突,按优先级匹配执行;有状态的规则如果有冲突(例如某个规则设置了允许ssh,另外一个规则设置了禁止ssh),它是合并后再统一匹配执行,优先级为pass > drop > alert,所以只要有一个pass的设置,其他的非pass设置全部会失效,所以我们在设置规则时要明确具体。

其执行流程如下图所示:

图例:Network Firewall规则处理顺序

架构设计

这是我们设计的客户常见的混合云网络架构图,云上环境的内网和外网(南北向)有网络防火墙隔离;云上环境区域/VPC之间,云上环境和私有IDC环境之间(东西向)有网络防火墙隔离;私有IDC环境的防火墙由客户的基础架构确定,不在此架构设计中。

图例:全球一张网架构

因为都是使用AWS的区域(包括客户私有IDC也使用了新加坡区域并结合VPN做模拟),所以简化版的互联架构如下图所示:

图例:全球互联部署架构

为了方便标识,此处使用了几个前缀的简称(后续资源命名都跟他们有关系,方便在测试时能望文生义的了解所在的区域和服务类型),如下:

IAD:特指AWS美东弗吉尼亚北部区域(us-east-1)

PDX:特指AWS美西俄勒冈区域(us-west-2)

SIN:特指AWS新加坡区域(ap-southeast-1)

环境部署

环境定义

如下为弗吉尼亚北部区域(us-east-1,IAD)的网络环境定义(我们截图和操作主要是在这个区域):

图例:弗吉尼亚北部区域(us-east-1)网络定义

如下为俄勒冈区域(us-west-2,PDX)的网络环境定义:

图例:俄勒冈区域(us-west-2)网络定义

如下为新加坡区域(ap-southeast-1,SIN)的网络环境定义(它相对简单,主要用来模拟客户自己的私有IDC使用):

图例:新加坡区域(ap-southeast-1)网络定义

准备工作

登录EC2的密钥

1.在AWS控制台切换到弗吉尼亚北部区域(us-east-1)的密钥管理页面(点击这里),创建一个新的密钥文件,命名为kp-nfw-iad(此名称主要为了望文生义的理解和记忆),客户端是Linux(或Mac)的选择pem格式,Windows的选择ppk模式,后续连接Linux时请参考“使用Putty从Windows连接到Linux实例”。

图例:创建登录EC2的密钥文件

2.使用同样的方式在俄勒冈区域(点击这里)创建密钥文件kp-nfw-pdx,在新加坡区域(点击这里)创建对应的密钥文件kp-nfw-sin。

区域 密钥文件名 类型 备注
IAD kp-nfw-iad.pem pem格式 Mac和Linux使用的格式
PDX kp-nfw-pdx.pem pem格式
SIN kp-nfw-sin.pem pem格式

表格:创建登录EC2的密钥文件

新加坡VPN Client用的外网IP地址

在AWS控制台切换到新加坡的EC2服务的EIP页面(点击这里),创建两个EIP(用于后面VPC客户端使用)。记录对应的外网IP地址即可,后续部署环境需要用到。

区域 类型 地址 用途 备注
SIN EIP 18.140.129.222 IAD VPN使用 在IAD和PDX创建CloudFormation堆栈时需要用到
54.169.206.150 PDX VPN使用

表格:提前为VPN Client准备的EIP

环境部署

注:模板文件主要为了在交付资源和环境时的便利性,在非常熟悉AWS相关组件和操作的情况下,可以不使用CloudFormation模板,而采用纯手工一步步的构建。

部署模板

1.在AWS控制台切换到弗吉尼亚北部区域(IAD,us-east-1),并进入CloudFormation的主页(点击这里),选择“创建堆栈(Create Stack)”,此处选择上传模板文件“iad-nfw-01.yml”,也可以直接点击如下图标加载即可。

图例:选择CloudFormation模板文件

然后点击下一步,设置对应的堆栈名称(此处为iad-cfm),输入上一步在新加坡创建的EIP地址(此处为18.140.129.222),并选择对应的EC2密钥(此处为kp-nfw-iad),其他全部默认值,然后创建堆栈。
图例:配置堆栈模板的名称和密钥名称

2.在AWS控制台切换到俄勒冈区域(PDX,us-west-2),并进入CloudFormation的主页(点击这里),使用模板文件“pdx-nfw-01.yml”,也可以直接点击如下图标加载即可:

然后配置堆栈名字“pdx-cfm”,输入上一步在新加坡创建的EIP地址(此处为54.169.206.150),并选择对应的EC2密钥文件“kp-nfw-pdx”,其他全部默认值,然后创建堆栈。

确认部署结果

1.使用CloudFormation的模板文件创建堆栈和对应资源大约需要10分钟左右,创建完毕后,会获得如下图所示的网络和资源架构(其中IAD和PDX除了网段不一样,其他几乎一致)。

图例:弗吉尼亚北部区域部署参考架构

主要部署的资源和环境包括(以弗吉尼亚为例):

A.三个VPC,十个子网(点击这里

一个专门用于检测东西向流量的VPC,配置两个子网

一个防火墙所在子网,一个中转网关所在子网

每个子网都有自己单独的路由表(已关联未配置条目)

两个用于构建全球一张网的VPC,配置四个子网

一个防火墙所在子网

一个中转网关所在子网

一个公有子网(部署NAT网关,以及需要面向公网的服务,如EC2,ELB等)

一个私有子网(纯内网环境)

B.中转网关(点击这里

一方面用于对接俄勒冈区域的中转网关,另一方面用于对接新加坡的VPN客户端

C.三个Network Firewall(点击这里

两个用于不同VPC出公网南北向使用,一个用于内网东西向互联使用(含区域内,跨区域,以及混合云网络全球互联)

D.VPN Server端,对接新加坡的VPN Client(点击这里

一个Customer Gateways,一个Site-to-Site VPN Connections

待CloudFormation堆栈部署成功后(请确保没有任何错误输出),打开弗吉尼亚北部区域对应的子网列表地址(点击这里),查看是否和预期一致:

图例:弗吉尼亚北部区域部署子网列表

打开俄勒冈区域对应的子网列表地址(点击这里),查看是否和预期一致:

图例:俄勒冈区域部署子网列表

配置内外网的南北向防护

路由链路

此次发布了Network Firewall服务以后,可以在之前的公有子网(如下图所示的nat gw网段)和互联网网关(IGW)之间构建一个防火墙子网,用于网络防护和基于规则的过滤(如私有子网的实例要出公网,其流量进出就是步骤1-8,公有子网的实例要出公网,其流量进出就是步骤2-7),也会比原来公有和私有子网的方式多关联一个路由表(IGW Ingress路由)到VPC层面(这是发布了Network Firewall以后的新功能,以前IGW路由不可更改)。

图例:弗吉尼亚北部区域南北向路由表配置

如上图所示,配置防火墙的过程主要包括路由配置,规则配置这两个操作。

防火墙配置确认

打开弗吉尼亚北部区域的防火墙规则组控制台(点击此处),我们会发现,系统已经为我们创建了4个规则组,如下:

图例:防火墙规则组定义

针对这4个规则组,我们配置了两个防火墙策略:

策略名称 关联规则组 描述
iad-pri-policy enable-icmp, disable-ssh 内网防火墙使用的规则组,无状态
iad-pub-policy enable-web, disable-web 外网防火墙使用的规则组,有状态

表格:防火墙策略定义

打开弗吉尼亚北部区域的防火墙控制台(点击此处),我们会发现,系统已经为我们创建了3个防火墙,分别对应之前创建的3个VPC,如下:

防火墙名称 关联策略 关联VPC
iad-vpc1-nfw-pri iad-pri-policy iad-vpc1
iad-vpc2-nfw-pub iad-pub-policy iad-vpc2
iad-vpc3-nfw-pub iad-pub-policy iad-vpc3

表格:防火墙定义

注:当客户纯手工操作时,建议先创建规则组,然后配置策略,然后再创建网络防火墙。

CloudFormation模板在配置堆栈时已经帮我们配置好了,如下截图仅供手工操作时的相关参考。

图例:创建网络防火墙

路由配置

此处我们主要设置配置VPC和子网之间的路由表关联。我们以弗吉尼亚北部区域(IAD,us-east-1)的iad-vpc2为例。

配置VPC Ingress路由

打开VPC路由表控制台(点击此处),选中VPC2的IGW路由表(此处名称为vpc2-rtb-igw),在下面出现的tab页里面选择“Edge Associations”,选择“Edit edge associations”,把IGW添加进来,如下:

图例:关联IGW和VPC路由

点击“Routes”页面,选择“Edit routes”,手工添加到私有子网和公有子网的路由(destination为子网地址,target为防火墙的vpce地址,本文演示架构每个vpc只有一个AZ,一个防火墙ENI,所以输入vpce就会自动带出来,如果是一个VPC有多个AZ,建议查询并核对,选择同AZ内的防火墙的vpce或ENI地址,具体的详细列表请 点击这里,描述为:VPC Endpoint Interface ***,类型为:gateway_load_balancer_endpoint,确认对应AZ即可)。

图例:添加VPC的Ingress路由

配置防火墙子网路由

选择防火墙子网路由表(此处为vpc2-rtb-fw),在下面出现的Routes页面中编辑路由,添加0.0.0.0/0的路由到IGW,这和以前配置公有子网的路由方式一样,如下图:

图例:添加防火墙子网的出口路由

配置公有子网路由

选择公有子网(可以用来部署NAT网关,ELB服务,以及面向公网的EC2等)路由表(此处为vpc2-rtb-pub),把它的0.0.0.0/0的路由转发到防火墙的vpce(表示所有出去的流量都要过防火墙),如下图:

图例:添加公有子网的出口路由

配置私有子网路由

选择私有子网路由表(此处为vpc2-rtb-pri),把它的0.0.0.0/0的路由转发到公有子网部署好的NAT网关地址,这和以前配置私有子网的NAT路由方式一样,如下图:

图例:添加私有子网的出口路由

测试验证

在开始测试验证之前,为了后续本系列文档第二篇的需要,我们还需要把其他VPC(包括弗吉尼亚北部区域的iad-vpc3以及俄勒冈区域的pdx-vpc2和pdx-vpc3)的路由都配置好,其操作步骤一致,只是关联的资源名不同而已(如果不做后面的第二篇和第三篇的内容,这一步可以跳过)。

可以参考如下步骤防止出错(具体配置参考前面的环境部署章节的环境定义部分):

A.配置IGW Ingress路由(关联IGW,各内网网段指向防火墙vpce);

B.配置防火墙子网路由(指向igw);

C.配置公有子网路由(指向防火墙vpce);

D.配置私有子网路由(指向NAT网关);

登录测试机

堆栈部署时,会在每个区域部署两个私有子网的EC2(名称分别是vpc2-pri-server和vpc3-pri-server,后续用来测试ping),部署两个公网的EC2(名称分别是vpc2-pub-server和vpc3-pub-server),使用ssh登录。

图例:登录EC2

curl测试

我们配置的南北向防火墙策略是允许curl百度但是不允许curl知乎,我们测试如下图所示(curl知乎会一直卡在这里):

图例:curl域名测试

如果配置好了俄勒冈的环境,会得到一样的结果,如下图所示(注意EC2的内网地址的不同):

图例:curl域名测试验证

扩展阅读

请参考本系列的第二篇《(二)通过AWS Network Firewall实现东西向资源和服务的有效防护》

请参考本系列的第三篇《(三)通过AWS Network Firewall实现混合云环境下资源和服务的有效防护》

参考文档

1.Network Firewall官方文档:

https://docs.thinkwithwp.com/zh_cn/network-firewall/latest/developerguide/what-is-aws-network-firewall.html

2.Network Firewall部署架构设计:

https://thinkwithwp.com/cn/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/

3.Transit Gateway官方文档:

https://docs.thinkwithwp.com/zh_cn/vpc/latest/tgw/what-is-transit-gateway.html

4.VPC官方文档:

https://docs.thinkwithwp.com/zh_cn/vpc/latest/userguide/what-is-amazon-vpc.html

本篇作者

陈卫琼

亚马逊云科技资深解决方案架构师,负责协助客户业务系统上云的解决方案架构设计和咨询,现致力于大数据和IoT相关领域的研究。

龙斌

亚马逊云科技解决方案架构师,负责协助客户业务系统上云的解决方案架构设计和咨询,现致力于DevOps和容器相关领域的研究。