防火墙是企业网络安全的"守门员"。与路由器"默认允许"不同,防火墙默认拒绝所有流量,只有明确放行的策略才能通过。本文从安全域划分、策略配置到流量验证,完整实战防火墙安全策略。
一、防火墙基础概念
防火墙与路由器最核心的区别在于默认行为和状态检测机制。
| 对比项 | 路由器 | 防火墙 |
|---|---|---|
| 默认行为 | 默认允许(有路由就转发) | 默认拒绝(无策略则丢弃) |
| 核心功能 | 路由转发、连通网络 | 访问控制、安全隔离 |
| 状态检测 | 无(逐包独立处理) | 有(跟踪会话状态) |
| 安全域 | 无概念 | Trust/Untrust/DMZ等 |
状态检测(Stateful Inspection):防火墙不仅检查单个数据包,还跟踪整个会话。当 Trust→Untrust 的请求被放行后,Untrust→Trust 的回程流量自动放行,无需额外配置反向策略。
二、安全域划分
安全域(Security Zone)是防火墙的逻辑隔离单位,每个域有安全等级(0-100),等级越高越可信。流量从高等级域到低等级域默认允许方向,反之默认拒绝。
| 安全域 | 安全等级 | 典型连接 | 说明 |
|---|---|---|---|
| Trust | 85 | 内网终端、办公区 | 可信内网,最高保护 |
| DMZ | 50 | Web/邮件/FTP服务器 | 对外服务区,半可信 |
| Untrust | 5 | 互联网 | 不可信外部网络 |
安全等级方向规则:高等级→低等级(如 Trust→Untrust)默认允许方向,但仍需配置安全策略才能放行;低等级→高等级(如 Untrust→Trust)默认拒绝方向,必须显式配置 permit 策略。
三、实验拓扑
┌─────────────┐
互联网(8.8.8.8)──┤ USG6000 ├──Trust区: PC1(192.168.10.10)
│ 防火墙 ├──Trust区: PC2(192.168.20.10)
Untrust │ ├──DMZ区: Web服务器(192.168.30.10)
GE1/0/0 │ │
200.1.1.1 └─────────────┘
Trust GE1/0/1 (192.168.10.1)
Trust GE1/0/2 (192.168.20.1)
DMZ GE1/0/3 (192.168.30.1)
需求:
① Trust→Untrust: 内网PC可访问互联网
② Untrust→Trust: 互联网不可主动访问内网PC
③ Untrust→DMZ: 外网可访问DMZ的Web服务器(80端口)
④ Trust→DMZ: 内网PC可管理DMZ服务器
四、安全域与接口配置
将防火墙各接口加入对应安全域,是策略配置的前提。
# 进入系统视图
<USG6000> system-view
# 将接口加入Trust安全域
[USG6000] firewall zone trust
[USG6000-zone-trust] add interface GigabitEthernet 1/0/1
[USG6000-zone-trust] add interface GigabitEthernet 1/0/2
[USG6000-zone-trust] quit
# 将接口加入Untrust安全域
[USG6000] firewall zone untrust
[USG6000-zone-untrust] add interface GigabitEthernet 1/0/0
[USG6000-zone-untrust] quit
# 将接口加入DMZ安全域
[USG6000] firewall zone dmz
[USG6000-zone-dmz] add interface GigabitEthernet 1/0/3
[USG6000-zone-dmz] quit
# 验证安全域配置
[USG6000] display zone
trust Priority: 85
GigabitEthernet1/0/1
GigabitEthernet1/0/2
untrust Priority: 5
GigabitEthernet1/0/0
dmz Priority: 50
GigabitEthernet1/0/3
五、安全策略配置
安全策略是防火墙的核心——定义哪些流量可以跨域通行。每条策略包含源域、目的域、源地址、目的地址、服务、动作。
# ① Trust→Untrust: 允许内网PC访问互联网
[USG6000] security-policy
[USG6000-policy-security] rule name trust-to-untrust
[USG6000-policy-security-rule-trust-to-untrust] source-zone trust
[USG6000-policy-security-rule-trust-to-untrust] destination-zone untrust
[USG6000-policy-security-rule-trust-to-untrust] source-address 192.168.10.0 0.0.0.255
[USG6000-policy-security-rule-trust-to-untrust] source-address 192.168.20.0 0.0.0.255
[USG6000-policy-security-rule-trust-to-untrust] action permit
[USG6000-policy-security-rule-trust-to-untrust] quit
# ② Untrust→Trust: 默认拒绝(无需配置,防火墙默认deny)
# 如需显式拒绝,可配置deny策略
[USG6000-policy-security] rule name untrust-to-trust-deny
[USG6000-policy-security-rule-untrust-to-trust-deny] source-zone untrust
[USG6000-policy-security-rule-untrust-to-trust-deny] destination-zone trust
[USG6000-policy-security-rule-untrust-to-trust-deny] action deny
[USG6000-policy-security-rule-untrust-to-trust-deny] quit
# ③ Untrust→DMZ: 允许外网访问DMZ Web服务器(仅HTTP 80端口)
[USG6000-policy-security] rule name untrust-to-dmz-web
[USG6000-policy-security-rule-untrust-to-dmz-web] source-zone untrust
[USG6000-policy-security-rule-untrust-to-dmz-web] destination-zone dmz
[USG6000-policy-security-rule-untrust-to-dmz-web] destination-address 192.168.30.10 0.0.0.0
[USG6000-policy-security-rule-untrust-to-dmz-web] service http
[USG6000-policy-security-rule-untrust-to-dmz-web] action permit
[USG6000-policy-security-rule-untrust-to-dmz-web] quit
# ④ Trust→DMZ: 允许内网PC管理DMZ服务器(SSH+HTTP)
[USG6000-policy-security] rule name trust-to-dmz-mgmt
[USG6000-policy-security-rule-trust-to-dmz-mgmt] source-zone trust
[USG6000-policy-security-rule-trust-to-dmz-mgmt] destination-zone dmz
[USG6000-policy-security-rule-trust-to-dmz-mgmt] destination-address 192.168.30.10 0.0.0.0
[USG6000-policy-security-rule-trust-to-dmz-mgmt] service ssh
[USG6000-policy-security-rule-trust-to-dmz-mgmt] service http
[USG6000-policy-security-rule-trust-to-dmz-mgmt] action permit
[USG6000-policy-security-rule-trust-to-dmz-mgmt] quit
# ⑤ 默认拒绝所有其他流量(兜底策略)
[USG6000-policy-security] rule name default-deny
[USG6000-policy-security-rule-default-deny] source-zone any
[USG6000-policy-security-rule-default-deny] destination-zone any
[USG6000-policy-security-rule-default-deny] action deny
[USG6000-policy-security-rule-default-deny] quit
| 策略名 | 源域→目的域 | 服务 | 动作 |
|---|---|---|---|
| trust-to-untrust | Trust→Untrust | any | permit |
| untrust-to-trust-deny | Untrust→Trust | any | deny |
| untrust-to-dmz-web | Untrust→DMZ | HTTP(80) | permit |
| trust-to-dmz-mgmt | Trust→DMZ | SSH+HTTP | permit |
| default-deny | any→any | any | deny |
六、策略验证
# ① 验证 Trust→Untrust 放行
PC1> ping 8.8.8.8
Reply from 8.8.8.8: bytes=32 time=5ms ✅ 通
# ② 验证 Untrust→Trust 拒绝
外网PC> ping 192.168.10.10
Request timeout ❌ 被防火墙丢弃
# 查看丢弃日志
[USG6000] display firewall session table
# 无Untrust→Trust的会话记录,说明策略deny生效
# ③ 验证 Untrust→DMZ Web服务器对外发布
外网PC> curl http://200.1.1.1
<html><h1>DMZ Web Server</h1></html> ✅ 返回页面
# ④ 验证 Trust→DMZ 管理访问
PC1> ssh 192.168.30.10
Password: ******
✅ SSH登录成功
# 查看安全策略命中计数
[USG6000] display security-policy rule all
trust-to-untrust hit-count: 156 action: permit
untrust-to-trust-deny hit-count: 23 action: deny
untrust-to-dmz-web hit-count: 42 action: permit
trust-to-dmz-mgmt hit-count: 8 action: permit
default-deny hit-count: 5 action: deny
七、排错思路
- 策略不生效? 检查接口是否已加入正确安全域——`display zone` 确认接口归属,接口未入域则策略永远无法匹配。
- 匹配顺序问题? 策略按配置顺序自上而下匹配,命中即停止。兜底 deny 策略必须放在最后,否则会拦截所有流量。
- 地址范围错误? `source-address` 用反掩码(0.0.0.255 对应 /24),不是子网掩码。写错会导致匹配范围偏差。
- NAT与策略协同? 先做安全策略检查,再做NAT转换。策略中的地址是NAT前的真实地址,不是转换后的公网地址。
- 回程流量不通? 状态检测会自动放行已建立会话的回程流量。若回程不通,检查是否为非状态化协议(如UDP单包)或会话超时。
NAT与策略的顺序:防火墙处理流程为:安全策略检查 → NAT转换 → 路由转发。配置策略时源/目的地址必须写NAT前的原始地址,而非转换后的地址。这是最常见的配置错误。
八、小结
- 防火墙默认拒绝所有流量,与路由器的默认允许截然不同
- 安全域按信任程度划分:Trust(85) > DMZ(50) > Untrust(5)
- 安全策略五要素:源域、目的域、源地址、目的地址、服务/动作
- 策略按顺序匹配,兜底deny放最后;NAT前地址用于策略匹配
- 状态检测自动放行回程流量,无需配置反向策略