NSX分布式防火墙是如何工作的?

简介: 今天我们来聊一聊VMware NSX的分布式防火墙DFW,本文提及的NSX,均指NSX for vSphere,即NSX-V,有关NSX-T的讨论,将在后续推出。

今天我们来聊一聊VMware NSX的分布式防火墙DFW,本文提及的NSX,均指NSX for vSphere,即NSX-V,有关NSX-T的讨论,将在后续推出。

了解过NSX的朋友一定很清楚,NSX的管理平面、控制平面和转发平面是相互独立分离的。对于管理平面,大家比较熟悉的是vCenter和NSX Manager;对于vsfwd,可能就比较陌生。那么,这是个什么组件?与我们讨论的NSX分布式防火墙又有什么千丝万缕的联系呢?

image.png

在部署NSX解决方案的时候,其中有一个关键的步骤,叫Host Preparation主机准备。在这个阶段,NSX Manager通过vCenter的ESX Agent Manager Service(EAM),以集群为单位,在每一台ESXi主机上安装一个叫做esx-nsxv的vSphere Installation Bundle(VIB)。

我们可以通过以下命令在ESXi安装的VIB列表中找到这条记录:# esxcli software vib list

image.png

这个小小的VIB会在ESXi的Kernal Space内核空间运行三个非常关键的模块,其中的vsip module就和我们今天所讲述的NSX DFW息息相关。

我们可以通过以下命令找到这个加载并运行的模块:# vmkload_mod -l

image.png

除此以外,esx-nsxv还会在ESXi的User Space用户空间运行一个名为vShield-Stateful-Firewall的服务,这就是我们所说的vsfwd。

我们可以通过以下命令验证这个服务是否运行:# /etc/init.d/vShield-Stateful-Firewall status

image.png

在了解了上述内容后,我们再回过头来看NSX的DFW原理图。

image.png

在ESXi用户空间运行的vsfwd,会和NSX Manager的TCP5671端口保持连接,用以接受NSX Manager下发的分布式防火墙规则。vsfwd通过Virtual Machine Communication Interface(VMCI),与在ESXi内核空间运行的vsip module通信,vsip module会将接收到的分布式防火墙规则下发到对应虚拟机的虚拟网卡vnic上。

在VM虚拟机的虚拟网卡vnic和上联的虚拟机端口组之间,有一条隐性的链路,叫IO Chain。这条IO链上有很多插槽,其中Slot0-3,Slot12-15是VMware预留,Slot4-11提供给合作伙伴,NSX的分布式防火墙就作用在Slot2插槽

举个简单的例子,当流量从VM向外转发时,会首先经过IO Chain的Slot2插槽,此时vsip module会根据应用在vnic上的规则进行匹配和控制,如果规则禁止转发,那么流量根本不会经过ESXi主机的上联物理网卡vmnic到达物理网络。由于IO链一直存在,除非特殊情况,否则虚拟机的迁移不会影响分布式防火墙生效。VMware NSX的安全无处不在,就是通过这种方式实现的。


下面,我们做一个简单的实验,来验证上文所说的内容。

1.验证ESXi的vsfwd,与NSX Manager的TCP5671端口保持连接

# esxcli network ip connection list | grep 5671

image.png

2.我们开启一台ESXi虚拟机作为测试用例,该虚拟机共有6个vnic,其中vnic0和vnic1作为管理网络负载网卡,管理地址为172.20.5.53

image.png

3.管理员通过Web Client,添加一条防火墙规则,禁止所有到该虚拟机的流量

image.png

4.可以看到外部已经无法PING通该虚拟机

image.png

5.在承载该虚拟机的ESXi命令行,查阅并找到该虚拟机的网卡信息

# summarize-dvfilter | more

image.png

6.可以看到该虚拟机一共有6块网卡,分别是eth0-eth5,同时分布式防火墙运行在每一块vnic与虚拟机端口组之间IO链的Slot2插槽

image.png

7.我们可以进一步查看作用在每一块vnic上的分布式防火墙规则集合

# vsipioctl getrules -f 网卡名称

可以看到图中rule 1018就是阻止所有入向流量的规则,它被包含在规则集合domain-c80中

image.png

8.此时,我们通过命令停止ESXi用户空间运行的vsfwd

# /etc/init.d/vShield-Stateful-Firewall stop

image.png

9.可以看到,即使我们停止了vsfwd,分布式防火墙规则依旧生效,我们还是无法PING通虚拟机

各位可以回顾一下,vsfwd只在接受并传达给vip module分布式防火墙规则阶段有参与,而VM流量能否通过Slot2,是由vsip module根据规则去处理,与vsfwd无关

image.png

10.那么,如果我们删除应用在vnic上的防火墙规则,结果又会如何呢?

# vsipioctl vsipfwcli Override -f 网卡名称 -c "create ruleset 规则集合名称;"

有些版本,命令可能是# vsipioctl vsipfwcli -Override -f 网卡名称 -c "create ruleset 规则集合名称;"

image.png

11.我们发现,即使删除了eth0的防火墙规则,虚拟机依旧无法访问,这和我们之前的描述大相径庭,问题出在哪里呢?别忘了,承载该esxi-1a虚拟机管理网络的还有eth1,我们还需要删除应用给eth1的防火墙规则

image.png

12.可以看到,在删除eth0和eth1两块vnic的分布式防火墙规则后,外部终于可以PING通172.20.5.53,即esxi-1a的管理地址

image.png

image.png

这种方式可以用来解决vCenter被DFW屏蔽的情况

13.但是对于eth2-eth5,可以看到之前的防火墙规则依旧存在。只是esxi-1a虚拟机的管理流量不会经过它们的iochains,因此这些规则是否存在不会影响外界能否PING通172.20.5.53

image.png

14.我们保持vsfwd停止运行的状态,通过Web Client新建一条策略,允许任意源SSH访问esxi-1a

image.png

15.可以看到,虽然管理员添加并应用了该防火墙规则,但由于vsfwd未正常运行,因此ESXi虚拟机无法接受NSX Manager下发的规则,也无法将这些规则通过vsip module应用到对应的虚拟机,虚拟机vnic上的规则集合保持着之前空的状态

image.png

16.此时,我们重新启动vsfwd

# /etc/init.d/vShield-Stateful-Firewall start

image.png

17.很快,我们就能发现原本可以PING通的esxi-1a虚拟机又不可达了,原因是防火墙策略重新下发并应用给该虚拟机后阻止了一切非SSH入向流量

image.png

18.通过命令行,我们可以看到这些变化

image.png

19.根据防火墙规则,外部是可以通过SSH访问esxi-1a的

image.png

怎么样,现在通过上文的论述和实验,大家对NSX的分布式防火墙是否有所了解了呢?

本文最后,特别感谢好友Coco,Eagle在工作和学习中对我的帮助,在与他们的交流过程中,学到了不少非常有用的虚拟化技术和项目经验。

在下尚在学习阶段,文中如有谬误,欢迎各位斧正。

相关文章
|
人工智能 安全 物联网
什么是分布式防火墙?
【8月更文挑战第23天】
725 0
什么是分布式防火墙?
|
7月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
496 2
|
7月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
447 6
|
8月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
12月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1389 0
分布式爬虫框架Scrapy-Redis实战指南
|
6月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
540 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
NoSQL Java 中间件
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
本文介绍了从单机锁到分布式锁的演变,重点探讨了使用Redis实现分布式锁的方法。分布式锁用于控制分布式系统中多个实例对共享资源的同步访问,需满足互斥性、可重入性、锁超时防死锁和锁释放正确防误删等特性。文章通过具体示例展示了如何利用Redis的`setnx`命令实现加锁,并分析了简化版分布式锁存在的问题,如锁超时和误删。为了解决这些问题,文中提出了设置锁过期时间和在解锁前验证持有锁的线程身份的优化方案。最后指出,尽管当前设计已解决部分问题,但仍存在进一步优化的空间,将在后续章节继续探讨。
1517 131
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
|
6月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
10月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
671 67

热门文章

最新文章