这是一个网络安全中至关重要的主题,主要目标是保护内部网络,同时为外部用户提供对特定服务(如 Web 服务器、邮件服务器)的安全访问。

核心概念:DMZ 是什么?
DMZ (Demilitarized Zone),即“非军事区”,是一个位于企业内部网络和外部公共互联网之间的小型、独立的网络段。
它的设计目的:
- 隔离风险:将需要对外提供服务的服务器(如 Web、FTP、DNS 服务器)放置在 DMZ 中,即使这些服务器被攻击者攻破,攻击者也只能进入 DMZ,而无法直接触及更安全的内部网络。
- 访问控制:通过防火墙策略,精确控制数据包的流向,通常只允许特定类型的流量(如从互联网到 DMZ 的 Web 请求,以及从 DMZ 到互联网的 DNS 查询)。
- 多层防御:DMZ 构成了纵深防御体系的第一道或第二道防线。
典型的 DMZ 网络拓扑:
Cisco 设备的角色与配置
在典型的 DMZ 架构中,通常会使用不同类型的 Cisco 设备来承担不同的角色:

- Cisco ASA (Adaptive Security Appliance):这是最经典、最常用的设备,它集成了状态检测防火墙、VPN 和入侵防御系统 功能,它是构建 DMZ 的核心。
- Cisco Firepower (FTD - Firepower Threat Defense):这是 Cisco 的新一代防火墙平台,在 ASA 的基础上集成了高级威胁防护、NGFW (下一代防火墙) 和 IPS (入侵防御系统) 功能,提供更智能的威胁检测和响应。
- Cisco Catalyst 9000 系列 (SD-Access):在基于软件定义网络 的架构中,Catalyst 交换机可以通过策略控制流量,实现虚拟化 DMZ,提供更灵活的部署方式。
- Cisco Router:在某些简单场景或作为边界路由器时,可以使用 Cisco 路由器配合 ACL (访问控制列表) 来实现基本的 DMZ 隔离,但其安全性和功能远不如专用防火墙。
下面,我们将以 Cisco ASA (或 FTD) 为核心,讲解 DMZ 的配置。
关键配置步骤与策略
配置 DMZ 的核心在于接口定义和安全策略。
接口划分与安全级别
Cisco ASA 使用接口的安全级别 来定义网络区域的信任度,安全级别是一个 0 到 100 的整数,数字越高,信任度越高。
- Inside (内部网络): 安全级别通常为 100,这是最信任的区域。
- DMZ: 安全级别通常设置为 0 和 100 之间的一个值,50,这表明它比 Inside 不信任,但比 Outside 更信任。
- Outside (互联网): 安全级别必须为 0,这是最不信任的区域。
示例: 假设 ASA 有三个物理接口:

GigabitEthernet0/0连接内部网络,命名为INSIDE,安全级别100。GigabitEthernet0/1连接 DMZ,命名为DMZ,安全级别50。GigabitEthernet0/2连接互联网,命名为OUTSIDE,安全级别0。
访控列表
ACL 定义了允许或拒绝的流量规则,在 DMZ 配置中,我们通常需要创建两个方向的 ACL:
- 入站 ACL: 从低安全级别接口到高安全级别接口的流量,从
OUTSIDE到INSIDE。 - 出站 ACL: 从高安全级别接口到低安全级别接口的流量,从
INSIDE到OUTSIDE。
对于 DMZ,策略的核心是:
- 从互联网到 DMZ (OUTSIDE -> DMZ):只允许特定服务(如 TCP 80/HTTP, TCP 443/HTTPS, TCP 21/FTP)访问 DMZ 上的服务器。
- 从 DMZ 到互联网 (DMZ -> OUTSIDE):通常允许 DMZ 服务器发起的所有出站连接(如 DNS 查询、软件更新),但也可以进行更严格的限制。
- 从 DMZ 到内部网络 (DMZ -> INSIDE):严格禁止或仅允许极少数必要的管理连接(如通过 VPN 或 SSH)。
- 从内部网络到 DMZ (INSIDE -> DMZ):通常允许内部员工访问 DMZ 上的资源(如内部使用的 Web 服务器)。
网络地址转换
NAT 是 DMZ 配置中必不可少的一环,它隐藏了内部和 DMZ 网络的真实 IP 地址。
- 动态 PAT (Dynamic PAT):通常用于将内部网络或 DMZ 网络的多个 IP 地址映射到 ASA 的一个公网 IP 地址上,这是最常见的出站 NAT 类型。
- 静态 NAT (Static NAT):DMZ 的关键,它将 DMZ 中的服务器的私有 IP 地址(如
168.2.10)一对一地映射到一个固定的公网 IP 地址(如0.113.10),这样,互联网用户才能通过0.113.10访问到你的 Web 服务器。
配置示例 (Cisco ASA CLI)
假设以下场景:
- Inside:
168.1.0/24,安全级别100 - DMZ:
168.2.0/24,安全级别50 - Outside:
0.113.1(ASA 外网口IP),互联网 - DMZ Web Server:
168.2.10,需要映射到公网 IP0.113.10
! 1. 定义接口和安全级别 interface GigabitEthernet0/0 nameif INSIDE security-level 100 ip address 192.168.1.1 255.255.255.0 interface GigabitEthernet0/1 nameif DMZ security-level 50 ip address 192.168.2.1 255.255.255.0 interface GigabitEthernet0/2 nameif OUTSIDE security-level 0 ip address 203.0.113.1 255.255.255.252 ! 2. 配置静态 NAT (将DMZ服务器暴露到互联网) object network WEB_SERVER host 192.168.2.10 nat (DMZ, OUTSIDE) static 203.0.113.10 ! 3. 配置访问控制列表 ! 允许互联网访问DMZ的Web服务 (80, 443端口) access-list OUTSIDE_TO_DMZ extended permit tcp any host 203.0.113.10 eq www access-list OUTSIDE_TO_DMZ extended permit tcp any host 203.0.113.10 eq https ! 允许DMZ服务器访问互联网的DNS access-list DMZ_TO_OUTSIDE extended permit udp any any eq domain ! (可选) 允许内部网络访问DMZ服务器 access-list INSIDE_TO_DMZ extended permit tcp any host 192.168.2.10 eq www ! 4. 将ACL应用到接口 (方向很重要!) ! 从低安全级别到高安全级别,需要使用 "in" 方向 ! 从OUTSIDE到DMZ access-group OUTSIDE_TO_DMZ in interface OUTSIDE ! 从DMZ到OUTSIDE (出站方向,默认允许,但为了明确可以加上) access-group DMZ_TO_OUTSIDE out interface DMZ ! 从INSIDE到DMZ access-group INSIDE_TO_DMZ in interface DMZ ! (关键) 默认策略:禁止所有从DMZ到INSIDE的流量 ! ASA默认禁止从低安全级别到高安全级别的流量,除非明确允许。 ! 所以这里不需要写一个"deny all"的规则,但需要确保没有允许的规则。 ! 如果需要允许DMZ服务器管理内部服务器,需要创建一条精确的ACL, ! access-list DMZ_TO_INSIDE extended permit tcp host 192.168.2.10 host 192.168.1.100 eq ssh ! access-group DMZ_TO_INSIDE in interface INSIDE <-- 注意这里是IN接口,但流量从DMZ来 ! 但更安全的做法是要求管理员通过VPN进入内部网络后再管理。 ! 5. 启用路由 (如果需要) ! ASA默认是路由模式,如果不是,需要启用 route outside 0.0.0.0 0.0.0.0 <你的ISP网关IP, 203.0.113.2>
最佳实践与安全加固
- 最小权限原则:只开放绝对必要的端口,不要为了方便而开放整个网段
