亚马逊AWS官方博客

基于 Gateway Load Balancer 的一种 VPC 边界流量镜像方案与实现

VPC 边界流量镜像需求与实现挑战

流量镜像(traffic mirror)是一种数据包复制多发技术,广泛用于流量安全分析、网络内容监视、线上问题排查、生产流量旁路验证等场景。在传统的线下 IDC 环境,流量镜像通常在交换机/路由器硬件层面实现。在亚马逊云科技 VPC 环境中,我们同样提供了流量镜像功能,能够在 VPC 网卡(Elastic Network Interface, ENI)层面实现流量镜像。

由于网卡对应的一般是单个实体,不似传统 IDC 路由器/交换机能在关键路径上进行全网边界流量镜像。如果要实现云端全网边界流量,就需要对全部边界网卡批量创建流量镜像(全边界 ENI 流量镜像方案),相应的部署、增/删/更新、运维复杂度较高,同时费用也随着网卡数量的增加而增多,局限了流量镜像的落地应用。在网络边界流量镜像推出之前,我们急需一种能在边界进行统一、简单、低成本方案,实现全网边界流量镜像。

VPC 边界流量镜像方案

亚马逊云科技流量镜像简介

亚马逊云科技 VPC 流量镜像将网络流量从 EC2 实例的弹性网络接口,按过滤条件,复制到目标网卡,进行分析处理。流量镜像目标可以是另台 EC2 实例网络接口、或者具有 UDP 侦听器的网络负载均衡器、或具有 UDP 侦听器的网关负载均衡器。

流量镜像源和流量镜像目标(监控设备)可以位于同一个 VPC 中,也可以位于通过区域内的 VPC 对等连接、中转网关或通过网关负载均衡器终端节点,连接到不同 VPC 中。

镜像流量使用 RFC 7348 标准 VXLAN 协议进行封装。目标实体安全组需要放行 UDP 4789 端口,同时,流量镜像处理程序需要自行解析 VXLAN 封包。具体流量镜像过程及数据包格式如1 流量镜像

图 1 流量镜像

亚马逊云科技 Gateway Load Balancer 简介

Amazon Gateway Load Balancer(Amazon GWLB)是一种针对网关设备的负载均衡服务。能帮助客户部署、扩展和管理虚拟网络设备,如防火墙、入侵检测和防御系统、网络内容包检测系统。通过 Amazon GWLB,用户可以在网关位置实现流量分配、设备动态扩缩容。

具体实现上,Amazon GWLB 运行在 L3 层(网络层),并将传入的所有 IP 数据包,封包转发到指定的目标组。Amazon GWLB 与后端目标组机器之间,通过 RFC8926 GENEVE 协议,在 UDP 6081 端口上的交换业务流量。通常 Amazon GWLB 与 Amazon Endpoint Services 搭配,实现跨 VPC 的网络流量检测与防护。Amazon Endpoint Services 是一种 VPC 终端节点。通过 Amazon Private Link 技术,可以实现服务提供商 VPC 中的服务(EC2 等)与服务使用者 VPC 中的应用程序,在网络隔离的情况下相互通信。

对于进出 Amazon GWLB 的流量,需要通过路由进行流量引导。 流量从服务使用者 VPC ,按路由进入 Endpoint,经由 Amazon Private Link 流入服务提供商 VPC 中的 Amazon GWLB,最终进入安全设备,安全设备检测后然后返回过滤后的流量。典型的 Amazon GWLB 架构图如 2 Gateway Load Balancer 典型部署架构所示。

图 2 Amazon Gateway Load Balancer 典型部署架构

VPC 边界流量镜像方案总体设计

对于边界流量,在 VPC Internet Gateway (IGW)进行流量镜像是最理想的情况,但现阶段 IGW 暂未支持流量镜像。因而,通过路由,将流量汇聚到某一流量设备,然后再进行镜像,无疑是最理想的方案。

具体来说,首先按照 Amazon GWLB 部署架构,使用安全设备,如 Marketplace 上各家安全厂商提供的安全设备。之后,进一步在安全设备上配置流量镜像,即可实现全网流量镜像。如3 VPC 边界流量镜像架构图所示:

图 3 VPC 边界流量镜像架构图

但这个方案有一个需要特别注意、特别处理的技术点:由于 Amazon GWLB 发送到安全设备的流量,是经过 GENEVE 封装的数据包;再由流量镜像转发,在 GENEVE 基础上将再加一层 VXLAN 封装。所以,流量镜像目标必须能够处理 VXLAN、GEVENE 的多层解包,如 4 多层数据包封装格式所示,否则将无法正常工作。当然,很多开源软件(如 suricata)已经支持多层解包,技术上并不存在太大挑战。

图 4 多层数据包封装格式

这一方案不仅仅适合单个 VPC,还适合多个 VPC、跨账户的情况。对于已经落地流量集中管控的架构,仅仅只需在核心安全设备上,配置流量镜像功能,即可快速实现边界流量镜像。

边界流量镜像方案成本分析对比

相比于边界网卡全镜像的流量镜像方案,该方案能显著节省客户成本。由于每个客户情况、区域、方案具体落地配置不一致,本文不做绝对的成本对比,仅以中国宁夏区域为例进行对比分析。同时,因为流量镜像目标、流量镜像流量费不论哪种方案都会存在,我们主要对比方案差异、新增的部分成本进行对比。

已部署 Gateway Load Balancer 安全产品

对于已经部署了第三方安全防火墙的客户,仅仅增加对应安全设备的流量镜像。宁夏区域流量镜像对每个启用了流量镜像的 弹性网卡(ENI) 按小时收费,¥0.18/小时。本方案仅在现有网络安全设备上增加单个 ENI 流量镜像,所以费用仅为 0.18*24*31= ¥ 133.92/月。相比于全部边界 ENI 批量创建流量镜像,其成本固定,且仅为全边界 ENI 流量镜像方案的 1/N(N 为边界 ENI 数量)。

新部署 Gateway Load Balancer

对于新部署 Amazon GWLB,将新增 Amazon GWLB, Endpoint,安全设备(Amazon EC2)、流量镜像 ENI 等费用。情况相对复杂,我们假设月边界流量 10T,价格以宁夏区域官网价格为准:

  • Amazon GWLB/1LCU: (1005+0.0287)*24*31=¥96.1248
  • Endpoint: 0.0875*24*31 + 0.07*10*1024= ¥781.9/月
  • 安全设备 Amazon EC2,按 large,无预付一年 RI:¥161.272/月
  • 安全设备 ENI 流量镜像:¥ 133.92/月

总费用:96.1248+781.9+161.272+133.92=¥1173.22/月

对比全边界 ENI 流量镜像方案,9 个 ENI 流量镜像费用即超过该方案月费用。且该方案还额外提供了网络安全设备功能。

通过上面的对比,可以看出,该方案相比于对所有全边界 ENI 进行流量镜像,有明显的价格优势,有效帮助客户降低业务成本。

基于开源的边界流量镜像方案实现

前文介绍了方案的总体部署架构。下面,本文将具体介绍一种全开源的技术实现,让客户落地实现 IPS(Intrusion Prevention System,入侵防御系统)+IDS(Intrusion Detection System,入侵检测系统)两层安全防护。当然,用户可以根据自身的情况,将开源产品替换为商业产品。

方案基于 iptables 与 suricata 实现。iptables 作为 Amazon GWLB 目标设备软件,实现网络流量截取与转发。在 iptabels 之上,使用 suricata 配合实现 IPS(Intrusion Prevention System,入侵防御系统)功能,实现威胁流量阻断。

然后,通过 VPC 流量镜像,将 iptables 所在 Amazon EC2(IPS EC2)的网络流量,镜像到另一台用于 IDS 的 EC2(IDC EC2)。IDS EC2 安装 suricata,对镜像流量进行入侵检测分析并产生风险告警。部署架构图如 5 基于开源的边界流量镜像实现架构所示。

图 5 基于开源的边界流量镜像实现架构

构建基于 iptables 与 suricata 的 VPC 边界网络防火墙

iptables 简介

iptables 本身是一个用户态工具,主要用于帮助系统管理员配置 Linux 内核防火墙包过滤规则。Linux 内核防火墙一般使用 netfilter 实现。netfilter 位于内核空间,不仅具有网络地址转换功能,还能实现数据包内容修改和包过滤防火墙功能。Iptables 处理数据包的核心包括 5 个规则链接入点(见 6 iptables 核心 chain):

  • PREROUTING:数据包到达网卡时
  • POSTROUTING:数据包准备离开网卡时
  • FORWARDING:目标非本机、本机进行转发的数据包,在转发处理时
  • INPUT:目标为本机,准备送入应用程序时
  • OUTPUT:本机应用程序对外发送数据包进入内核时

图 6 iptables 核心 chain

本文主要是用 iptables 进行流量转发,所以主要关注 PREROUTING -> FORWARDING -> POSTROUTING 这一路径。

suricata 简介

Suricata 是一款开源的高性能网络 IDS、IPS 和网络安全监控引擎,由 OISF(Open Information Security Foundation ,开放信息安全基金会)开发、维护。

Suricata 的工作原理是监控网络流量,并根据规则进行匹配,采取行动。Suricata 支持多种威胁检测方法,包括:

  • 基于签名的检测:在网络流量中查找与已知威胁匹配的特定模式。
  • 基于异常的检测:识别超出正常行为范围的流量。
  • 基于行为的检测:定位表现出威胁特征行为的流量。

Suricata 广泛应用于各类检测各种威胁,如恶意软件、网络入侵、拒绝服务攻击、数据泄露等。本文将介绍 suricata 用于 IPS、IDS 两种场景。

方案测试环境配置 & 信息

为了进行方案测试与验证,我们创建了 2 个 VPC: 业务 VPC、安全 VPC。

业务 VPC 中包含 2 个 subnet:用于 Endpoint 的流量接入子网,与业务所在的业务子网。测试用应用 EC2 部署在业务子网。

安全 VPC 包含 2 台测试 EC2。1 台 EC2 作为 Amazon GWLB Target 用于处理 Amazon GWLB 转发流量。1 台 EC2 作为流量镜像目标,作为 IDC 进行流量分析。

具体如 7 DEMO 环境部署网络信息所示。

图 7 DEMO 环境部署网络信息

  • 应用 VPC

应用 VPC 网段 172.31.0.0/16。为了将流量引入 Amazon GWLB,需要创建对应的 Amazon Endpoint Services 以及路由。具体可以参考 网关负载均衡器入门

对于 Amazon Internet Gateway 路由表,如 8 DEMO 环境业务 VPC IGW 路由表所示,到所有子网的流量都路由到 Endpoint,最终实现全网边界流量的拦截处理。

图 8 DEMO 环境业务 VPC IGW 路由表

接下来是 Endpoint 所在的路由表。Endpoint 路由表不需要特别处理:对于 VPC 本地流量,直接配置 local 直接访问,对于所有出网流量,直接访问 Internet Gateway。这里要特别提醒,该子网仅用与流量转发处理,不应部署任何业务。否则,其流量将不受监控分析。具体示例参考 9 业务 VPC Endpoint 子网路由

图 9 业务 VPC Endpoint 子网路由

最后是业务应用所在子网。该子网是公有子网,默认情况下路由指向 Internet Gateway。为了将流量导入 Amazon GWLB,需要将默认路由指向 Endpoint。参考 10 业务子网路由配置

图 10 业务子网路由配置

  • 安全 VPC

在安全 VPC 内创建 Amazon GWLB,具体参考 创建网关负载均衡器。目标组为在安全 VPC 内的一台 Linux EC2。EC2 内网 IP 为 10.50.10.107。

Amazon GWLB 目标需要通过健康检测才能正常接收 GENEVE 流量。但是正常情况下,不管是 iptables 还是 suricata,都没有内置健康检测端口。最简单的方式,就是在 iptables 服务器上,安装 nginx,并启用默认的 HTTP 站点。对于 Amazon GWLB 目标组的健康检测,配置为 HTTP。参考 11 Gateway Load Balancer 目标健康检测

图 11 Gateway Load Balancer 目标健康检测

基于 iptables 构建 Amazon Gateway Load Balancer 透明转发服务器

作为 Amazon GWLB 的目标,需要接收 GENEVE 封装的数据包,并返回同样经过 GENEVE 封装的数据包。由于我们现在仅仅是作为透明转发服务器,全流量转发,所以,只需要启用内核数据包转发,然后通过 iptables 截获流量,将源地址/目标地址对换即可。具体如下所示。

1.	# 启用包转发
2.	sudo echo 1 > /proc/sys/net/ipv4/ip_forward
3.	
4.	# 对于刚收到的数据包,所有GEVENE/UDP 6081 流量,目标改写 Gateway Load Balancer
5.	sudo iptables -t nat -A PREROUTING -p udp --dport 6081  -j DNAT --to-destination 10.50.10.6
6.	
7.	# 对于将要通过网卡发送的数据包,所有GEVENE/UDP 6081 流量,源地址改写本机地址
8.	sudo iptables -t nat -A POSTROUTING -p udp --dport 6081  -j SNAT --to 10.50.10.107

接下来,可以通过 tcpdump 来检查流量是否正常转发,如12 GENEVE 数据包 tcpdump

图 12 GENEVE 数据包 tcpdump

使用 suricate 对边界流量实现 IPS

在透明转发服务器的基础上,我们可以安装 suricata,并将 suricata 监听模式配置为 NFQUEUE。

NFQUEUE 模式下,netfilter 将数据包转发到 suricata,由 suricata 进行分析、过滤,再转发回 netfilter。该模式下,suricata 将成为网络流量路径的一部分,可以对流量进行阻断。如若配置不当,将造成网络阻断。网络流量如 13 netfilitersuricate 实现 IPS 所示。

图 13 netfiliter 与 suricate 实现 IPS

为了验证 suricata 工作状态,我们可以配置 suricata 规则,对所有 HTTP 流量添加告警日志:alert ip any any -> any 80 (msg:”HTTP Found!”;sid:1000;)

然后通过浏览器访问业务 EC2 上配置的 web 服务,进行验证。如 14 suricate 告警日志

图 14 suricate 告警日志

VPC 边界网络防火墙流量镜像

配置边界防火墙流量镜像

接下来,我们在前面架构基础上,配置流量镜像。对于 iptables EC2 所有 GEVENE 流量,全量镜像转发到目标 EC2。可以参考 创建流量镜像相关文档,配置参考 15 流量镜像配置

图 15 流量镜像配置

验证流量镜像与数据包内容

同样,我们可以通过 tcpdump 进行流量检查验证。可以看出,数据包首先是 VXLAN 封装,VXLAN payload 为 GEVENE 封装的数据包,GEVENE payload 才为真正原始的数据包。其包结构信息参考 16 多层封装数据包 tcpdump 所示抓包。

图 16 多层封装数据包 tcpdump

使用 suricata 验证镜像流量并测试入侵检测

在流量进行 EC2 上安装 suricata,并配置监听模式为 af-packet。该模式下 suricata 将对全流量进行抓包分析。由于 suricata 只是复制包内容,并不位于流量路径上,改模式不能对流量进行阻断,通过用于进行流量分析、检测、告警。

同样,我们可以配置 suricata 规则,对所有 HTTP 流量添加告警日志,来验证 suricata 工作状态:alert ip any any -> any 80 (msg:”HTTP Found!”;sid:1000;)

检测告警日志,可以发现如 17 流量镜像 suricate IDS 告警

图 17 流量镜像 suricate IDS 告警

总结

本文通过结合 Amazon GWLB 与 VPC 流量镜像,在流量安全过滤的基础上,进一步实现了全网络边界流量的分析检查。对于安全要求比较高的客户,可能已经购买了如 Pala Alto 或者 Fortinet 的云网络安全设备,并使用 Amazon GWLB 进行了接入,但同时,还需要进一步使用流量分析入侵检测设备,在旁路对边界网络流量进行分析检查。本文提供的方案能帮助客户简单、高可用、低成本的实现类似需求,让客户网络更加安全可控。

参考文献

  1. 流量镜像数据包格式 https://docs.aws.amazon.com/vpc/latest/mirroring/traffic-mirroring-packet-formats.html
  2. Gateway Load Balancer 计费 https://www.amazonaws.cn/elasticloadbalancing/pricing/
  3. 流量镜像计费 https://www.amazonaws.cn/vpc/pricing/
  4. Endpoint Services 计费 https://www.amazonaws.cn/privatelink/pricing/
  5. Netfilter Iptables https://www.netfilter.org/projects/iptables/index.html
  6. Suricata https://suricata.io/
  7. GENEVE 数据包封装协议 https://www.rfc-editor.org/rfc/rfc8926.html
  8. VXLAN 扩展虚拟局域网协议 https://www.rfc-editor.org/rfc/rfc7348

本篇作者

刘科

西云数据解决方案架构师,15+ 年 IT 研发、管理经验,曾就职于知名通信设备厂商、头部互联网企业,有丰富、广泛的系统架构与研发管理经验。擅长帮助企业打造完善研发 Devops 体系,构建网络与安全体系,帮助企业业务产品项目落地。

李琳

AWS 解决方案架构师,负责面向跨国企业客户的云计算方案架构咨询和设计,客户涵盖医疗、零售、制造等行业。熟悉云原生网络技术及混合云网络架构。

刘佳鑫

西云数据解决方案架构师,目前为泛互联网客户提供架构设计、解决方案以及技术支持,加入西云数据前,主要面向运营商、零售等行业客户提供移动无线网络、MEC、虚拟化、容器化及应用持续交付等产品及解决方案。