公众号旧文

防火墙 和 安全组,还有 网闸 都是什么?

作者:胖子阅读 —

很多人在接触服务器、政企网络、云计算之后,会陆续听到几个词:

  • 防火墙
  • 安全组
  • 网闸
  • ACL
  • WAF
  • IPS

网闸到底是什么?它和防火墙有什么区别?

如果用一句话概括:

防火墙是在通路上检查流量,网闸则更接近把两边隔开,再有控制地搬运数据。

而我们平时在云服务器上经常配置的安全组,本质上又可以理解为一种云平台提供的网络访问控制机制。

这篇文章就把三个最常见的概念一次讲清楚:

网闸、防火墙、安全组。


一、先说最熟悉的:防火墙

防火墙的核心作用其实很好理解:

决定哪些网络流量可以通过,哪些不能通过。

例如有一台服务器:

公网 IP:1.2.3.4

SSH:22

HTTPS:443

数据库:3306

你可能配置防火墙:

允许 TCP 22

允许 TCP 443

拒绝 TCP 3306

拒绝其他所有入站

这样:

Internet

   │

   ▼

┌───────────┐

│  防火墙   │

└───────────┘

   │

   ▼

服务器

防火墙实际上就在网络路径上。

数据包想过去:

数据包

  ↓

防火墙检查

  ↓

允许 / 拒绝

  ↓

继续传输

所以防火墙最经典的逻辑就是:

源 IP

目标 IP

源端口

目标端口

协议

连接状态

例如 Linux 上我们非常熟悉的:

iptables

nftables

ufw

firewalld

从广义上来说,都属于主机防火墙体系。


二、防火墙不只是封端口

很多人第一次接触防火墙,会觉得:

防火墙不就是开端口和关端口吗?

实际上远远不止。

现代防火墙一般可以分成几个层次。

最基础的是:

IP + Port + Protocol

例如:

允许:

203.0.113.10 → TCP/22

拒绝:

其他 IP → TCP/22

进一步可以进行:

连接状态检测

也就是 Stateful Firewall。

例如服务器主动访问:

Server → Google:443

Google 返回:

Google:443 → Server

虽然回来的数据是入站,防火墙知道这是已经建立连接的一部分,因此会自动允许。

再高级一点,则可以检查:

HTTP

TLS

DNS

应用协议

攻击特征

恶意流量

这就是我们经常听到的:

NGFW

Next Generation Firewall

下一代防火墙

三、安全组是什么?

如果你用过:

阿里云

腾讯云

AWS

Azure

Google Cloud

一定见过:

Security Group

也就是安全组。

很多人第一次用云服务器,会发现一个奇怪的现象:

Linux 防火墙明明没有拦:

iptables -L

端口也确实监听了:

ss -lntp

但是外网就是访问不了。

最后发现:

云平台安全组没有开放端口。

原因是安全组通常并不运行在你的 Linux 系统内部。

可以把它理解为:

Internet

    │

    ▼

┌─────────────┐

│ 云平台网络  │

│   安全组    │

└─────────────┘

    │

    ▼

你的 VPS

    │

    ▼

Linux 防火墙

    │

    ▼

应用程序

也就是说,一条数据包可能要经过两道检查:

安全组

   ↓

Linux 防火墙

两个地方都允许,它才能真正到达程序。


四、安全组很像云端防火墙

从功能上来说,安全组和传统防火墙非常相似。

例如:

允许 TCP 22

来源:你的办公 IP

允许 TCP 443

来源:0.0.0.0/0

拒绝 TCP 3306

因此最简单的理解就是:

安全组是云厂商在虚拟网络层面提供的一套访问控制规则。

不过它和 Linux 主机防火墙的位置不同。

例如:

Internet

                            │

                            ▼

                    ┌─────────────┐

                    │   安全组    │

                    └─────────────┘

                            │

                            ▼

                       虚拟网卡

                            │

                            ▼

                    ┌─────────────┐

                    │ Linux防火墙 │

                    └─────────────┘

                            │

                            ▼

                    Nginx / SSH / App

因此实际运维时,经常要同时检查:

1. 程序有没有监听

2. Linux 防火墙有没有开放

3. 云安全组有没有开放

4. 上游网络有没有拦截

五、那么网闸到底是什么?

真正容易混淆的是网闸。

网闸英文里经常可以看到:

Security Isolation Gateway

Security Gateway

Network Isolation

Data Diode

不同厂商的产品定义并不完全一样。

但是它最核心的思想是:

在两个不同安全等级的网络之间建立强隔离,同时允许经过严格控制的数据交换。

最典型的场景是:

互联网

   │

   │

   X

不能直接连通

   │

   ▼

内部业务网络

但是现实中又不能完全没有数据交换。

例如外部网络有一些数据,需要进入内部网络。

于是出现:

外网

 │

 ▼

┌──────────┐

│   网闸   │

└──────────┘

 │

 ▼

内网

但这里最关键的地方是:

它不是简单地像路由器一样把 IP 数据包转发过去。


六、普通防火墙和网闸最大的区别

普通防火墙的逻辑是:

网络 A

   │

   ▼

Firewall

   │

   ▼

网络 B

两边依然是网络连通关系。

只不过防火墙决定:

哪些连接能建立

哪些连接不能建立

例如:

10.0.0.10

   │

TCP

   ▼

Firewall

   │

TCP

   ▼

192.168.1.10

TCP 会话本身可以穿过防火墙。

而很多网闸的设计理念则不同。

更接近:

网络 A

   │

   ▼

┌────────────┐

│ 网闸 A 侧  │

└────────────┘

    数据交换

┌────────────┐

│ 网闸 B 侧  │

└────────────┘

   │

   ▼

网络 B

也就是说 A 和 B 之间并不存在普通意义上的直接网络连接。

中间设备负责:

接收数据

↓

检查数据

↓

解析数据

↓

过滤数据

↓

重新构造

↓

发送到另一侧

这就出现了一个非常重要的概念:

协议终止。


七、什么叫协议终止?

假设外部用户访问内部 Web 服务。

普通防火墙可能是:

Client

  │

  │ TCP Session

  ▼

Firewall

  │

  │ TCP Session

  ▼

Server

虽然经过防火墙,但本质上仍然是一条端到端连接。

而网闸可能变成:

Client

  │

TCP Session 1

  ▼

网闸

  │

解析 HTTP 数据

  │

重新建立连接

  ▼

TCP Session 2

  │

Server

也就是说原来的 TCP 连接在网闸这里终止。

内部服务器看到的连接可能根本不是来自原客户端。

而是:

网闸 → 内部服务器

这和很多反向代理有一点类似,但网闸一般会做更严格的隔离和数据检查。


八、有些网闸甚至没有普通 IP 转发能力

这是网闸很有意思的地方。

传统路由设备通常是:

eth0

   │

IP Forward

   │

eth1

例如 Linux:

net.ipv4.ip_forward=1

于是:

A → Linux → B

可以进行 IP 层转发。

但高隔离级别网闸可能故意避免这种设计。

例如:

外网网卡

   │

外处理系统

   │

数据交换模块

   │

内处理系统

   │

内网网卡

中间不存在普通:

IP Routing

因此攻击者即使控制外侧,也很难直接:

扫描内网

建立 TCP

访问 SMB

访问 SSH

访问数据库

横向移动

九、数据摆渡

网闸里还有一个非常形象的词:

数据摆渡。

可以想象成两个岛:

外网岛             内网岛

  │                  │

  │                  │

  └──── 渡船 ────────┘

两边没有桥。

但是允许一条船:

把允许的数据

从一边运到另一边

于是:

文件

数据库同步数据

业务消息

指定接口数据

都可以通过受控方式进行交换。

但是不能:

随便 SSH

随便扫描端口

随便建立 TCP

这就是摆渡的思想。


十、一个非常典型的例子

假设某机构有两个网络:

互联网区

和:

核心业务内网

安全要求:

两个网络不能直接互通

但是业务要求每天必须把互联网收到的数据同步到核心系统。

如果直接开:

Internet

   │

Firewall

   │

Database

风险依然比较大。

攻击者可能寻找:

防火墙漏洞

数据库漏洞

Web 漏洞

协议漏洞

错误配置

而网闸方案可能设计成:

互联网系统

    │

    ▼

网闸外侧

    │

    ▼

数据检查

    │

    ▼

数据摆渡

    │

    ▼

网闸内侧

    │

    ▼

内部业务系统

只允许:

特定格式

特定字段

特定协议

特定方向

特定文件

通过。


十一、单向网闸:更极端的隔离

还有一种更加特殊的设备:

单向网闸 / Data Diode

它的设计目标是:

只能 A → B

不能:

B → A

甚至不是软件规则不允许。

而是物理结构就不具备反向通信能力。

例如:

生产网

   │

   │

   ▼

单向传输

   │

   X 不能反向

   │

   ▼

监控网

这在一些极高安全要求环境中非常有价值。

因为即使软件配置出错:

反向链路本身也不存在

十二、为什么普通企业很少见到网闸?

因为网闸主要解决的并不是普通互联网服务器安全问题。

普通网站通常使用:

安全组

+

防火墙

+

WAF

+

IDS/IPS

就已经可以满足大量需求。

网闸更多出现在:

政务网络

金融系统

工业控制

能源系统

医疗网络

涉密网络

关键基础设施

生产控制网络

这些环境经常存在:

互联网区

DMZ

办公网

生产网

核心业务网

安全管理区

不同区域之间的安全等级差异非常大。

这时候就需要更加严格的隔离设备。


十三、三者放在一起理解

现在就可以把:

安全组

防火墙

网闸

放到一起。

可以简单理解为:

技术 核心作用
安全组 云平台网络访问控制
防火墙 控制网络连接是否允许
网闸 隔离网络并进行受控数据交换

它们最大的区别是对网络连通这件事情的态度不同。

安全组:

可以连,但必须符合规则

防火墙:

可以连,但我要检查

网闸:

原则上不让两个网络直接连,

需要交换的数据由我代为传递。

十四、可以把它们理解成三种门

如果一定要用生活中的东西类比:

安全组

像:

小区门禁名单

规则:

谁可以进

从哪个门进

什么时候能进

防火墙

像:

安检门 + 保安

人还是从这个门穿过去。

但是保安会判断:

能不能进

带了什么东西

有没有异常

网闸

更像:

两个完全隔离的园区

中间没有普通通道。

如果要交换东西:

园区 A

   │

   ▼

检查站

   │

   ▼

专门摆渡

   │

   ▼

检查站

   │

   ▼

园区 B

你本人并不能直接穿过去。

只有:

经过批准的数据

可以被送过去。


十五、实际网络里三者可能同时存在

这也是很容易误解的地方。

并不是有网闸就不用防火墙``

现实里的网络可能是:

Internet

   │

   ▼

云安全组

   │

   ▼

边界防火墙

   │

   ▼

DMZ

   │

   ▼

网闸

   │

   ▼

核心网络

   │

   ▼

服务器防火墙

   │

   ▼

应用

它们分别负责不同层级的安全问题。

甚至还能继续增加:

WAF

IDS

IPS

EDR

NDR

零信任

ACL

所以现代网络安全很少依赖某一个设备解决所有问题。

而是分层防御。


十六、安全组和防火墙为什么经常同时存在?

这一点对于 VPS 用户尤其重要。

假设服务器运行:

SSH :22

Nginx :443

MySQL :3306

一种比较合理的做法可能是:

云安全组:

22  → 只允许管理 IP

443 → 全网开放

3306 → 不开放

Linux 防火墙:

22  → 只允许 Tailscale

443 → 全网开放

3306 → 只允许 localhost / 内网

于是攻击者需要同时突破:

云网络策略

+

主机网络策略

这就是典型的:

Defense in Depth,纵深防御。


十七、最后记住三个核心概念

如果以后再碰到:

网闸

防火墙

安全组

不用背复杂定义。

只需要记住三句话。

防火墙

控制哪些网络连接可以通过。

安全组

云平台在虚拟网络层提供的访问控制规则。

网闸

把两个安全区域隔离开,再以受控方式交换数据。

再进一步可以浓缩成:

安全组:云上的门禁

防火墙:网络上的安检站

网闸:两个网络之间的隔离带 + 数据摆渡站

如果从网络架构角度看,它们解决的是完全不同层次的问题。

普通服务器最常见的是:

安全组 + 防火墙

而当两个网络之间已经不是哪些端口能访问的问题,而是:

这两个网络到底应不应该直接建立网络连接?

这时候,才真正进入了:

网闸和网络隔离的世界。