1. 环境准备:搭建你的第一个防火墙实验拓扑
很多朋友一听到“防火墙配置”就觉得头大,尤其是看到命令行那一串串代码,直接就劝退了。别慌,我刚开始学的时候也这样,感觉像在看天书。但后来我发现,只要你把实验环境搭起来,跟着命令一步步敲,其实没那么难。今天我就带你用华为的eNSP模拟器,从零开始,手把手配一遍防火墙的安全策略,目标很明确:让内网、外网、DMZ区三个区域的设备能按照我们的规则互相访问。
首先,你得把eNSP装好,这个网上教程很多,我就不赘述了。咱们的重点是理解拓扑和规划。为了模拟真实场景,我设计了一个非常经典的三区域拓扑,这也是企业里最常见的架构:
- Trust区域:这是我们的“内网”,是最受信任的区域。通常里面放的是员工的办公电脑、内部服务器。在这个实验里,我们用一台交换机(LSW1)连接两台PC来模拟。
- Untrust区域:这是“外网”,也就是互联网,是最不受信任的区域。我们用一台路由器(AR1)来模拟公网上的某个节点。
- DMZ区域:中文叫“非军事区”,这个名字很形象。它介于完全信任的内网和完全不信任的外网之间。通常我们把需要对外提供服务的设备放这里,比如公司的官网服务器、邮件服务器。这样外网用户能访问到这些服务,但即便DMZ区的服务器被攻破,攻击者也无法直接进入内网,相当于多了一道缓冲。这里我们用一台服务器(Server)来模拟。
而处于核心位置的,就是我们的防火墙(FW1)。它有三个接口,分别连接这三个区域。所有的流量要想跨区域流动,都必须经过防火墙的审查,而审查的依据,就是我们接下来要配置的安全策略。你可以把防火墙想象成一个有多个出入口的超级保安亭,每个区域是一个独立的小区。保安(防火墙)手里有一本规则手册(安全策略),上面写着“A小区的人可以凭工作证去B小区”、“C小区的访客只能去D小区的大厅”等等。我们接下来要做的,就是编写这本规则手册。
在动手敲命令之前,有个非常重要的概念必须理解:防火墙默认拒绝一切。这是所有安全设备的黄金法则。也就是说,在你没有明确允许之前,所有区域之间的所有流量都会被防火墙无情地丢弃。这保证了网络的基础安全性。我们的配置,其实就是在这个“全拒绝”的底子上,开几个我们需要的“小门”。下面这张表帮你理清我们实验的接口和IP规划,配置时对照着看,不容易乱:
| 设备 | 接口 | 所属区域 | IP地址/ VLAN | 说明 |
|---|---|---|---|---|
| FW1 (防火墙) | GigabitEthernet 1/0/0 | Untrust | 10.1.1.1/24 | 连接外网路由器 |
| GigabitEthernet 1/0/1 | DMZ | 10.2.2.2/24 | 连接DMZ服务器 | |
| VLANIF 10 | Trust | 192.168.10.254/24 | 连接内网交换机(通过GE1/0/2接入) | |
| AR1 (外网路由器) | GigabitEthernet 0/0/0 | Untrust | 10.1.1.2/24 | 连接防火墙 |
| Loopback 0 | - | 1.1.1.1/32 | 模拟一个远端的公网地址 | |
| LSW1 (内网交换机) | VLAN 10 | Trust | - | 创建VLAN 10,连接PC和防火墙 |
| PC1/PC2 (内网主机) | Ethernet 0/0/1 | Trust | 192.168.10.1/24 (示例) | 网关需指向 192.168.10.254 |
| Server (DMZ服务器) | Ethernet 0/0/1 | DMZ | 10.2.2.1/24 (示例) | 网关需指向 10.2.2.2 |
规划好了,心里就有底了。接下来,我们打开eNSP,把设备拖出来,按照拓扑连好线,然后就可以开始激动人心的命令行配置之旅了。记住,配置网络就像搭积木,一步一个脚印,错了也没关系,咱们可以重来,eNSP就是用来“折腾”的。
2. 基础配置:给设备配上“身份证”(IP地址)
拓扑连好了,但设备之间现在还“谁也不认识谁”,因为它们还没有IP地址。这就好比盖好了房子,但没装门牌号,邮差都不知道信往哪送。所以,我们的第一步就是给每个接口配置IP地址,这是所有网络通信的基础。
咱们按照从内到外的顺序来配。首先配置最内层的Trust区域。这里涉及一点二层交换的知识。防火墙的GigabitEthernet 1/0/2接口需要连接内网的多台PC,所以我们通常不会直接给它配IP,而是先创建一个VLAN(比如VLAN 10),把这个物理接口划进VLAN,然后给这个VLAN的虚拟接口(VLANIF)配IP。这个VLANIF接口的IP,就是内网所有PC的默认网关。
# 在防火墙FW1上配置
<FW1> system-view # 进入系统视图
[FW1] sysname FW1 # 给设备改个名,方便识别
[FW1] vlan batch 10 # 创建VLAN 10
[FW1] interface vlanif 10 # 进入VLAN 10的虚拟接口
[FW1-Vlanif10] ip address 192.168.10.254 24 # 配置IP和子网掩码
[FW1-Vlanif10] undo shutdown # 开启接口
[FW1-Vlanif10] quit
# 将连接内网的物理接口划入VLAN 10
[FW1] interface gigabitethernet 1/0/2
[FW1-GigabitEthernet1/0/2] portswitch # 将此接口从三层模式切换为二层模式
[FW1-GigabitEthernet1/0/2] port link-type access # 设置接口为接入模式
[FW1-GigabitEthernet1/0/2] port default vlan 10 # 将接口划入VLAN 10
[FW1-GigabitEthernet1/0/2] undo shutdown # 开启接口
[FW1-GigabitEthernet1/0/2] quit
内网交换机LSW1的配置相对简单,主要就是创建VLAN,并把连接PC和防火墙的接口都划进去。这里注意,连接防火墙的接口(假设是Ethernet 0/0/3)也要配置成access模式并划入VLAN 10。PC的IP地址就配成192.168.10.0/24网段内的任意地址,网关指向192.168.10.254。
接下来配置DMZ区域和Untrust区域,这两个就简单了,因为防火墙是直接和服务器、路由器点对点连接,直接在物理接口上配IP就行。
# 在FW1上继续配置DMZ接口(连接服务器)
[FW1] interface gigabitethernet 1/0/1
[FW1-GigabitEthernet1/0/1] ip address 10.2.2.2 24
[FW1-GigabitEthernet1/0/1] undo shutdown
[FW1-GigabitEthernet1/0/1] quit
# 配置Untrust接口(连接外网路由器)
[FW1] interface gigabitethernet 1/0/0
[FW1-GigabitEthernet1/0/0] ip address 10.1.1.1 24
[FW1-GigabitEthernet1/0/0] undo shutdown
[FW1-GigabitEthernet1/0/0] quit
最后,配置模拟外网的路由器AR1。给它连接防火墙的接口配上同一网段的IP(10.1.1.2/24),还可以配一个环回口(Loopback)地址,比如1.1.1.1/32,用来模拟一个更远的公网地址,测试起来更真实。
# 在路由器AR1上配置
<AR1> system-view
[AR1] sysname AR1
[AR1] interface gigabitethernet 0/0/0
[AR1-GigabitEthernet0/0/0] ip address 10.1.1.2 24
[AR1-GigabitEthernet0/0/0] undo shutdown
[AR1-GigabitEthernet0/0/0] quit
[AR1] interface loopback 0
[AR1-LoopBack0] ip address 1.1.1.1 32
[AR1-LoopBack0] quit
好了,现在所有设备都有了“门牌号”。你可以用display ip interface brief命令在防火墙和路由器上查看接口IP状态,确认都是UP的。这时候,如果同一个网段内的设备(比如防火墙的GE1/0/0和路由器的GE0/0/0),理论上是可以互相ping通的,因为它们在同一广播域。但是,跨网段的ping,比如内网PC ping外网路由器,现在肯定是失败的。因为防火墙的“保安”还没拿到规则手册,它默认会把所有跨区域的包都扔掉。别急,我们马上就来制定规则。
3. 核心概念:理解安全区域与策略模型
IP配通了,只是解决了寻址问题。想让流量按照我们的意愿穿过防火墙,我们必须深入理解两个核心概念:安全区域(Security Zone)和安全策略(Security Policy)。这是华为防火墙策略控制的基石,吃透了它们,你就能举一反三,配置任何复杂的策略都不会迷糊。
首先说安全区域。你可以把它理解为防火墙对连接设备的一种“信任度分组”。防火墙不是一个简单的转发设备,它需要对流量进行区分管理。所以,我们把它的物理接口、逻辑接口(比如VLANIF)划分到不同的安全区域里。常用的区域有:
- Trust:高信任度区域,通常放置内部网络设备。
- Untrust:低信任度区域,通常指互联网等外部网络。
- DMZ:中等信任度区域,放置对外提供服务的服务器。
- Local:这是非常关键的一个区域! 它代表防火墙本身。所有以防火墙作为源或目的地址的流量(比如你从PC去ping防火墙的接口IP,或者防火墙主动发起的流量),都被认为是去往或来自Local区域。
划重点:一个接口只能属于一个安全区域,但一个安全区域可以包含多个接口。 在我们这个实验里,我们就要把VLANIF 10划入Trust区域,把GE1/0/1划入DMZ区域,把GE1/0/0划入Untrust区域。那Local区域呢?它默认就存在,并且防火墙的所有接口在配置IP后,其“本地路由”就天然和Local区域关联了。
接下来是重头戏:安全策略。这是防火墙的“规则手册”。策略的基本组成很简单:谁(源),到哪里去(目的),干什么(服务),是允许还是拒绝。在华为防火墙上,这对应着几个关键元素:
- 源安全区域(Source Zone):流量从哪个区域来。
- 目的安全区域(Destination Zone):流量要到哪个区域去。
- 源地址/目的地址:可以是IP、网段或地址对象。
- 服务(Service):流量属于哪种协议,比如PING(ICMP)、HTTP(TCP 80)、HTTPS(TCP 443)等。
- 动作(Action):permit(允许) 或 deny(拒绝)。
防火墙在收到一个数据包时,会按照以下流程进行匹配检查,我画个简单的步骤图帮你理解:
收到数据包 -> 判断入口接口属于哪个源安全区域 -> 判断出口接口属于哪个目的安全区域 -> 依次匹配安全策略规则 -> 如果匹配到某条规则,则执行其动作(允许/拒绝)-> 如果所有策略都不匹配,则执行默认动作(拒绝一切)
这个流程意味着,策略是基于“区域”的,而不是基于“接口”的。我们配置策略时,思考的是“允许从Trust区域到Untrust区域的流量”,而不是“允许从GE1/0/2到GE1/0/0的流量”。这种抽象让策略更清晰,更容易管理。
还有一个新手极易踩坑的点:访问防火墙本身的流量。当你从PC1(Trust区域)去ping防火墙的接口IP(192.168.10.254)时,流量的目的是防火墙本身,所以它的目的区域是Local!因此,你需要配置一条从“源区域”到“Local”区域的策略,才能允许内网设备管理防火墙。很多同学配完了区域间策略,发现还是ping不通防火墙,问题八成就出在这里,忘了给Local区域放行。理解了这些,我们就可以动手创建区域和策略了。
4. 实战配置:划分区域与编写第一条策略
理论铺垫得差不多了,咱们撸起袖子开干!第一步,就是把防火墙的三个接口,分别“扔进”对应的安全区域。这个操作就像给公司的不同部门挂牌子。
# 在FW1上配置
[FW1] firewall zone trust # 进入trust区域视图(如果不存在会自动创建)
[FW1-zone-trust] add interface vlanif 10 # 将Trust区域的网关接口加入
[FW1-zone-trust] quit
[FW1] firewall zone untrust
[FW1-zone-untrust] add interface gigabitethernet 1/0/0 # 将连接外网的接口加入
[FW1-zone-untrust] quit
[FW1] firewall zone dmz
[FW1-zone-dmz] add interface gigabitethernet 1/0/1 # 将连接DMZ服务器的接口加入
[FW1-zone-dmz] quit
配置完后,可以用 display zone 命令查看,确认三个接口都已经在正确的区域下了。现在,防火墙已经能识别出流量是从哪个“部门”(区域)来的,要到哪个“部门”去了。
接下来,我们来解决那个最经典的“坑”:如何让内网PC能ping通防火墙本身? 正如前面所说,这需要一条访问Local区域的策略。同时,我们也需要让外网路由器和DMZ服务器能ping通防火墙,用于基础连通性测试。所以,我们可以创建一条通用的策略,允许所有区域访问防火墙的Local区域。
[FW1] security-policy # 进入安全策略视图
[FW1-policy-security] rule name permit_to_local # 创建一条规则,命名为“permit_to_local”
[FW1-policy-security-rule-permit_to_local] source-zone trust dmz untrust # 源区域是trust, dmz, untrust。注意,这里可以同时指定多个源区域。
[FW1-policy-security-rule-permit_to_local] destination-zone local # 目的区域是local(防火墙本身)
[FW1-policy-security-rule-permit_to_local] action permit # 动作为允许
[FW1-policy-security-rule-permit_to_local] quit
[FW1-policy-security] quit
这条策略的意思是:允许来自Trust、DMZ、Untrust三个区域的任何流量,去往防火墙本身(Local)。注意,这里我们没有指定具体的源地址、目的地址和服务,这意味着匹配所有。在管理策略时,这是一种常见的做法,但前提是你必须清楚这样做的范围。在生产环境,我们通常会限制得更严格,比如只允许某个管理网段访问防火墙的特定服务(如SSH)。
策略配好了,但先别急着重启设备或者干等。这里还有一个至关重要的步骤,是很多教程里没强调,但实际必做的:在接口上启用PING等管理服务。华为防火墙出于极致的安全考虑,即使安全策略允许了流量,如果接口本身没有“开门”,流量依然进不来。这就像你家小区保安同意了访客进入,但你家单元的电子门禁没开,访客还是到不了你家门口。
# 在FW1的各个三层接口上启用PING服务
[FW1] interface gigabitethernet 1/0/0
[FW1-GigabitEthernet1/0/0] service-manager ping permit # 允许该接口接受PING探测
[FW1-GigabitEthernet1/0/0] quit
[FW1] interface gigabitethernet 1/0/1
[FW1-GigabitEthernet1/0/1] service-manager ping permit
[FW1-GigabitEthernet1/0/1] quit
[FW1] interface vlanif 10
[FW1-Vlanif10] service-manager ping permit
[FW1-Vlanif10] quit
现在,激动人心的时刻到了!你可以从内网PC1(比如IP是192.168.10.1)去ping防火墙的Trust接口IP(192.168.10.254)。同时,也可以从外网路由器AR1(10.1.1.2)ping防火墙的Untrust接口(10.1.1.1),从DMZ服务器(10.2.2.1)ping防火墙的DMZ接口(10.2.2.2)。如果配置全部正确,这三个ping测试应该全部成功!
如果失败了,别灰心,这是学习过程的一部分。我建议你按这个顺序排查:1. 检查接口物理状态和IP地址(display ip int brief)。2. 检查接口是否加入了正确的安全区域(display zone)。3. 检查安全策略是否配置正确(display security-policy rule all)。4. 确认是否在接口上执行了service-manager ping permit。一步步来,你一定能找到问题所在。当看到ping通的那一刻,你会对防火墙的区域和策略模型有豁然开朗的感觉。
5. 策略进阶:实现三区域间受控互访
基础连通性搞定后,我们来到本次实战最核心的部分:配置区域间的访问策略。这才是防火墙发挥其安全管控威力的地方。我们的目标是实现一个符合典型企业需求的访问模型:
- 内网(Trust)可以访问外网(Untrust)和DMZ。这是最常见的需求,员工需要上网,也需要访问公司内部的对外服务器(如OA系统)。
- 外网(Untrust)只能访问DMZ的特定服务(如HTTP/HTTPS),绝对不能访问内网(Trust)。这是安全底线,防止来自互联网的直接攻击。
- DMZ区服务器可以访问外网(Untrust)。例如,服务器可能需要从互联网更新软件补丁或病毒库。
- DMZ区服务器默认不能访问内网(Trust)。这是DMZ设计的初衷,即使DMZ被攻破,内网依然安全。如果需要访问(例如DMZ的应用程序服务器需要连接内网的数据库),则需要配置非常精确的策略。
基于这个模型,我们来一条条地创建策略。在配置前,请务必记住:安全策略是按顺序匹配的,从上到下执行,一旦匹配就立即生效,不再检查后面的规则。 所以规则的顺序非常重要,通常把精确的、特殊的规则放在前面,把宽泛的规则放在后面。
第一条策略:允许内网访问外网和DMZ。 我们可以将这两个需求合并到一条宽泛的策略中,因为内网通常是我们最信任的。
[FW1] security-policy
[FW1-policy-security] rule name trust_to_untrust_dmz
[FW1-policy-security-rule-trust_to_untrust_dmz] source-zone trust
[FW1-policy-security-rule-trust_to_untrust_dmz] destination-zone untrust dmz # 目的区域可以是多个
[FW1-policy-security-rule-trust_to_untrust_dmz] action permit
[FW1-policy-security-rule-trust_to_untrust_dmz] quit
第二条策略:允许外网访问DMZ的Web服务。 这是精细化控制的体现。我们不仅限制源和目的区域,还限制了访问的服务(这里以HTTP和HTTPS为例)和目的地址(假设DMZ服务器IP是10.2.2.1)。
[FW1-policy-security] rule name untrust_to_dmz_web
[FW1-policy-security-rule-untrust_to_dmz_web] source-zone untrust
[FW1-policy-security-rule-untrust_to_dmz_web] destination-zone dmz
[FW1-policy-security-rule-untrust_to_dmz_web] destination-address 10.2.2.1 32 # 精确到DMZ服务器的IP
[FW1-policy-security-rule-untrust_to_dmz_web] service http https # 只允许HTTP和HTTPS服务
[FW1-policy-security-rule-untrust_to_dmz_web] action permit
[FW1-policy-security-rule-untrust_to_dmz_web] quit
第三条策略:允许DMZ访问外网。 通常DMZ服务器需要访问互联网获取更新。
[FW1-policy-security] rule name dmz_to_untrust
[FW1-policy-security-rule-dmz_to_untrust] source-zone dmz
[FW1-policy-security-rule-dmz_to_untrust] destination-zone untrust
[FW1-policy-security-rule-dmz_to_untrust] action permit
[FW1-policy-security-rule-dmz_to_untrust] quit
[FW1-policy-security] quit
配置完成后,我们还需要做一件事:在防火墙上配置到外网和到内网的回程路由。防火墙现在知道了怎么把包送出去,但对方回来的包,防火墙要知道该从哪个接口扔出去。对于到外网(Untrust)的流量,我们通常配置一条默认路由。
[FW1] ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 # 将所有去往未知网络的流量,下一跳指向外网路由器(10.1.1.2)
对于内网(Trust)和DMZ,因为它们是直接相连的网络,防火墙的路由表里已经有直连路由了,所以不需要额外配置。现在,让我们来验证一下策略效果:
- 测试1(内网->外网):在PC1上,尝试ping外网路由器的接口地址(10.1.1.2)甚至环回口地址(1.1.1.1)。应该能ping通。这验证了第一条策略。
- 测试2(内网->DMZ):在PC1上,ping DMZ服务器(10.2.2.1)。应该能ping通。这也验证了第一条策略。
- 测试3(外网->DMZ Web):在外网路由器AR1上,尝试ping DMZ服务器(10.2.2.1)。应该ping不通! 因为我们的第二条策略只允许HTTP/HTTPS,没有允许ICMP(ping)。这正是我们想要的效果——精确控制。你可以在eNSP的DMZ服务器上开启一个简单的HTTP服务,然后在AR1上尝试用浏览器或curl访问
http://10.2.2.1,理论上应该能通(需要服务器侧配置好)。 - 测试4(外网->内网):在外网路由器AR1上,尝试ping内网PC1(192.168.10.1)。绝对应该ping不通! 因为我们没有任何一条策略允许从Untrust到Trust。这是安全的关键。
- 测试5(DMZ->外网):在DMZ服务器上,尝试ping外网路由器(10.1.1.2)。应该能ping通。这验证了第三条策略。
通过这一系列的配置和测试,你就能清晰地看到防火墙是如何像一个严格的交通警察,根据我们制定的规则(安全策略),精确地放行或拦截不同区域间的流量。这种“默认拒绝,按需放行”的思路,是构建安全网络的核心理念。
6. 排错与调试:当ping不通时该怎么办?
配置完了,测试没通过,这是学习过程中最有价值的部分。别担心,我踩过的坑比这多多了。防火墙排错是有章可循的,跟着我下面这个排查流程走,大部分问题都能迎刃而解。我们就以“内网PC ping不通外网路由器”这个典型故障为例。
第一步:检查基础连通性(物理层与IP层)
这是所有网络故障排查的起点。在防火墙上执行 display ip interface brief,确认所有相关接口(Vlanif10, GE1/0/0, GE1/0/1)的物理状态(Physical)和协议状态(Protocol)都是UP。如果状态是DOWN,检查线缆连接(在eNSP里就是检查连线)和接口的undo shutdown配置。然后,用 display ip routing-table 查看路由表,确认你有到达目的网段的路由。比如,PC要访问1.1.1.1,防火墙上必须有去往1.1.1.1的路由,通常就是那条默认路由(0.0.0.0/0)。
第二步:使用防火墙的“包追踪”神器——ping和tracert命令
很多人只在PC上ping,其实在防火墙上直接ping更能定位问题。在防火墙命令行下,指定源接口去ping目标。
[FW1] ping -a 192.168.10.254 10.1.1.2 # 从Trust接口IP(源)去ping外网路由器(目的)
[FW1] ping -a 10.1.1.1 1.1.1.1 # 从Untrust接口IP去ping外网环回口
如果防火墙自己都ping不通,那问题肯定不在策略,而是路由或底层连通性。如果防火墙能ping通,但PC ping不通,那问题很可能出在策略或NAT(本次实验未涉及NAT)上。
第三步:深入策略与会话排查 如果基础连通性没问题,那就要请出防火墙最强大的调试工具了。首先,查看策略匹配情况。华为防火墙有一个非常棒的功能:策略命中计数。
[FW1] display security-policy rule all
查看你配置的策略(如trust_to_untrust_dmz)的“Matched”计数是否在增加。如果计数为0,说明流量根本没有匹配到这条允许策略。那它去哪了?有两种可能:1. 匹配到了前面某条拒绝策略;2. 匹配了所有策略后,被默认的“拒绝所有”拦下了。
这时,你需要更精细的工具:会话表。会话表是防火墙记录每一个成功建立的连接状态的地方。在PC上尝试ping的同时,在防火墙上查看会话。
[FW1] display firewall session table verbose
你可以看到类似 ICMP VPN:public --> public 192.168.10.1:2048->1.1.1.1:2048 的条目。如果能看到从内网IP到外网IP的ICMP会话,并且状态是allow,说明策略其实是允许的,包已经过去了。如果完全看不到相关会话,那说明包在策略检查阶段就被丢弃了。
第四步:终极武器——策略模拟与日志 对于复杂策略,可以使用策略模拟工具预判结果。
[FW1] display security-policy ip source-zone trust destination-zone untrust source-ip 192.168.10.1 destination-ip 1.1.1.1 protocol icmp
这个命令会模拟一次流量,并告诉你它会匹配哪条策略,执行什么动作。
最后,别忘了开启策略日志。在关键策略(尤其是拒绝策略)后面加上logging参数,当有流量匹配时,防火墙会生成日志,告诉你谁在什么时候试图访问谁被拒绝了。这是事后审计和实时告警的利器。
[FW1-policy-security] rule name deny_untrust_to_trust # 可以显式添加一条拒绝所有Untrust到Trust的规则用于记录
[FW1-policy-security-rule-deny_untrust_to_trust] source-zone untrust
[FW1-policy-security-rule-deny_untrust_to_trust] destination-zone trust
[FW1-policy-security-rule-deny_untrust_to_trust] action deny
[FW1-policy-security-rule-deny_untrust_to_trust] logging # 启用日志记录
[FW1-policy-security-rule-deny_untrust_to_trust] quit
排错的过程,其实就是你与防火墙对话,一步步理解其工作原理的过程。每次解决一个故障,你对防火墙策略流转的理解就会加深一层。记住这个顺序:物理/IP -> 路由 -> 策略匹配 -> 会话状态。按照这个思路,大部分防火墙连通性问题都逃不出你的手掌心。
5861



被折叠的 条评论
为什么被折叠?



