aws vpc 通过gateway loadblancer创建终端节点服务检测客户端流量
参考资料
- 从客户 Amazon VPC 访问其他客户 Amazon VPC 内的服务或资源
- 从客户 Amazon VPC 访问外部亚马逊云科技托管服务
- 客户 Amazon VPC 内部资源和服务的相互访问
- 使用 GWLB 和 FortiGate 作为流量镜像的替代方案
- aws自刘地
- AWS GWLB对访问ALB流量做安全检测
- AWS GWLB对访问NLB流量做安全检测
- AWS GWLB集成Fortigate防火墙4
- AWS GWLB集成FortiGate防火墙3
- 利用CloudFormation自动化部署AWS GWLB集成Palo Alto防火墙2
- AWS GWLB集成Palo Alto防火墙1
- 使用Gateway Load Balancer实现集中的网络流量深度检测
终端节点服务
终端节点基于Amazon PrivateLink技术实现,在不使用nat,igw和dx等服务的情况下,提供跨vpc和账号的私密访问。

在私有子网中我们可以使用aws服务终端节点访问aws服务,而无需配置nat网关和igw。终端节点分为以下两种
-
网关终端节点,网关终端节点通过配置路由控制vpc中访问aws服务的流量。目前只支持s3和dynamodb
https://docs.amazonaws.cn/zh_cn/vpc/latest/privatelink/vpce-gateway.html
-
接口终端节点,接口终端节点会在指定vpc的指定子网中创建eni接口,之后vpc中的应用通过该eni网卡访问aws服务。可以将接口终端节点视作aws服务在vpc中的私有ip地址的映射。接口终端节点默认开启私有dns解析(s3接口终端节点除外),因此无需修改代码即可完成公有dns向私有ip地址的解析。
https://docs.amazonaws.cn/zh_cn/vpc/latest/privatelink/vpce-interface.html
支持接口终端节点的服务,https://docs.amazonaws.cn/zh_cn/vpc/latest/privatelink/integrated-services-vpce-list.html

除了使用aws托管服务的终端节点外,我们可以将自己的应用同样包装为一个终端节点,即终端节点服务
终端节点服务同样分为两种类型
-
nlb终端节点服务,服务提供者将应用程序或者alb作为nlb的后端暴露出去,并包装成一个终端节点服务。服务使用者创建这个终端节点服务对应的终端节点,进行私有访问。
![使用接口终端节点访问终端节点服务]()
-
gwlb终端节点服务。服务提供者启动用于安全检查、合规性、策略控制和其他网络服务的防火墙服务,作为gwlb的后端包装为一个终端节点服务。服务使用者创建这个终端节点服务对应的终端节点。与nlb终端节点服务的区别在于,gwlb的后端并不真正处理请求,通常是进行安全和合规检测,对流量进行转发(感觉可以类比tun/tap设备的逻辑)。
![使用网关负载均衡器终端节点访问终端节点服务]()
创建nlb类型的终端节点服务
在本账户下vpc B中创建nlb并挂载后端目标组
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2VDLF7P-1678946216286)(assets/image-20230316004106477.png)]](https://i-blog.csdnimg.cn/blog_migrate/e8d17e44ea5e9e26fba9680820b6e3b9.png)
创建终端节点服务,指定上面的nlb

在vpc A中创建终端节点,搜索对端终端节点服务名称(service name)进行确认

在终端节点服务中确认请求,等待终端节点创建成功
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FQXZr6aC-1678946216289)(assets/image-20230316004720146.png)]](https://i-blog.csdnimg.cn/blog_migrate/a026c4770145bdd06eab66d242e32e4f.png)
在vpc B中启动ec2实例访问终端节点的dns,查看nlb后端是否收到请求
$ nslookup vpce-0xxxxxxxxxb66b6-9qgowx3f.vpce-svc-0c702a885bf2a8a4c.cn-north-1.vpce.amazonaws.com.cn
Non-authoritative answer:
Name: vpce-0xxxxxxxxxb66b6-9qgowx3f.vpce-svc-0c702a885bf2a8a4c.cn-north-1.vpce.amazonaws.com.cn
Address: 172.31.12.91
$ curl vpce-07f375298dfab66b6-9qgowx3f.vpce-svc-0c702a885bf2a8a4c.cn-north-1.vpce.amazonaws.com.cn
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
...
创建glwb类型的终端节点服务
我们仿照官方文档创建一个glwb类型的终端节点服务,整体结构如下



子网路由设置如下
-
igw所在子网路由将通往application的流量发往gwlb
-
application服务所在子网的路由通往gwlb endpoint
-
gwlb endpoint所在子网路由表,既要包括通往application的路由,又要包括通往igw的路由
需要注意的点
-
vpc A有两个子网,一个用于app,一个用于gwlb endpoint
-
gwlb和target group可以处于同一子网中
-
gwlb所在子网至少有1个实例,必须监听6081端口,协议为GENEVE(Generic Network Virtualization Encapsulation)
关于gwlb路由配置,参考
https://docs.amazonaws.cn/elasticloadbalancing/latest/gateway/getting-started.html
创建目标组test-gwlb,必须监听6081端口,协议为GENEVE(Generic Network Virtualization Encapsulation)。不支持任何其他协议或端口。将健康检查设置为22端口

在vpc B创建gwlb,选择虚拟设备可用区,默认转发请求到目标组test-gwlb

创建gwlb终端节点服务

在vpc A创建终端节点,之后在终端节点服务中确认请求,等待终端节点创建成功

配置路由,细节参考
https://aws.amazon.com/cn/blogs/china/gateway-load-balanceruse-implement-centralized-network-traffic-depth-detection/
pip3 install pyyaml
使用git clone将整个目录下载到EC2上。执行如下命令:
git clone https://github.com/sentialabs/geneve-proxy.git
修改config.yaml配置文件如下
# If `allowed_transport_protocols` is set and has values, the proxy
# will drop any outbound flows using transport protocols not present in the list.
allowed_transport_protocols:
- 0x0006 # TCP
- 0x0011 # UDP
- 0x0001 # ICMP
# If `blocked_transport_protocols` is set and has values, the proxy
# will drop any outbound flows using transport protocols present in the list.
blocked_transport_protocols:
# - 0x0001 # ICMP
保存退出修改状态。由此,将表示允许ICMP协议通过。
修改proxy/proxy_config.py配置文件,找到self.outbound这一段中的allowed_transport_protocols,将其从None改为True。配置文件片段如下:
self.outbound = {
'drop_all_traffic': False,
'allowed_transport_protocols': True,
'blocked_transport_protocols': None,
'allowed_application_ports': None,
'blocked_application_ports': None,
}
启动Geneve转发
python3 main.py
节点监听6081端口
$ netstat -nlp | grep 6081
(No info could be read for "-p": geteuid()=1000 but you should be root.)
udp 0 0 0.0.0.0:6081 0.0.0.0:*
客户端发送ping,收到回包
ping www.bing.com
在服务后端抓包查看结果
$ sudo tcpdump -nvv 'port 6081'
192.168.101.247.60001 > 192.168.101.235.6081: [udp sum ok] Geneve, Flags [none], vni 0x0, options [class Unknown (0x108) type 0x1 len 12 data 74a11ad9 6ec49886, class Unknown (0x108) type 0x2 len 12 data 00000000 00000000, class Unknown (0x108) type 0x3 len 8 data 39f7f1a7]
IP (tos 0x0, ttl 254, id 29162, offset 0, flags [DF], proto TCP (6), length 40)
10.2.101.47.48354 > 52.94.212.197.https: Flags [.], cksum 0xb792 (correct), seq 2388, ack 5780, win 356, length 0
10:58:40.778376 IP (tos 0x0, ttl 254, id 32944, offset 0, flags [none], proto UDP (17), length 1568)



浙公网安备 33010602011771号