三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

华为防火墙安全区域实战:从Trust、DMZ到Untrust的配置与排错指南

华为防火墙安全区域实战:从Trust、DMZ到Untrust的配置与排错指南

1. 项目概述与核心价值

最近在带新人做网络实验,发现很多朋友对防火墙安全区域的理解,尤其是Trust、DMZ、Untrust这三个经典区域的配置,总是停留在“背概念”的阶段,一到真机或者模拟器上实操就懵。正好手头有个eNSP模拟环境,今天就拿华为USG6000系列防火墙为例,带大家手把手、从零到一,彻底搞懂这三个安全区域的配置逻辑和实战意义。这不是一个照本宣科的实验手册,而是融合了我这些年踩过的坑、总结出的经验,目标是让你配完一次,就能真正理解防火墙策略的精髓,以后遇到任何厂商的设备都能举一反三。

简单说,这个实验就是要在eNSP里搭建一个模拟的企业网络环境,用防火墙把网络划分成内网(Trust)、服务器区(DMZ)和外网(Untrust),然后配置安全策略,控制它们之间谁能访问谁、能访问什么。听起来简单,但里面门道很多:为什么策略是单向的?DMZ区的服务器到底该怎么摆?地址转换(NAT)在什么时候做、怎么做?这些才是实战的核心。无论你是正在备考认证,还是工作中需要部署和维护防火墙,这个实验都能给你打下坚实的实操基础。

2. 实验拓扑设计与设备选型思路

2.1 拓扑结构详解与规划

我们先来设计实验的“骨架”。一个典型且足够说明问题的拓扑,不需要太复杂,但该有的元素都得有。我设计的拓扑如下:

  • 防火墙:使用一台USG6000V(如USG6000V1)。这是实验的核心,所有策略都基于它进行配置。
  • 内网(Trust区域):用一台PC(Client)模拟,连接到防火墙的GigabitEthernet 0/0/1接口。这个区域代表公司内部办公网络,是受信任程度最高的区域。
  • 服务器区(DMZ区域):用一台Cloud(云设备,在eNSP中可模拟服务器)或一台Server设备模拟,连接到防火墙的GigabitEthernet 0/0/2接口。这里放置需要对外提供服务的Web服务器、邮件服务器等。
  • 外网(Untrust区域):用一台Router(路由器,如AR2220)模拟互联网,连接到防火墙的GigabitEthernet 0/0/0接口。路由器另一端可以再挂一个PC模拟公网上的主机。

IP地址规划是避免后期混乱的关键,我建议采用清晰易记的网段:

  • Trust区域192.168.1.0/24。防火墙G0/0/1口IP设为192.168.1.254,内网PC IP设为192.168.1.10,网关指向192.168.1.254
  • DMZ区域172.16.1.0/24。防火墙G0/0/2口IP设为172.16.1.254,DMZ服务器IP设为172.16.1.10,网关指向172.16.1.254
  • Untrust区域100.1.1.0/30(点对点链路常用)。防火墙G0/0/0口IP设为100.1.1.1,模拟外网的路由器接口IP设为100.1.1.2。路由器上可以再配置一个环回口(Loopback0)8.8.8.8/32,模拟公网上的某个IP。

注意:很多新手会忽略接口IP与安全区域的绑定顺序。务必记住一个铁律:先给物理接口配置IP地址,再将接口加入到对应的安全区域。如果顺序反了,接口没有IP,加入到区域后也无法生成路由,会导致后续策略失效。

2.2 为什么选择USG6000V与eNSP?

有朋友可能会问,为什么不用真机或者别的模拟器?这里分享一下我的选型考量。

首先,eNSP是目前学习华为网络技术最主流的免费模拟平台,虽然对防火墙等安全设备模拟支持有局限(比如部分高端特性无法模拟),但对于基础的区域、策略、NAT配置来说完全够用,而且能完美模拟与路由器、交换机的联动。遇到“启动失败40”等问题,通常是VirtualBox版本或兼容性问题,优先检查VirtualBox版本(建议5.2.x或6.0.x特定版本)和Windows系统兼容模式设置。

其次,选择USG6000V系列虚拟防火墙,是因为它是华为下一代防火墙的软件版本,其配置逻辑与真机高度一致,命令行(CLI)和网页界面(Web)的操作方式都是行业标准的。通过它学到的安全策略思想(基于安全区域的五元组匹配),同样适用于华三、锐捷、山石乃至Fortinet、Palo Alto等国内外厂商的设备,只是命令行语法或页面布局不同而已。学习它,等于掌握了防火墙配置的“道”,而非仅仅“术”。

3. 基础环境搭建与初始化配置

3.1 eNSP设备启动与连线

按照设计好的拓扑,在eNSP中拖入设备。启动顺序有讲究:先启动防火墙(USG6000V),再启动路由器和终端设备。因为防火墙启动较慢,如果后启动,可能导致链路层协议(如ARP)学习不全。

使用自动连线或手动选择接口进行连接。确保连线后接口的物理状态和协议状态都是UP(绿色)。如果接口一直显示“####”或红色,首先检查设备是否完全启动成功,其次在防火墙命令行用display interface brief查看接口状态,确认是否有错。

3.2 防火墙基础配置三部曲

防火墙初始配置有三个固定步骤,我称之为“三部曲”,缺一不可。

第一步:接口IP地址配置。这是通信的基础。

system-view sysname FW interface GigabitEthernet 0/0/0 ip address 100.1.1.1 255.255.255.252 quit interface GigabitEthernet 0/0/1 ip address 192.168.1.254 255.255.255.0 quit interface GigabitEthernet 0/0/2 ip address 172.16.1.254 255.255.255.0 quit

第二步:将接口划入安全区域(Security Zone)。这是定义“身份”的关键。

firewall zone untrust add interface GigabitEthernet 0/0/0 quit firewall zone trust add interface GigabitEthernet 0/0/1 quit firewall zone dmz add interface GigabitEthernet 0/0/2 quit

执行完后,可以用display zone命令查看确认。

第三步:配置默认路由指向外网。告诉防火墙去往互联网的下一跳。

ip route-static 0.0.0.0 0.0.0.0 100.1.1.2

实操心得:在真机或复杂模拟中,完成上述配置后,建议先测试防火墙与直连设备的基础连通性(用ping)。例如,从防火墙ping 100.1.1.2,从防火墙ping 192.168.1.10。这一步能快速定位是IP配置错误、接口未加入区域,还是物理链路问题。

4. 安全策略配置深度解析

防火墙的核心是策略。华为防火墙的安全策略基于“五元组”(源地址、目的地址、源端口、目的端口、协议)和“安全区域”进行匹配。策略的执行顺序是自上而下,匹配即停止

4.1 策略配置逻辑与方向性理解

这是最容易混淆的点。策略的“方向”是由数据流的源区域(source-zone)和目的区域(destination-zone)定义的,而不是由接口定义。记住一个核心原则:防火墙默认拒绝所有跨区域流量。我们必须手动配置允许的规则。

根据我们的拓扑,我们需要配置以下几条关键策略:

  1. 允许内网(Trust)访问外网(Untrust)和DMZ:这是最常见的员工上网和访问内部服务器需求。
  2. 允许外网(Untrust)访问DMZ区的特定服务(如HTTP):这是对外提供Web服务。
  3. 禁止DMZ区主动访问内网(Trust):这是DMZ的核心安全意义,即使DMZ服务器被攻破,攻击者也不能直接进入最核心的内网。
  4. 禁止外网(Untrust)直接访问内网(Trust):这是防火墙的基本防护。

4.2 具体策略命令与参数释义

我们来逐条配置,并解释每个参数的意义。

策略1:允许Trust到Untrust和DMZ的所有流量(用于上网和访问服务器)

security-policy rule name Trust_to_Untrust_DMZ # 规则名称,要有意义 source-zone trust destination-zone untrust dmz # 目的区域可以是多个 source-address 192.168.1.0 mask 255.255.255.0 action permit quit
  • source-zone trust:定义流量来自Trust区域。
  • destination-zone untrust dmz:定义流量去往Untrust或DMZ区域。这条策略同时满足了内网用户上网和访问DMZ服务器的需求。
  • source-address:进一步限定源IP地址段,更精确。
  • action permit:动作为允许。

策略2:允许Untrust访问DMZ的Web服务(80端口)

security-policy rule name Untrust_to_DMZ_Web source-zone untrust destination-zone dmz destination-address 172.16.1.10 mask 255.255.255.255 # 精确到服务器IP service http # 引用预定义的服务“http”,代表TCP 80端口 action permit quit
  • service http:这里使用了防火墙预定义的服务对象。你也可以用service protocol tcp destination-port 80自定义。使用预定义对象更规范。
  • 这条策略非常关键,它只开放了必要的端口(80),而不是允许外网访问DMZ的所有端口,符合最小权限原则。

策略3与4:默认拒绝与隐式规则对于“禁止DMZ访问Trust”和“禁止Untrust访问Trust”,在大多数情况下,我们不需要显式配置“deny”规则。因为防火墙的默认策略就是拒绝所有。只要没有匹配到permit规则,流量就会被拒绝。

但是,为了审计和明确起见,有时我们会配置一条显式的拒绝所有规则,并记录日志,放在所有策略的最后:

security-policy rule name Deny_All_Log source-zone any destination-zone any action deny logging # 启用日志记录,便于排查 quit quit # 退出安全策略视图

配置完成后,使用display security-policy rule all查看所有策略规则,确认顺序和内容是否正确。

5. 网络地址转换(NAT)配置实战

安全策略管“让不让过”,NAT则管“出去的时候身份怎么变”。对于内网访问外网,我们通常需要配置源NAT(SNAT),将内网的私网IP转换为公网IP。对于外网访问DMZ服务器,我们需要配置目的NAT(DNAT),将公网IP的某个端口映射到DMZ服务器的私网IP。

5.1 源NAT(SNAT)配置:内网上网

假设我们拥有一个公网IP地址100.1.1.1(即防火墙外网口地址),我们要让整个Trust区域(192.168.1.0/24)的用户上网时,源IP都转换为这个公网IP。这种模式也叫“Easy IP”,适用于拨号或单个公网IP的场景。

nat-policy rule name SNAT_Trust_to_Untrust source-zone trust destination-zone untrust source-address 192.168.1.0 mask 255.255.255.0 action source-nat easy-ip # 关键命令,使用出口接口IP进行地址转换 quit quit
  • action source-nat easy-ip:这是最简洁的配置方式。防火墙会自动使用数据包流出接口(G0/0/0)的IP地址作为转换后的公网IP。

5.2 目的NAT(DNAT)配置:发布DMZ服务器

假设我们想让外网用户通过访问防火墙外网口IP100.1.1.1的80端口,来访问DMZ区那台IP为172.16.1.10的Web服务器。

nat-policy rule name DNAT_Web_Server source-zone untrust destination-zone local # 注意:目的区域是local,指防火墙本身 destination-address 100.1.1.1 mask 255.255.255.255 service http action destination-nat static # 静态目的NAT to 172.16.1.10 8080 # 可以转换IP和端口。这里只转换IP,端口不变。 quit quit
  • destination-zone local:这是DNAT配置的一个关键点。因为外网的访问请求目的地是防火墙自身的公网IP(100.1.1.1),在防火墙看来,这个目的IP属于local区域(防火墙自身)。
  • action destination-nat static:配置静态映射。
  • to 172.16.1.10:将访问100.1.1.1的流量,目的IP转换为172.16.1.10

重要提示:DNAT配置完成后,必须配套一条安全策略,允许相应的流量从源区域访问目的区域。在这个例子中,我们已经配置了策略Untrust_to_DMZ_Web,它允许从untrustdmz访问172.16.1.10的80端口。DNAT发生在策略检查之前,所以防火墙实际检查的是:源untrust-> 目的dmz(地址172.16.1.10)。策略必须允许这条路径,否则DNAT生效了,流量还是会被策略拒绝。

6. 实验验证与故障排查实录

配置不是终点,验证通过才是。我们按照逻辑顺序进行测试。

6.1 连通性测试步骤

  1. 内网PC访问外网(模拟互联网)

    • 192.168.1.10的PC上,尝试ping 8.8.8.8(模拟外网地址)。
    • 预期结果:能ping通。
    • 验证要点:这测试了Trust->Untrust的安全策略和SNAT是否生效。可以在防火墙命令行用display firewall session table查看会话表,应该能看到一条从192.168.1.108.8.8.8的会话,并且源IP已经被转换为100.1.1.1
  2. 内网PC访问DMZ服务器

    • 192.168.1.10的PC上,尝试ping 172.16.1.10或访问http://172.16.1.10
    • 预期结果:能通。
    • 验证要点:这测试了Trust->DMZ的安全策略。注意,这个访问不经过NAT,是直接的内部访问。
  3. 外网主机访问DMZ的Web服务

    • 在模拟外网的路由器或PC上,尝试访问http://100.1.1.1
    • 预期结果:能打开DMZ服务器172.16.1.10上的网页。
    • 验证要点:这综合测试了Untrust->local的DNAT配置和Untrust->DMZ的安全策略。同样可以通过查看会话表来验证。
  4. 外网主机访问内网PC

    • 从外网尝试ping 192.168.1.10
    • 预期结果:不通。
    • 验证要点:这验证了默认拒绝策略或我们显式配置的拒绝规则生效了,符合安全预期。

6.2 常见问题与排查技巧

在实际操作中,你可能会遇到以下问题,这是我的排查思路:

  • 问题一:内网能ping通防火墙DMZ口,但ping不通DMZ服务器。

    • 排查:首先在防火墙上ping 172.16.1.10,如果通,说明防火墙到服务器网络层可达。问题很可能在服务器本身的防火墙(如Windows防火墙)或网关设置上。检查DMZ服务器的网关是否指向了防火墙的DMZ口IP(172.16.1.254)。
    • 技巧:在防火墙上使用display ip routing-table查看路由表,确认有到达172.16.1.0/24的直连路由。
  • 问题二:外网无法访问发布的Web服务,但DMZ服务器本地访问正常。

    • 排查:这是最典型的问题。请严格按照以下清单检查:
      1. DNAT规则display nat-policy rule all确认规则命中次数(hit count)是否增加。
      2. 安全策略display security-policy rule all确认Untrust->DMZ的策略命中次数是否增加。这是最容易被忽略的一步!很多人只配了DNAT,忘了配策略。
      3. 服务器监听:确认DMZ服务器的Web服务(如80端口)确实已启动,并且监听在0.0.0.0172.16.1.10上,而不是仅127.0.0.1
      4. 会话表display firewall session table verbose查看是否有对应的会话生成。如果DNAT和策略都正确,这里应该能看到会话。
  • 问题三:配置了策略和NAT,但会话表看不到条目。

    • 排查:会话表是流量经过防火墙并成功匹配策略/NAT后的产物。如果没有会话,说明流量根本没到防火墙,或者在前期的路由、区域匹配阶段就失败了。
    • 技巧:开启防火墙的策略调试日志会话日志。在系统视图下使用firewall log session enablefirewall log packet enable(谨慎使用,会产生大量日志),然后尝试触发流量,通过display logbuffer查看实时日志,能看到流量被哪个模块处理、是允许还是拒绝,这是终极定位手段。
  • 问题四:eNSP中设备启动失败或接口异常。

    • 排查:这是环境问题。确保使用的是兼容版本的eNSP和VirtualBox。如果防火墙启动卡住,可以尝试在eNSP中重置设备。如果接口始终“####”,检查虚拟网卡设置,有时需要关闭Windows防火墙(用于实验环境)或杀毒软件的实时防护,因为它们可能阻挡了eNSP虚拟设备的通信。

7. 安全策略进阶思考与扩展

完成基础实验后,我们可以思考一些更贴近生产的配置,这能极大提升你的实战能力。

7.1 使用地址组与服务组提升可管理性

当内网网段或服务器很多时,一条条写IP地址和端口效率低下。我们可以使用地址组(address-set)和服务组(service-set)。

# 定义内网地址组 ip address-set trust_lan type object address 192.168.1.0 mask 255.255.255.0 address 192.168.2.0 mask 255.255.255.0 quit # 定义DMZ服务器地址组 ip address-set dmz_servers type object address 172.16.1.10 mask 32 address 172.16.1.11 mask 32 quit # 定义对外服务端口组 ip service-set external_services type object service protocol tcp destination-port 80 service protocol tcp destination-port 443 service protocol udp destination-port 53 quit # 在安全策略中引用 security-policy rule name Trust_to_Untrust_Advanced source-zone trust destination-zone untrust source-address address-set trust_lan # 引用地址组 service service-set external_services # 引用服务组 action permit

7.2 配置黑洞路由与防环路

在配置了DNAT后,一个潜在的隐患是“路由环路”。如果内部用户(Trust)通过公网地址(100.1.1.1)访问DMZ服务器,流量可能会从防火墙出去绕一圈再回来,形成环路。为了避免这种情况,我们需要在防火墙上配置一条到公网地址100.1.1.1黑洞路由,并使其优先级高于默认路由。

# 添加一条指向null0接口的黑洞路由 ip route-static 100.1.1.1 255.255.255.255 NULL0

这样,当内网用户访问100.1.1.1时,防火墙查询路由表,发现去往100.1.1.1的最佳路径是黑洞路由,就会将数据包丢弃在本地。而外网用户访问100.1.1.1的流量,由于目的IP是防火墙自身(local),不查路由表,直接上送控制平面处理DNAT,因此不受影响。这个技巧在生产环境中非常实用。

7.3 策略优化与安全加固建议

  1. 细化策略:不要滥用any。我们的示例中策略已经比较细化。在生产中,应尽可能缩小源/目的地址和服务的范围。
  2. 启用日志:对于关键的安全策略(特别是permit规则),建议启用logging功能,便于事后审计和故障排查。
  3. 定期审计:使用display security-policy rule all verbose查看规则的命中计数。长期命中为0的规则可能是僵尸规则,应考虑清理。
  4. 理解会话表老化时间:TCP会话和UDP/ICMP会话的老化时间不同。了解这些有助于理解为什么一些“僵尸”连接还会存在一段时间。

防火墙的配置是一个从“连通”到“安全”,再到“优化”的递进过程。这个eNSP实验为你搭建了一个理解安全区域、策略和NAT的完美沙箱。真正的熟练来自于反复的练习和排错。下次当你再看到“trust”、“dmz”、“untrust”这些字眼时,希望你的脑海里浮现的不再是枯燥的定义,而是一张清晰的流量路径图,以及配置它们时那些需要格外小心的关键点。

← 返回列表