使用NLB或GWLB搭建多VPC的Traffic Mirror流量采集架构

一、背景

在上一篇博客《使用VPC Traffic Mirror功能进行流量审计》中,我们介绍了使用VPC Traffic Mirror采集7层访问日志,不过采集架构局限在单VPC、单EC2。

那么如何构建一个跨VPC、多VPC、跨账号专门的日志采集架构?本文解答这一需求的设计。

二、架构设计考量点

首先在被采集的流量较大之后,单个可能处理能力不足,因此需要将流量交付给多机进行解码。由此,在Traffic Mirror配置Target的时候,不考虑EC2单机选项,此时还有两个选项分别是NLB负载均衡和Gateway Load Balancer Endpoint(简称GWLBe)。这两个选项如何选择呢?这需要从多VPC规划的需求分析。

在单EC2采集流量时候,被采集的EC2(指被Traffic Mirror作为Source的ENI网卡)和用于接收流量进行分析的EC2,二者必须在同一个VPC内。这对架构设计带来了局限性。但安全团队是独立的,需要独立的流量分析方案用于多个业务VPC分析的时候,就需要考虑分拆,将业务VPC和流量分析VPC拆分到不同的VPC。再二者拆分之后,二者的流量传输方案又有两种选择。

第一种选择是通过普通的NLB进行流量转发。此时要求被采集流量的业务VPC和部署接收流量的VPC能够在IP流量层面互通,也就是需要VPC Peering或者Transit Gateway打通两个VPC。然后由NLB负载分发Traffic Mirror流量。流量以VXLAN形式封装交付给EC2。如果需要两个VPC的隔离,还需要使用Security Group和Network ACL配合来实现。在跨账号方面还存在很多不便。

第二种选择是使用Gateway Load Balancer Endpoint进行转发。在每个业务VPC中都创建一个Endpoint,这个Endpoint是一个隧道会将Traffic Mirror采集的流量发送到位于流量分析VPC内的Gateway Load Balancer上,然后再分发给多个EC2进行流量解析。此方案中,被采集流量的业务VPC和部署接收流量的VPC完全独立,二者没有Peering等互通,甚至不知道对方的存在。此方案非常适合独立的安全团队进行网络流量分析,并可以跨账号分析流量。因此,当多个VPC的架构复杂度达到一定程度后,推荐使用第二种功能方案。还需要注意的是,使用GWLB将会在原本的Traffic Mirror的VXLAN封装基础上,再增加一层GWLB自己特有的GENEVE协议封装,不过许多分析软件都支持解码GENEVE协议,因此这并不会影响分析软件的运行。

本文将分别介绍这两个方案。

三、使用NLB分发Mirror流量

1、架构图

整体架构图如下。

在上述架构图中可看到,用于采集流量(即安装Suricata的EC2)位于独立的VPC,被称为流量采集VPC。在原始业务应用的VPC内,配置Traffic Mirror,并创建NLB,作为Traffic Mirror的Target。然后NLB使用IP Target方式,将流量交给另一个VPC的EC2。

在此场景下,业务VPC和流量采集VPC有基本的三层路由互通,如果安全组不设限制两个VPC可完全通信。一般实际应用中,通过EC2的安全规则组Security Group或者Network ACL限制2个VPC之间的互通,以起到让流量采集VPC尽可能独立不可见的效果。

2、配置步骤

主要配置步骤如下:

采集用VPC:

  • 假设当前业务VPC正常运行
  • 创建流量审计用VPC
  • 在流量审计VPC和业务VPC之间创建VPC Peering
  • 为上述VPC Peering创建路由表条目,二者互通

EC2部署:

  • 在流量审计VPC内创建EC2
  • 在流量审计EC2的安全组上放行SSH 22端口和UDP 4789端口的入栈请求,且来源地址均设置为业务VPC的CIDR
  • 在流量审计EC2上部署Suricata,配置对应规则

NLB部署:

  • 在业务VPC内创建负载均衡Target Group,业务端口选择为UDP协议4789端口,健康检查选择TCP协议22端口
  • 在Target Group内,添加IP地址,选择来自其他VPC的IP,将流量审计EC2的IP地址添加进去,确保健康检查显示绿色健康
  • 在业务VPC内创建NLB,监听器选择UDP 4789端口,绑定刚才的Target Group

Traffic Mirror配置:

  • 创建Filter规则
  • 创建Traffic Mirror的Target,目标选择上一步的NLB
  • 创建Traffic Mirror的Session,选择上一步的Target

3、Suricata解析流量规则

为了捕捉VXLAN封装的流量,需要在Suricata的Rules里边新加入一条,执行如下Shell命令即可将配置写入对应文件。这条命令在上一篇博客讲述单机EC2采集流量时候也使用了这条命令。

echo 'udp any any -> any 4789 (msg:"VXLAN traffic detected"; content:"|0x01|"; depth:1; sid:1000001; rev:1; classtype:vxlan-encap; no-local;)' > /etc/suricata/rules/VXLAN.rules

配置完成,流量审计EC2上的Suriciata日志中可看到被采集流量。

四、使用Gateway Load Balancer Endpoint集中分析采集的流量

1、架构图

整体架构图如下。

在上述架构图中可看到,用于采集流量(即安装Suricata的EC2)位于独立的VPC,被称为流量采集VPC。在流量采集VPC内,创建Gateway Load Balancer,并通过Target Group完成健康检查和流量分发。

在创建好Gateway Load Balancer后,在业务VPC中,创建Gateway Load Balancer对应的Endpoint作为流量接受的Target。最后,配置Traffic Mirror,在选择Traffic Mirror的Target的步骤,选择Gateway Load Balancer对应的Endpoint。流量即可交付到EC2。

在此场景下,业务VPC和流量采集VPC完全独立,二者没有路由,互相不知道对方的存在。此架构适合独立审计、跨账号审计等场景。

2、配置步骤

主要配置步骤如下:

采集用VPC:

  • 假设当前业务VPC正常运行
  • 创建流量审计用VPC

EC2部署:

  • 在流量审计VPC内创建EC2
  • 在流量审计EC2的安全组上放行SSH 22端口和UDP 6081端口(GENEVE协议)的入栈请求,且来源地址设置为流量审计VPC本地的CIDR
  • 在流量审计EC2上部署Suricata,配置对应规则(参考下一章节GENEVE规则)

Gateway Load Balancer配置:

  • 在流量审计VPC内创建GWLB,绑定某一个子网,此外创建中要求选择Target Group,点击创建Target Group自动跳转到新页面的创建向导
  • 在流量审计VPC内创建负载均衡Target Group,业务端口选择为UDP协议6081端口,健康检查选择TCP协议22端口
  • 在Target Group内,添加IP地址,选择本VPC的IP,将流量审计EC2的IP地址添加进去,确保健康检查显示绿色健康
  • 完成GWLB创建
  • 记录下GWLB的ARN ID

Gateway Load Balancer Endpoint配置:

  • 在业务VPC内,创建Endpoint Server,然后从清单中查找上一步创建的GWLB的ARN ID
  • 选择业务VPC的某个子网,单子网即可,创建Endpoint

Traffic Mirror配置:

  • 创建Filter规则
  • 创建Traffic Mirror的Target,目标选择上一步的NLB
  • 创建Traffic Mirror的Session,选择上一步的Target

配置完成。

3、Suricata解析流量规则

由于Traffic Mirror采用的数据流封装协议是VXLAN,在本架构下,由于多经过Gateway Load Balancer的转发,因此,在Gateway Load Balancer转发的流量最外层是采用GENEVE封装的,里边的数据流才是Traffic Mirror服务用的VXLAN封装。幸运的是,Suricata支持同时对外层GENEVE和内层VXLAN解包,不需要复杂的开发过程。

为了捕捉GEVENE协议封装的流量,并且解析VXLAN协议,需要在在Suricata的Rules里边新加入如下的2条。

echo 'udp any any -> any 4789 (msg:"VXLAN traffic detected"; content:"|0x01|"; depth:1; sid:1000001; rev:1; classtype:vxlan-encap; no-local;)' > /etc/suricata/rules/VXLAN.rules
echo 'udp any any -> any 6081 (msg:"GENEVE traffic detected"; content:"|0x01|"; depth:1; sid:1000002; rev:1; classtype:genEVE-encap; no-local;)' > /etc/suricata/rules/GENEVE.rules

配置完成,流量审计EC2上的Suriciata日志中可看到被采集流量。

4、配置GWLB和Endpoint时候的关键设置补充说明

如果实现没有使用过Gateway Load Balancer的话,很可能对配置过程不熟悉。这里将关键配置进行配图说明。

(1) 在流量审计VPC内创建Gateway Load Balancer

在流量审计VPC内创建GWLB的方法是,从EC2控制台的创建负载均衡入口进入,最右侧的就是GWLB。如下截图。

在创建GWLB向导页面,点击创建Target Group目标组链接,会跳转到创建目标组向导界面。

在创建目标组向导页面下方,可从下拉框中选择协议是GENEVE协议(UDP端口6081)。如下截图。

因为UDP是无状态的,所以负载均衡无法对UDP的接收端做健康检查。所以,在Gateway Load Balancer的Target Group配置中,可选使用TCP协议22端口进行健康检查。如下截图。

以上是创建GWLB的几个关键词参数配置的页面。

(2) 在被审计的业务VPC内创建Gateway Load Balancer的Endpoint

接下来,在被审计的业务VPC内创建Gateway Load Balancer的Endpoint。首先需要确保GWLB的状态显示为绿色的可用,如果还是显示创建中(Provisoning)的状态,那么后续的操作无法完成。

在确认GWLB已经是绿色的可用状态后,进入VPC服务界面,点击左侧菜单的Endpoint Service终端节点服务菜单。点击创建按钮如下截图。

在创建Endpoint Service的界面,将负载均衡器类型选择为Gateway网关类型,在下方可用的负载均衡器清单中就会出现刚才创建的Gateway Load Balancer。在下方的Supported Regions部分,留空不用选择,因为这里如果选择Region就是创建的跨Region服务,但本文不需要跨Region,因此留空。如下截图。

继续配置。在额外设置下方,取消对Acceptance required选项的选中,然后在选中IPv4。最后点击创建,如下截图。

创建完毕后,在查看详情页面,可获得Servic Name字段,点击前边的小方块可以将字符串复制到剪贴板。如下截图。

进入VPC服务,点击左侧菜单Endpoint终端节点,在右侧点击创建按钮。如下截图。

在新建Endpoint的向导中,名称输入友好名称,类型选择Endpoint Service that use NLBs and GWLBs,在下方服务框中,填写上一步复制过来的Service Name,然后点击Verify校验按钮。校验成功后,页面会显示绿色提示信息。如下截图。

在创建Endpoint位置,选择单个AZ。GWLB对应的Endpoint,一次只能选择创建一个AZ来创建Endpoint。对于当前Traffic Mirror,单个AZ足矣满足需要。继续完成创建。如下截图。

以上就是创建GLWB Endpoint的关键步骤。

除以上几个特殊的配置是关于GWLB之外,其他配置过程与使用NLB接收流量、使用EC2接受流量的配置相同。

五、小结

至此,使用NLB和GWLBe的架构介绍完成。由于GWLB提供了更好的隐蔽性,从业务环境到审计环境是完全没有互通的,更有利于独立的流量审计和分析。此外,Suricata等开源工具也普遍支持GWLB使用的GENEVE协议封装,因此也无需额外解码工作。所以在多VPC流量镜像的场景,使用GWLB是更好的选择。

六、参考文档

Example: Mirror traffic to appliances behind a Gateway Load Balancer via Gateway Load Balancer endpoints

https://docs.aws.amazon.com/zhcn/vpc/latest/mirroring/TrafficMirroring_Scenarios.html#tm-example-glb-endpoints