韩源,资深工程师,存储和灾备专家。

Azure 网络安全解析

作为公有云最重要环节之一,网络安全一直是 Azure 的重中之重。在 Azure 中,多种安全技术共同构成了立体的网络保护:

其中,最常和用户打交道的就是 NSG(网络安全组),vm 和网络的连接、不同子网间的连接等都可以用NSG来做限制和保护。

NSG的定义

顾名思义,NSG(网络安全组)是由一些列规则(rule)形成的组合。这些规则不关心具体的传输内容(这些在 WAF、IPS 等解决),而是通过从哪里来(源)、到哪里去(目标)、经过哪个门洞(源端口、目标端口)、传输的什么东西(UDP or TCP)来决定采取什么措施(允许还是拒绝),如下图所示:

那么,在同一个 NSG 的多条规则是如何同时生效呢?可见如下流程:

简单描述,就是首先根据数据走向决定采用入站规则还是出站规则,然后根据条件(源地址、目标地址、源端口、目标端口、协议类型等)按优先级顺序匹配规则,按照第一个符合条件的规则处理数据流(允许还是拒绝),完成NSG操作;需要注意的是,如果同时符合多个规则的条件,也只执行第一个规则。如果所有规则都不满足,该数据流被丢弃(实际是由最后一条默认规则决定)。

举个例子,给一台网站服务器配置 NSG,要求只能访问 http 服务(80 端口),其他端口访问均禁止,制订了如下两条规则:

1. 允许所有地址都可以访问80端口(rule1)

2. 拒绝所有地址访问任意端口(rule2)

当 rule1 优先级高时,访问 http 服务首先满足了rule1,可以访问 80 端口,不再执行 rule2;而访问其他端口的行为不满足 rule1,则继续执行 rule2,拒绝访问。

当 rule2 优先级高时,则无论访问哪个端口(包含80)都首先满足 rule2,拒绝访问,不再继续执行 rule1,所以 http 的访问也会被禁止。

由此可见,规则的顺序非常重要。

下边就结合具体操作简单讲解NSG如

何配置及产生作用。

Azure 网络安全解析

NSG 的配置管理——环境准备

环境准备

NSG 的创建一般可以在两个地方进行:创建虚机的同时创建 NSG;或者单独创建 NSG。

本次测试中(所有配置都在资源组 HyNSGDemoRG 中进行):

子网创建:

创建名为 NSGDemoVnet 的虚拟网络,并在其下创建名为 NSGDemoSunnet 的子网:

虚机创建

两台基于 win

dows server 的 vm:vm01 和 vm02:

vm01 创建时 NSG 选择无:

vm02 选择默认 NSG(vm02-nsg);

两台 vm 都连接到子网 NSGDemoSunnet。

检查两台 vm 的网络配置,汇总如下:

虚机 网络接口 公网 ip 私网 IP
vm01 vm01234 139.217.2.162 10.5.0.4
vm02 vm02549 139.217.2.198 10.5.0.5

NSG 创建:

创建名为 NSGDemo 的 NSG:

NSG 比较

检查资源组里的资源,可以看到有两个 NSG:单独创建的 NSGDemo 和随 vm02 创建的 vm-nsg:

NSGDemo:

首先查看 NSGDemo,进入 NSGDemo,从概述里可以发现,由于是新建 NSG,所以出站入站的规则都是空的:

再点击入站安全规则,进入后点击默认规则,这时候会显示如下默认规则:

这是优先级最低的三条规则,如果一个入站数据流所有自定义规则都不满足,就会最终执行这三条规则中的一条。三条规则按顺序分别定义了:

1.从 vnet 到 vnet 所有

入站网络可通(Allow)

2.从 Azure 的 LB 到所有入站网络可通(Allow)

3.从任意网络到任意网络如站不通(Deny)

在没有添加自定义规则的情况下,如果需要访问该 NSG 后端的网络与设备:

1.如果源和目标都是 vnet,满足 65000 可以访问

2.如果源是 Azure 的 LB,无论目标是什么,都满足 65001,都可以访问

3.其他情况,满足 65500,网络不通

同样查看出站安全规则的默认规则,也可看到三条默认规则:

按顺序定义了:vnet 到 vnet 所有出站可通;所有源到 internet 出站可通(所有设备可访问 internet),其它情况出站都不通。

默认规则不能删除、修改以及调整优先级。

再检查该 NSG 管理的网络接口和子网,由于是新建,所以没有任何设备:

vm02-nsg:

检查 vm02-nsg,发现与 NSGDemo 不同之处在于:

已经添加了 vm02 的网络接口 vm02549:

默认建立了一个入站规则 default-allow-rdp:

这条规则有什么作用?查看其属性:

其含义是:此规则优先级 1000,允许任意源地址访问该规则下所以设备(目前只有 vm02)的 rpd 端口 3389。即任意一台联网的电脑可通过远程桌面访问 vm02。

测试通过:

再测试vm01:

可以看到因为 vm01 没有任何 NSG 的安全限制,可以认为是直接暴露在公网,所以也可以远程桌面访问。

验证 NSG 作用

做进一步的测试确认 NSG 的作用。

分别在两台 vm 启用 IIS 服务,并确认本机浏览器访问 127.0.0.1 可打开默认界面:

本地浏览器访问 vm01:

本地浏览器访问 vm02:

说明:

  • vm01 没有 NSG 保护,任意端口(rdp3389、http80 等)都可以访问
  • vm02 有 NSG 保护,除了 rdp3389 以外,从 internet 到其他端口的访问均被拒绝,提升了相应安全性

NSG 的配置管理——NSG 规则配置测试

查看 NSG 的信息可知,NSG 可关联两种类型的设备:网络接口和子网:

下边分别对这两种设备进行NSG 的配置管理和测试:

网络接口的 NSG 配置管理:

点击 NSGDemo-网络接口:

点击关联为 NSGDemo 增加关联的网络接口:

可以看到 NSG 可以关联到同一个订阅里所有的网络接口,但是已被关联到其他 NSG 的网络接口无法再被关联,除非取消与其他 NSG 的关联。

将 vm01 的网络接口 vm01234 关联到 NSGDemo:

vm01 的公共 IP 和专用 IP 都被加入了 NSG。

完成后可以继续关联其它网络端口,所以网络端口与 NSG 的关系是多对一。

再通过远程桌面和 http 去连接 vm01,发现已无法连接:

点击 NSGDemo-入站安全规则-添加-高级,可看到每条规则需要如下元素:

其中:

  • 名称:该规则的名字,无影响,建议取一个能体现规则含义的简称,例如 vm01_http
  • 优先级:纯数字,非常重要,决定了规则的执行顺序(以下用 rule+优先级代表规则,例如 rule300 代表优先级为 300 的规则)。

    Tips:

    – 优先级的范围是 100——4096

    – 不要将规则指定为 100 和 4096,避免需要添加更高优先级或更低优先级时需要编辑 rule100 和 rule4096

    – 优先级不要连续排列,最好中间有一定间隔,例如 200、300、400、500,便于以后插入优先级

    – 建议首先创建名为 DenyAll 的 rule4000,拒绝所有未经允许的连接;这条规则其实与最后一条默认入站规则 rule65500 一样,为什么还要单独创建?因为在 Azure 中对规则不能单独 enable 和 disable,所以如果要临时禁用一条规则只能删除。如果创建了 DenyAll 的 rule4000,需要临时禁用的规则可以将优先级调整到 4000 以后,这样勿需删除,重新启用时将优先级调整至合适的数字即可

  • 源:数据流的来源,可定义为 Any(所有来源,不限制)、CIDR block、Tag

    Tips:

    – CIDR block:以 CIDR 的方式描述一个 IP 段,例如 192.168.1.0/24,或者一个确定的 IP 地址如 192.168.1.5

    – Tag:Azure 内部对某个类型的网络的标记,一般包含:Internet(外网)、VirtualNetwork(vnet)、AzureLoadBalancer(Azure的LB)

  • 协议:TCP还是 UDP,或者两者都包含
  • 源端口范围:1-65536,从源的哪个端口来,可以指定的一个端口(例如 80)、或一个端口范围(例如 80-1000)、或所有端口(*)
  • 目标:要访问的设备,同样可定义为 Any(所有来源,不限制)、CIDR block、Tag

    Tips:

    如果将目

    标设置为NSG没有的成员,没有任何意义。

  • 目标端口范围:1-65536,到目标的哪个端口,制定方

    法同源端口范围

  • 操作:拒绝或允许

    现在为 vm01 在 NSGDemo 添加规则,允许任何主机 http 访问,但是不允许 rdp 连接,可按如下制定规则:

    名称 优先级 协议 源端口范围 目标 目标端口范围 操作
    DenyAll 4000 Any TCP * Any * 拒绝
    vm01_http 300 Any TCP * Any 80 允许

制定好的规则如下:

再次验证,发现 rdp 仍然无法连通,但 http 已可以访问:

子网的 NSG 管理配置:

为了避免干扰,先进入 vm01 和 vm02,取消所有 NSG 关联。具体做法点击相应 vm-网络接口-选择网络接口-网络安全组-编辑-选择无并保存:

进入 NSGDemo,删除 rule4000 以外所有的自建规则:

现在点击子网,关联 NSGDemoVnet 下的子网 NSGDemoSunnet:

现在分别访问vm01和vm02的http,都无法访问,因为vm01和vm都连接到NSGDemoSunnet,而NSGDemo的规则禁止了对NSGDemoSunnet的所有入站访问(此测试在浏览器隐身模式下进行,避免缓存影响):

现在新建一个规则rule300如下:

名称 优先级 源 协议 源端口

范围 目标 目标端口范围 操作

vm_http 300 Any TCP * Any 80 允许

现在可以看到两台 vm 的 http 均可访问:

关于 NSG 目标的进一步探讨:

在 NSGDemo 里,关联了一个子网 NSGDemoSunnet,而 NSGDemoSunnet 连接了 vm01 和 vm02 的网卡。如果希望做进一步的限制,只允许访问 vm01的 http,而不允许访问 vm02,应该如何设置?这时候就需要通过规则的目标来限制了。

查询到 vm01 和 vm02 连接到 NSGDemoSunnet 的网络 Tag 都是 VirtualNet,没办法通过 Tag 来区分,但是两台 vm 的 IP 地址不一样,所以只能用 CIDR 来限制。

修改之前的 rule300,将目标从 Any 改为 CIDR block,内容为 10.5.0.4,其他保持不变,如下图:

再分别访问两台 vm 的 http,可以看到 vm01 的 http 可以访问,而 vm02 的则被拒绝了:

再将 rule300 做一下修改,目标改为 vm01 的公网 IP:

测试 vm01 的 http 连接,发现无法打开:

因为 NSG 关联的子网 NSGDemoSunnet 连接的 vm 的专用 IP,所以 vm01 的公网 IP 并不是 NSGDemo 的成员,所以连接需求不满足 rule300 的条件,不执行该规则,直接执行rule4000,禁止所有入站连接。

如果 NSG 关联的是网络接口,其中成员既包含公网 IP 也包含专用 IP,目标分别设置为公网 IP 和专用 IP,会有什么区别?

重新对 NSGDemo 进行配置,取消对子网的关联,增加对 vm01 的网络接口 vm01234 的关联。

可以看到,NSGDemo 关联到两个 IP(139.217.2.162 和 10.5.0.4)。

分三次配置 rule300 如下,并检查 vm01 的 http 访问情况

名称 优先级 协议 源端口范围 目标 目标端口范围 操作
vm_http 300 Any TCP * Any 80 允许
vm_http 300 Any TCP * 10.5.0.4 80 允许
vm_http 300 Any TCP * 139.217.2.162 80 允许

当目标为 Any 时:

当目标为专用 IP(10.5.0.4)时:

当目标为公网 IP(139.217.2.162)时:

比较这三种情况,可以发现对公网 IP 设置的规则是不生效的。

远程桌面到一台 vm,运行 ipconfig 检查 IP 配置:

可以发现,Azure 的 vm 实际是没有公网 IP 的,在 Azure 中给 vm 分配的公网 IP 实际是通过类似 NAT 的方式付给 vm,而 NSG 是直接针对 vm 的网络接口生效,看不到前段的 NAT 设备,所以在 vm 的 NSG 里配置对公网 IP 是没意义的,无法生效。

出站规则的管理配置:

以上的配置都是针对入站规则,那么出站规则如何生效?

默认情况下,出站规则允许所有的对外访问。一般情况下,出站的端口是随机挑选,所以很难通过源端口对出站进行操作(允许或拒绝),除非程序很明确有固定的出战端口。而 NSG 不同于 OS 的防火墙,对程序无感知,也无法通过对程序进行判断来进行操作(允许或拒绝)。而目标的端口相对来说比较固定,可以通过对目标端口的判断来进行操作(允许或拒绝)。

例如如下出站规则禁止了 NSG 中所有设备对 http(80)的访问:

但是,如果外网的 http 服务使用了其它端口(例如 81),这条规则就无法生效。

Tips:

  • 在严格安全管理的企业网络里,出站也应该严格禁止,所以一般的配置方式是制定一个优先级低的拒绝所有出站的规则,再逐步添加对某一个条件允许的规则

多 NSG 的管理配置:

之前的描述中,提到可以对子网也可以对vm的网络接口配置 NSG,如果子网和 vm 的网络接口分别有 NSG,即同时有多个 NSG 对一个设备有效时,优先级怎么判断?下边通过测试来检验。

先将所有 NSG 删除,再建立连个 NSG:NSG01关联到子网 NSGDe moSunnet,NSG02 关联到 vm01 的网络接口 vm01234。

此时两个 NSG 的默认入站规则拒绝了所有入站,所以 http 无法打开:

现在 NSG01 配置允许 http 访问:

访问 http 依然无法打开。

删除 NSG01 建立的入站规则,在 NSG02 配置允许 http 访问:

再次访问 http 也无法打开。

可以看出,多个 NSG 时,彼此间没有顺序,而是采用拒绝优先的方式。即:当每个 NSG 都匹配到首个满足的规则时,如果其中一个规则是拒绝,则采用拒绝的规则。

在如上的测试中,每次都只给一个 NSG 配置了允许 http 的规则,会满足另一个 NSG 的默认规则 rule65500,拒绝入站,由于拒绝优先,所以导致 http 无法访问。

现在两个 NSG 中都配置允许 http 访问的规则,现在访问 vm01 的 http 正常了:

总结

NSG 的配置在 Azure 的配置并不难,关键是弄清楚相关的逻辑关系,合理的规划规则以及规则顺序,结合其他技术,就可以为 Azure 提供良好的安全保护。

立即访问http://market.azure.cn

网络安全组(NSG)简介相关推荐

  1. Azure中配置网络安全组入站规则让外部网络访问VM中的网站

    今天在azure中搭建了个虚机,虚机的IIS上搭建了个测试网站,然后在虚机内可以正常访问,但是在外部internet却无法访问. 查看了azure的帮助文档,网上也搜了,得到的答案都是设置终结点,az ...

  2. Azure NSG网络安全组日志分析

    好久不见,最近很多小伙伴说Azure的监控不大灵光,所以就去回去好好看了一下目前Azure上服务的监控支持情况.整理来看AZURE目前GLOBAL从运维监控角度的支持好于国内AZURE,无论是基础组件 ...

  3. [ Azure - NSG ] 通过 Azure 网络安全组建立虚拟机的入站规则 Inbound 和出站规则 Outbound

    本文介绍在Azure门户中设置NSG中的inbound端口规则和outbound端口规则,在自己的虚拟机VM中如果添加了对应的防火墙白名单,同样也需要在NSG中进行配置,不然依然无法进行通信.如果有遇 ...

  4. 代谢组学简介-百趣代谢组学资讯

    百趣代谢组学资讯:代谢组学(Metabonomics/Metabolomics)是继基因组学和蛋白质组学之后发展起来的新兴的组学技术,是系统生物学的重要组成部分,研究对象大都是相对分子质量1000以内 ...

  5. 组播简介(二层组播)

    1 承载网组播模型 2 二层组播技术 2.1 组管理协议 Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),是因特网协议家族中的一个 ...

  6. 网络安全-反序列化漏洞简介、攻击与防御

    目录 简介 PHP序列化 Python序列化 攻击 PHP举例 Python举例 防御 参考 简介 各种语言都有反序列化漏洞,Java.PHP.Python等.序列化即将对象转化为字节流,便于保存在文 ...

  7. 【慧河网络安全组】Web基础题解培训

    View-source 类: 1.view_source 题目链接:攻防世界https://adworld.xctf.org.cn/challenges/details?hash=a47bef3d-7 ...

  8. 中科微北斗定位模组ATGM336H简介

    36H系列卫星定位模块  产品介绍 ATGM336H是高灵敏度,支持BDS/GPS/GLONASS卫星导航系统的单系统定位,以及任意组合的多系统联合定位的接收机模块.ATGM336H基于本公司自主独立 ...

  9. Azure NSG(安全组)

    [在此处输入文章标题] 之前在Azure上,对于网络安全,用户自己可以配置VM终结点的ACL ,但是无法针对整个V-NET或定义一个组来配置ACL. 网络安全组 (NSG) 的出现解决了这个问题,可用 ...

最新文章

  1. LeetCode Odd Even Linked List
  2. oracle health monitor,Oracle 11g Health Monitor Checks
  3. 别小看不起眼的电阻,里面大有学问!
  4. Autofac的切面编程实现
  5. 隐藏的东西? 您需要HiddenSidesPane
  6. angularjs java 实例_[Java教程]angularjs小练习(分别通过ng
  7. 从Ibatis过渡到Mybatis-比较Mybaits较与Ibatis有哪些方面的改进
  8. uni-app开发开发h5,小程序,app,注意事项
  9. linux 截图软件安装,Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A
  10. 工具分享:xampp-windows-x64-7.3.2-1-VC15-installer.exe 请自行下载(附下载链接)
  11. 压缩解压缩工具之WinRAR
  12. 【Java项目】社区论坛项目
  13. Sandboxie免费开源沙箱软件下载与详细使用教程
  14. 公司中秋趣味比赛二连冠后的思考
  15. vc6.0中的dsp,dsw,ncb,opt,clw,plg,aps等文件的简单说明
  16. NFT Insider #92:NBA球星拉梅洛·鲍尔入驻The Sandbox元宇宙,蓝精灵协会宣布与著名艺术家展开一系列合作
  17. 图解Oracle数据库(二)
  18. Windows 下编程检测显示器信息及插拔
  19. vb6.0实现生成不重复的随机整数并排序输出
  20. 优维科技实力入选《2023深圳金融业信息技术融合创新案例汇编》

热门文章

  1. Java面试题(二)JMM,volatile,CAS
  2. bochs上网镜像怎么上网_bochs win7镜像可上网版-bochs WIN7 IMG镜像文件下载 v1.0完整版...
  3. JVM、DVM(Dalvik VM)和ART虚拟机的区别
  4. ctf.show 萌xin区杂项
  5. 如何设置国际PayPal
  6. MyEclipse 目录结构简化
  7. 使用plotly画地图
  8. MATLAB中关于复矩阵的操作,新手易错
  9. 地下城与勇士正在自动连接频道服务器,自动连接频道失败 无限自动连接如何处理...
  10. 服务器cpu虚拟化已禁用怎样解禁,虚拟化已禁用,有办法吗