前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWS攻略——初识流量镜像

AWS攻略——初识流量镜像

作者头像
方亮
发布2023-03-16 20:53:56
1.2K0
发布2023-03-16 20:53:56
举报
文章被收录于专栏:方亮方亮

在实际应用场景下,我们可能需要建立一个测试环境,既能接线上流量,又不希望影响线上业务,这个时候流量镜像就派上用场。它会将一个网络接口中的流量复制到另外一个网络接口中,然后在后者上分发,而前者不受影响。

在这里插入图片描述
在这里插入图片描述

在上图中我们可以看到,复制过来的流量会被转换——转换成vxlan协议的UDP流量。这个现象就导致测试环境的接口和生产环境不一致——这并不是我们希望的——我们希望部署在测试环境和生产环境上的代码或程序是一样的。

在这里插入图片描述
在这里插入图片描述

为了解决这个问题,我们需要加一个中间层:把UDPvxlan协议转回去,并分发到测试环境。

在这里插入图片描述
在这里插入图片描述

现在我们在AWS上完成上述设计。

创建VPC和EC2

选择区域和IPv4/CIDR

创建一个100.0.0.0/24的VPC,名字叫TrafficMirrorVpc。

在这里插入图片描述
在这里插入图片描述

分配子网

我们将分配一个Public类型子网TrafficMirrorSourcePublicSubnet,用于接收互联网流量。它下面实例的流量将会被复制到名字叫TrafficMirrorAdapterPrivateSubnet子网下的实例。经过转换,流量会被发送给TrafficMirrorTargetPrivateSubnet子网下的实例。我们在TrafficMirrorSourcePublicSubnet和TrafficMirrorTargetPrivateSubnet子网下部署的实例的程序是一样的,这样前者模拟线上环境,后者模拟测试环境。

在这里插入图片描述
在这里插入图片描述

子网名称

IPv4/CIDR

区域

TrafficMirrorSourcePublicSubnet

100.0.0.0/28

eu-west-1a

TrafficMirrorAdapterPrivateSubnet

100.0.0.16/28

eu-west-1a

TrafficMirrorTargetPrivateSubnet

100.0.0.32/28

eu-west-1a

在这里插入图片描述
在这里插入图片描述

创建EC2

这儿需要注意一点,被镜像流量的实例需要是基于AWS Nitro System的。适配的类型可以见:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances。我们选择相对便宜的t3.nano类型来做测试。 我们会对公网下的TrafficMirrorSourceEC2开启自动分配公有IP的功能。因为我们既要在互联网上对其发送流量,也需要把它作为跳板机跳转到其他两个私有网络下的EC2上,以方便部署代码。

实例名

所属子网

实例类型

是否自动分配公有IP

TrafficMirrorSourceEC2

TrafficMirrorSourcePublicSubnet

t3.nano

TrafficMirrorAdapterEC2

TrafficMirrorAdapterPrivateSubnet

t3.nano

TrafficMirrorTargetEC2

TrafficMirrorTargetPrivateSubnet

t3.nano

私有子网访问互联网(单向)

这个不是必须步骤。主要是为了让TrafficMirrorAdapterPrivateSubnet和TrafficMirrorTargetPrivateSubnet子网下EC2实例可以访问外网,以方便部署代码。

部署NAT网关

在这里插入图片描述
在这里插入图片描述

修改路由表

创建一个给Private网络的路由。

在这里插入图片描述
在这里插入图片描述

然后配置路由

在这里插入图片描述
在这里插入图片描述

路由关联私有子网

在这里插入图片描述
在这里插入图片描述

打通公有子网和互联网

创建互联网网关,并关联到VPC

在这里插入图片描述
在这里插入图片描述

公有子网路由到互联网网关

在这里插入图片描述
在这里插入图片描述

设定ACL

因为默认的ACL只允许22端口访问,而TrafficMirrorSourcePublicSubnet子网下机器需要开放80端口以供外网测试,且TrafficMirrorAdapterPrivateSubnet需要响应4789端口的UDP请求,所以我们将对各个子网的ACL进行定制。

定制生产/测试环境ACL

主要开启22端口和80端口,源地址选择任意。它主要给TrafficMirrorSourcePublicSubnet和TrafficMirrorTargetPrivateSubnet使用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这儿需要注意的是,针对两个子网开启所有TCP连接,否则SSH会失败。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定制转换层ACL

主要开放UDP协议的4789端口,是给TrafficMirrorAdapterPrivateSubnet使用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改安全组

对TrafficMirrorAdapterEC2新增UDP 4789

在这里插入图片描述
在这里插入图片描述

对TrafficMirrorSourceEC2新增80端口支持

在这里插入图片描述
在这里插入图片描述

对TrafficMirrorTargetEC2新增80端口支持

在这里插入图片描述
在这里插入图片描述

部署Adapter层

通过公网下的EC2跳板机,我们登录到TrafficMirrorAdapterEC2,执行下面的命令

代码语言:javascript
复制
sudo yum update -y
sudo yum install git -y
sudo yum install go -y
sudo yum install libpcap-devel -y
go env GOPATH
export HOME=~
echo 'export GOPATH=$HOME/go' >>~/.bash_profile
source ~/.bash_profile
mkdir -p $GOPATH"/src/vxlan-to-http-request"
wget https://github.com/aws-samples/http-requests-mirroring/raw/main/main.go -P $GOPATH"/src/vxlan-to-http-request"
cd $GOPATH"/src/vxlan-to-http-request"
go mod init vxlan-to-http-request
go get "github.com/google/gopacket"
go mod tidy
go build ./
go install vxlan-to-http-request
sudo ip link add vxlan0 type vxlan id 1 dev eth0 dstport 4789
sudo ip link set vxlan0 up

这儿特别需要注意下倒数第二行 vxlan id 1这个,需要和后续创建的流量镜像Session的VNI值一致(即也设置为1)。 然后这么执行程序(其中100.0.0.37是TrafficMirrorTargetEC2的IP)

代码语言:javascript
复制
sudo ./vxlan-to-http-request -destination "http://100.0.0.37" -filter-request-port "80"

创建流量镜像

创建筛选条件

我们只检测80端的入站流量

在这里插入图片描述
在这里插入图片描述

创建目标

我们需要把流量镜像到Adapter层EC2的网络接口。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建镜像会话

源我们选TrafficMirrorSourceEC2的网络接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

我们在生产环境TrafficMirrorSourceEC2和测试环境TrafficMirrorTargetEC2上启动一个简单的http服务。

代码语言:javascript
复制
sudo python3 -m http.server 80
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到两个环境收到了一致的请求。

总结

整个配置过程其实比较简单。只是因为要测试,且对ACL、安全组要求比较严格,导致很多设置。 最最需要注意的是我们在创建镜像会话时,要记住VNI的值,然后保证其和下面${TrafficMirroringVNI}值一致。

代码语言:javascript
复制
sudo ip link add vxlan0 type vxlan id ${TrafficMirroringVNI} dev eth0 dstport 4789
sudo ip link set vxlan0 up

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建VPC和EC2
    • 选择区域和IPv4/CIDR
      • 分配子网
        • 创建EC2
          • 私有子网访问互联网(单向)
            • 部署NAT网关
            • 修改路由表
            • 路由关联私有子网
          • 打通公有子网和互联网
            • 创建互联网网关,并关联到VPC
            • 公有子网路由到互联网网关
        • 设定ACL
          • 定制生产/测试环境ACL
            • 定制转换层ACL
            • 修改安全组
              • 对TrafficMirrorAdapterEC2新增UDP 4789
                • 对TrafficMirrorSourceEC2新增80端口支持
                  • 对TrafficMirrorTargetEC2新增80端口支持
                  • 部署Adapter层
                  • 创建流量镜像
                    • 创建筛选条件
                      • 创建目标
                        • 创建镜像会话
                        • 测试
                        • 总结
                        • 参考资料
                        相关产品与服务
                        网络入侵防护系统
                        网络入侵防护系统(Network Intrusion Prevention System,NIPS),是基于腾讯安全服务内部数百条业务线的运维经验积累和大数据处理能力的结合,通过旁路部署的方式,提供了网络层 ACL (访问控制)和日志审计功能,解决云平台监管、ACL 控制、安全治理等问题,并辅助客户满足网安法,合规性要求。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档