第一部分:核心概念 - DMZ 是什么?
DMZ (Demilitarized Zone),即非军事区,是一个位于企业内部网络和外部不安全网络(如互联网)之间的小型网络隔离区域。

为什么需要 DMZ? 想象一下一个军事基地,你不能把指挥部(核心资产)直接放在前线(互联网)吧?你需要一个缓冲地带,DMZ 就是这个缓冲地带。
- 核心目标:通过隔离,即使部署在 DMZ 中的服务器(如 Web 服务器、邮件服务器)被黑客攻破,黑客也无法直接访问到公司最宝贵的内部资源(如数据库文件、财务系统、员工电脑)。
- 类比:
- 互联网:外部世界,任何人都可以访问。
- DMZ:公司的“访客中心”或“前台”,客户(互联网用户)可以来这里获取信息(访问网站),但不能进入公司的“办公区”(内部网络)。
- 内部网络:公司的“核心研发部”或“金库”,只有授权员工才能进入。
DMZ 中通常放置什么?
- Web 服务器
- 邮件服务器
- DNS 服务器(对外解析部分)
- FTP 服务器
- VPN 服务器(有时也放在 DMZ,有时放在内部网络)
第二部分:Cisco 设备的角色与拓扑
在典型的企业网络中,Cisco 设备扮演着防火墙和路由器的角色,最常见的设备系列是 Cisco ASA (Adaptive Security Appliance) 或 Cisco Firepower (FTD),我们以经典的 Cisco ASA 为例来讲解拓扑和配置。
典型的网络拓扑结构
+-----------------+ +-----------------+ +-----------------+
| Internet | | Cisco ASA | | Internal LAN |
| | | (Firewall/Router)| | |
| (WAN) | | | | (LAN) |
| | +-----------------+ | |
+--------+--------+ | | | +--------+---------+
| | Eth0 | Eth1 | Eth2 | |
| (Public IP) |(Outside)|(DMZ) |(Inside) | |
| +------|------|--------+ |
| | | |
+---------------------+ +--------------------------+
(管理网络)
接口说明:

- Outside Interface (外部接口):连接互联网,拥有公网 IP 地址,这是网络的“第一道防线”。
- DMZ Interface (DMZ 接口):连接 DMZ 网络,通常使用私有 IP 地址(如 10.1.1.0/24)。
- Inside Interface (内部接口):连接公司内部员工网络,也使用私有 IP 地址(如 192.168.10.0/24)。
- Management Interface (管理接口):可选,用于管理员远程登录和管理防火墙本身,通常也放在一个隔离的管理网络中。
第三部分:Cisco ASA/FTD 的核心配置步骤
配置 DMZ 主要涉及三个核心部分:接口配置、安全策略(访问控制列表 ACL)、NAT(网络地址转换)。
步骤 1:接口配置
我们需要定义 ASA 的三个物理接口,并分配 IP 地址。
# 进入全局配置模式 ciscoasa> enable ciscoasa# configure terminal # 配置 Outside 接口 ciscoasa(config)# interface GigabitEthernet0/0 ciscoasa(config-if)# nameif outside ciscoasa(config-if)# security-level 0 # 外部安全级别最低,为 0 ciscoasa(config-if)# ip address 203.0.113.10 255.255.255.0 # 替换为你的公网IP ciscoasa(config-if)# no shutdown # 配置 DMZ 接口 ciscoasa(config)# interface GigabitEthernet0/1 ciscoasa(config-if)# nameif dmz ciscoasa(config-if)# security-level 50 # DMZ 安全级别居中,为 50 ciscoasa(config-if)# ip address 10.1.1.1 255.255.255.0 ciscoasa(config-if)# no shutdown # 配置 Inside 接口 ciscoasa(config)# interface GigabitEthernet0/2 ciscoasa(config-if)# nameif inside ciscoasa(config-if)# security-level 100 # 内部安全级别最高,为 100 ciscoasa(config-if)# ip address 192.168.10.1 255.255.255.0 ciscoasa(config-if)# no shutdown
security-level 的作用:
ASA 有一个“隐式拒绝”的默认策略,安全级别低的接口到安全级别高的接口的默认流量是被允许的,反之则被拒绝。
inside (100)->dmz (50):默认允许。dmz (50)->inside (100):默认拒绝。dmz (50)->outside (0):默认允许。outside (0)->dmz (50):默认拒绝。
这个特性大大简化了配置,我们只需要为“从低安全级别到高安全级别”的流量编写明确的允许规则即可。

步骤 2:NAT (网络地址转换)
NAT 是将私有 IP 地址转换为公网 IP 地址的过程,以便内部和 DMZ 的设备能访问互联网。
场景 1:DMZ 服务器需要被互联网用户访问 我们需要将 DMZ 服务器的私有 IP 映射到一个公网 IP(通常是 ASA 的 Outside IP)。
- 示例:DMZ 中有一台 Web 服务器,IP 为
1.1.10,希望互联网用户可以通过0.113.10访问它的 80 端口。
# 配置静态 NAT,一对一映射 ciscoasa(config)# object network WEB_SERVER ciscoasa(config-network-object)# host 10.1.1.10 ciscoasa(config-network-object)# nat (dmz, outside) static 203.0.113.10 service tcp www www
object network WEB_SERVER:定义一个对象,代表我们的服务器。host 10.1.1.10:指定服务器的真实 IP。nat (dmz, outside) static ...:这是 NAT 命令。(dmz, outside):表示流量从 DMZ 区域流向 Outside 区域时触发此 NAT 规则。static:表示静态一对一映射。0.113.10:映射后的公网 IP。service tcp www www:映射 TCP 协议的 80 端口。www是80的别名。
场景 2:内部员工访问互联网 内部员工访问互联网时,通常使用 PAT (Port Address Translation,NAT 的一种),即多个内网 IP 共享一个公网 IP。
# 允许整个内部网络访问互联网,并使用 ASA 的 Outside IP 进行 PAT 转换 ciscoasa(config)# nat (inside) 1 0.0.0.0 0.0.0.0 ciscoasa(config)# global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0:匹配所有内部源地址。global (outside) 1 interface:使用 Outside 接口的 IP 地址进行 PAT 转换。
步骤 3:安全策略 (访问控制列表 - ACL)
这是最关键的一步,它决定了哪些流量可以通过防火墙。
核心原则:“最小权限原则”,即只允许必要的流量,拒绝所有其他流量。
场景 1:允许互联网访问 DMZ 的 Web 服务器 我们之前配置了静态 NAT,现在需要允许流量通过。
# 创建一个 ACL,允许来自互联网的 TCP 80 端口流量访问 WEB_SERVER 对象 ciscoasa(config)# access-list INET_TO_DMZ extended tcp any object-group WEB_SERVER eq www
access-list INET_TO_DMZ:定义一个名为INET_TO_DMZ的 ACL。extended:表示这是一个扩展 ACL(可以指定协议、源、目标端口等)。tcp:协议为 TCP。any:源地址是任何地方(互联网)。object-group WEB_SERVER:目标地址是我们之前定义的 WEB_SERVER 对象。eq www:目标端口等于 80。
场景 2:允许 DMZ 服务器访问互联网 Web 服务器需要从互联网下载更新文件。
# 创建一个 ACL,允许 DMZ 网络访问互联网的任何 TCP/UDP 流量 ciscoasa(config)# access-list DMZ_TO_INET extended ip 10.1.1.0 255.255.255.0 any
场景 3:允许内部员工访问互联网 这是最基本的需求。
# 创建一个 ACL,允许内部网络访问互联网的任何流量 ciscoasa(config)# access-list INSIDE_TO_INET extended ip 192.168.10.0 255.255.255.0 any
应用 ACL 到接口 创建好 ACL 后,必须将其应用到相应的接口上,并指定流量的方向。
# 应用 INET_TO_DMZ ACL 到 outside 接口,方向是 in(进入防火墙) ciscoasa(config)# access-group INET_TO_DMZ in interface outside # 应用 DMZ_TO_INET ACL 到 dmz 接口,方向是 in(进入防火墙) ciscoasa(config)# access-group DMZ_TO_INET in interface dmz # 应用 INSIDE_TO_INET ACL 到 inside 接口,方向是 in(进入防火墙) ciscoasa(config)# access-group INSIDE_TO_INET in interface inside
特别注意:access-group ... in interface 的 in 是指流量进入该接口时,防火墙会用 ACL 进行匹配。in interface outside 表示从互联网进入防火墙的流量。
第四部分:DMZ 服务器自身安全配置
即使 DMZ 受到防火墙保护,服务器自身的安全加固也至关重要,否则,一旦被攻破,黑客可能会尝试利用防火墙的漏洞或配置错误来渗透到内部网络。
- 最小化安装:只安装运行服务所必需的软件。
- 及时更新:保持操作系统和所有应用软件的补丁是最新的。
- 强密码和策略:使用复杂的密码,并启用账户锁定策略。
- 关闭不必要的服务和端口:如果只是 Web 服务器,就应该关闭 FTP、SSH(如果不需要远程管理)、Telnet 等服务。
- 配置主机防火墙:在服务器上启用 Windows Defender Firewall 或
iptables,只允许必要的端口(如 80, 443)被访问。 - 日志监控:定期检查服务器的访问日志和安全日志,发现异常活动。
配置 Cisco DMZ/互联网连接是一个系统性的工程,核心在于分层防御和最小权限原则。
- 物理/逻辑隔离:使用 ASA/FTD 的不同安全级别的接口(Inside, DMZ, Outside)创建网络隔离区。
- 地址转换:通过 NAT/PAT 解决私有网络与公网通信的问题,并为 DMZ 服务器发布服务。
- 访问控制:使用 ACL 精细地定义允许或拒绝的流量,确保只有合法的通信才能穿越防火墙。
- 纵深防御:防火墙是第一道防线,DMZ 服务器自身的安全加固是第二道防线,两者缺一不可。
遵循以上步骤和原则,你可以构建一个既能让外部用户访问你的服务,又能有效保护内部网络安全的强大防御体系。
