网络安全 | 瑞哥带你全方位解读防火墙技术!

2020-09-30 10:17:39 浏览数 (1)

今天这篇文章是在高铁上写完的,蛮有意思的:

防火墙概述

1.防火墙概述

简单地说,防火墙的主要作用是划分网络安全边界,实现关键系统与外部环境的安全隔离,保护内部网络免受外部攻击。与路由器相比防火墙提供了更丰富的安全防御策略,提高了安全策略下数据报转发速率。由于防火墙用于安全边界,因此往往兼备NAT、VPN等功能,并且在这方面的相比路由器更加强劲。

2.防火墙分类

  • 包过滤防火墙(Packet Filtering):包过滤利用定义的特定规则过滤数据包,防火墙直接获得数据包的IP源地址、目的地址、TCP/ UDP的源端口、和TCP/UDP的目的端口。包过滤防火墙简单,但是缺乏灵活性,对一些动态协商端口没有办法设置规则。另外包过滤防火墙每个包都需要进行策略检查,策略过多会导致性能急剧下降。
  • 代理型防火墙(Application Gateway):代理型防火墙使得防火墙做为一个访问的中间节点,对客户端来说防火墙是一个服务器,对服务器来说防火墙是一个客户端。代理型防火墙安全性较高,但是开发代价很大。对每一种应用开发一个对应的代理服务是很难做到的,因此代理型防火墙不能支持很丰富的业务,只能针对某些应用提供代理支持。
  • 状态检测防火墙:状态检测是一种高级通信过滤,它检查应用层协议信息并且监控基于连接的应用层协议状态。对于所有连接,每一个连接状态信息都将被维护并用于动态地决定数据包是否被允许通过防火墙或丢弃。现在防火墙的主流产品都为状态检测防火墙。

防火墙的基础知识

1.安全区域的概念

安全区域(Security Zone),简称为区域(Zone),是一个安全概念,许多安全策略都基于安全区域实施。我们在防火墙上创建安全区域,并且定义该安全区域的安全级别(也被称为优先级,通过1~100的数字表示,数字越大表示安全级别越高),然后将防火墙的接口关联到一个安全区域,那么该接口所连接的网络就属于这个安全区域。属于同一个安全区域的用户具有相同的安全属性。

在上图中,我们将防火墙的GE1/0/1接口添加到Trust区域中,那么这个接口所连接的网络就被视为处于Trust区域。同理Internet被视为处于Untrust区域,而服务器Servers则处于DMZ区域。当图中的PC访问Internet时,从PC发往Internet的流量到达防火墙后,防火墙认为这些流量是从Trust区域去往Untrust区域的流量。

华为Eudemon防火墙缺省已经创建如下安全区域:
  • Trust 优先级为85,较高级别的安全区域,通常用于定义内网用户所在网络
  • Untrust 优先级为5,低级的安全区域,通常用于定义Internet等不安全的、外部的网络
  • DMZ 优先级为50,中度级别的安全区域,通常用于定义内网服务器所在区域。因为这些服务器虽然部署在内网,但是经常需要被外网访问,存在一定的安全隐患,同时一般又不允许其主动访问外网,所以将其部署一个安全级别比Trust低,但比Untrust高的安全区域中。
  • Local 优先级为100,最高级别的安全区域,Local区域定义的是设备本身,包括设备的各接口。凡是由防火墙自身构造并主动发出的报文均可认为是从Local区域中发出,凡是目的地为防火墙的报文均可认为是由Local区域接收。用户不能改变Local区域本身的任何配置,包括向其中添加接口。

需要注意的是,缺省已经创建的这些安全区域是不能被删除的。用户可以自行设置新的安全区域并定义其安全优先级。

在以上安全区域中,很多人不太理解Local区域。下面来重点讲讲。

在上图中,防火墙的GE0/0/1接口被添加到Trust安全区域,GE0/0/3接口被添加到Untust区域。PC1发往192.168.1.254的流量,被认为是从Trust区域到Local区域的流量(该流量的目的地就防火墙自身);PC1访问PC2的流量,被认为是从Trust区域到Untrust区域的流量; 从防火墙直接访问(例如ping)PC1的流量,则被认为是从Local区域到Trust区域的流量。

安全区域的规划:
  • 用户可自定义安全区域,也可使用系统自带的安全区域,防火墙的一个接口只能属于一个特定区域,而一个区域可以包含多个接口,接口只有划分到区域中才能正常处理报文。
  • 内部网络应安排在安全级别较高的区域。外部网络应安排在安全级别最低的区域。
  • 一些可对外部用户提供有条件服务的网络应安排在安全级别中等的DMZ区域。
安全区域的限制或注意事项:
  • 在一台防火墙上不允许创建两个相同安全级别(Priority)的安全区域;
  • 防火墙的接口必须加入一个安全区域,否则不能正常转发流量。
  • 防火墙的一个接口只能属于一个安全区域;
  • 防火墙的一个安全区域可以拥有多个接口;
  • 系统自带的缺省安全区域不能删除,用户可以根据实际需求创建自定义的安全区域;
  • 对于E1000E-N防火墙V1R1C30的系统软件版本而言,根系统最多支持100个安全区域(包括4个保留区域),每个虚拟系统最多支持8个安全区域(包括4个保留区域)。

2.区域间的概念

安全域间(Interzone)这个概念用来描述流量的传输通道,它是两个“区域”之间的唯一“道路”。如果希望对经过这条通道的流量进行检测等,就必须在通道上设立“关卡”,如ASPF等功能。任意两个安全区域都构成一个安全域间,并具有单独的安全域间视图。

3.Inbound及Outbound

安全域间的数据流动具有方向性,包括入方向(Inbound)和出方向(Outbound):

  • 入方向(inbound):数据由低级别安全区域向高级别安全区域传输的方向;
  • 出方向(outbound):数据由高级别安全区域向低级别安全区域传输的方向。

4.安全策略

安全策略概述

安全策略(Security Policy)是控制设备对流量的转发,以及对流量进行内容安全一体化检测的策略。

  • 设备能够识别出流量的属性,并将流量的属性与安全策略的条件进行匹配。如果所有条件都匹配,则此流量成功匹配安全策略,设备将会执行安全策略的动作(例如允许流量通行,或拒绝)。
  • 内容安全一体化检测是指使用设备的智能感知引擎对一条流量的内容只进行一次检测和处理,就能实现包括反病毒、入侵防御和URL过滤在内的内容安全功能。
  • 缺省情况下, NGFW的local区域到其他安全区域,以及域内的安全策略(如trust到trust)都是禁止的。

在日常中,安全策略最主要的应用之一,就是允许或拒绝流经防火墙的数据。安全策略在防火墙的security-policy配置视图下完成,用户可以在该视图下根据需要创建安全规则(Rule)。

如上图所示,security-policy中可以包含多条规则,当安全策略中配置了多条规则时,设备将按照规则在界面上的排列顺序从上到下依次匹配,只要匹配了一条规则中的所有条件,则按照该规则中定义的动作、选项进行处理,不再继续匹配剩下的规则。所以在配置时,建议将条件更精确的规则配置在前面,条件更宽泛的规则配置在后面。

关于安全策略中的规则
  • 在一条规则的条件语句中,相同类型的条件内可以配置多个值,多个值之间是“或”的关系,报文的属性只要匹配任意一个值,就认为报文的属性匹配了这个条件。例如一条规则中指定了源IP地址条件,那么用户可以指定多个源地址,报文只需要匹配其中一个地址,即被认为匹配该条件类型。
  • 每条规则中可以包含多个匹配条件,如源、目的安全区域,源、目的地址,用户或应用类型等。各个匹配条件之间是“与”的关系,报文的属性与各个条件必须全部匹配,才认为该报文匹配这条规则。例如在某条规则中,定义了源地址与目的地址条件,那么报文必须同时匹配该源、目的地址才被视为匹配该条件。缺省情况下所有的条件均为any(也即该规则中没有定义任何条件时),即所有流量(包括域内流量)均可以命中该规则
  • 如果配置了多条安全规则,则设备会从上到下依次进行匹配。如果流量匹配了某个安全规则,将不再进行下一个规则的匹配。所以需要先配置条件精确的策略,再配置宽泛的策略。
  • 设备默认存在一条缺省安全规则,如果不同安全区域间的流量没有匹配到管理员定义的安全规则,那么就会命中缺省安全规则(条件均为any,动作默认为禁止)。
  • 不同安全区域间传输的流量(包括但不限于从FW发出的流量、FW接收的流量、不同安全区域间传输的流量),受缺省安全策略控制,缺省转发动作为禁止。
  • 同一安全区域内传输的流量不受缺省安全策略控制,缺省转发动作为允许。如需对域内流量进行转发控制,请配置具体的安全策略。

5.会话表

NGFW采用了基于“状态”的报文控制机制:只对首包或者少量报文进行检测就确定一条连接的状态,大量报文直接根据所属连接的状态进行控制。这种状态检测机制迅速提高了防火墙的检测和转发效率。

而会话表正是为了记录连接的状态而存在的。设备在转发TCP、UDP和ICMP报文时都需要查询会话表,来判断该报文所属的连接以及相应的处理措施。

查看会话表

一个会话的报文能够正常被防火墙转发,通常需要具备以下几个条件:

  1. 防火墙的路由表中存在与该报文目的IP地址相匹配的路由,或者默认路由;
  2. 防火墙的安全策略允许该会话的报文通过。

当一个会话的报文被防火墙正常转发时,我们应该能够在防火墙上看到相应的会话表项(SessionEntry)。

防火墙维护着一个非常关键的表项:会话表,每一个被防火墙允许的会话都能在其中找到相应的表项,在表项中,我们能看到会话的源IP地址、目的IP地址、源端口号、目的端口号以及协议类型等信息,此外,还有该会话的入站区域、出站区域、去向报文个数以及回程报文个数等。

当网络出现故障时,可以通过查看防火墙的会话表进行基本的故障定位。例如上图所示,如果网络配置完成后,发现Server1无法ping通外部网络(External Network)中的10.8.8.8地址,而又无法直观地判断出问题出现在内部或者外部的情况下,可以在防火墙上查看会话:

代码语言:javascript复制
HRP_A<FW1> display firewall session table
Current Total Sessions : 1
icmp VPN:public --> public 192.168.10.5:44011-->10.8.8.8:2048

使用display firewall session table命令可以查看防火墙的会话表。从上述输出可以看到从192.168.10.5访问10.8.8.8的会话,该会话的协议类型为ICMP。使用display firewall session table verbose命令可以查看会话的详细内容

代码语言:javascript复制
HRP_A<FW1> display firewall session table verbose
Current Total Sessions : 1
icmp VPN:public --> public ID: a68f44f4e1ed814380e575bcde2
Zone: trust--> untrust TTL: 00:00:20 Left: 00:00:17
Output-interface: GigabitEthernet1/0/7 NextHop: 10.1.1.2 MAC: 00-25-9e-05-41-f9
<--packets:0 bytes:0 -->packets:5 bytes:420
192.168.10.5:44011-->10.8.8.8:2048 PolicyName: test1

上面显示的是192.168.10.5 ping 19.8.8.8的会话详细。从中我们能发现这个会话是从Trust区域到Untrust区域,出站接口为GE1/0/7,下一跳地址为10.1.1.2,另外该会话命中的是安全规则test1。关注红色字体部分,这部分显示的是这个会话的去向及回程的报文个数,从中我们能看到192.168.10.5发送了5个数据包出去,但是收到了0个数据包,因此从这个信息可以简单的判断出,192.168.10.5 ping10.8.8.8的过程中,ICMP Request报文已经送达了防火墙,并且被它转发出去,同时防火墙没有收到回程的报文,因此问题可能并不出在内部。

在实际的项目中,防火墙的会话表项可能是非常多的,直接查看整个会话表,恐怕无法准确定位感兴趣的会话。可以在display firewall session table verbose命令后面增加一些关键字,达到筛选的目的。例如display firewall session table verbose source inside 192.168.10.5命令查看的是源IP地址(inside关键字表示如果存在NAT,则为NAT之前的IP地址)为192.168.10.5的会话。再如display firewall session table verbose service http命令查看的是协议类型为HTTP(目的TCP端口号为80)的会话。

如果在测试的过程中,发现在防火墙上找不到相应的会话表项,那么说明该会话的流量可能没有到达防火墙,或者到达了防火墙,但是防火墙没有相应的路由信息指导报文转发,又或者有路由信息但是该报文没有被安全策略放行等。此时需要进一步定位问题。

配置会话表的老化时间

当流量的第一个报文被防火墙转发时,防火墙会会话表老化时间决定一条会话在没有相应的报文匹配的情况下,何时被系统删除。当缺省的会话表老化时间不能满足现有网络的需求时,才需要重新设置。

对于一个已经建立的会话表表项,只有当它不断被报文匹配才有存在的必要。如果长时间没有报文匹 配,则说明可能通信双方已经断开了连接,不再需要该条会话表项了。此时,为了节约系统资源,系统会在一条表项连续未被匹配一段时间后,将其删除,即会话表项已经老化。

如果在会话表项老化之后,又有和这条表项相同的五元组的报文通过,则系统会重新根据安全策略决定是否为其建立会话表项。如果不能建立会话表项,则这个报文是不能被转发的。

通常情况下,可以直接使用系统缺省的会话表老化时间。如果需要修改,需要首先对实际网络中流量的类型和连接数作出估计和判断。对于某些需要进行长时间连接的特殊业务,建议配置长连接功能,而不是通过以下命令将一种协议类型的流量的老化时间全部延长。

代码语言:javascript复制
[FW] firewall session aging-time service-set session-type aging-time

使用上述命令修改某个特定服务的会话超时时间。例如命令:firewall session aging-time service-set ftp 1200,这条命令会针对所有FTP流量生效,将表项的老化时间修改为1200s。该命令需谨慎配置。

代码语言:javascript复制
[FW] display firewall session aging-time

使用上述命令查看当前系统中各类会话表项的老化时间。

6.长连接

防火墙采用会话表来管理数据流,通过首包创建会话表项后,后续报文如果命中会话表项,则根据该表项进行转发。如果某个报文既不是首包,又没有命中会话就会被丢弃。而为了保证网络安全以及会话资源的合理利用,设备上的各种会话缺省老化时间都相对较短,一般只有几分钟。当一个TCP会话的两个连续报文到达设备的时间间隔大于该会话的老化时间时,设备将从会话表中删除相应会话信息。后续报文到达设备后,设备根据自身的转发机制,将丢弃该报文,导致连接中断。

在某些实际应用中,一个TCP会话的两个连续报文可能间隔时间很长。例如:用户需要查询数据库服务器上的数据,这些查询操作的时间间隔远大于TCP的会话老化时间。

为了解决FTP服务、网管服务、TUXEDO服务和数据库服务等业务的这个问题,在安全域间配置长连接功能,可以对特定的数据流设置超长老化时间,保证这些应用的会话表表项不被删除,这样当这些会话的报文长时间没有到达设备后再次到达时,仍然能够通过设备。从而使这些应用不被中断。

对于NGFW,长连接功能在安全规则配置视图下激活,例如:

代码语言:javascript复制
[FW] security-policy
[FW-policy-security] rule name a1
[FW-policy-security-rule-a1] #此处省略用户定义的条件
[FW-policy-security-rule-a1] long-link enable

防火墙的基础配置

注意,本文档关于华为防火墙的配置及命令行讲解,以NGFW防火墙USG6000 V5R1C10为例。不同的防火墙型号或软件版本,在配置命令上存在差异,实际配置时,请以产品手册为准。

1.防火墙登陆及管理

2.防火墙的接口服务管理

接口配置视图下的service-manage命令用来允许或拒绝管理员通过HTTP、HTTPS、Ping、SSH、SNMP以及Telnet访问防火墙自身,该命令配置在防火墙的接口上。

在接口上启用访问管理功能后,即使没有开启该接口所在区域和Local区域之间的安全策略,管理员也能通过该接口访问设备。缺省情况下,管理接口(GE0/0/0)允许管理员通过HTTP、HTTPS、Ping、SSH、SNMP以及Telnet访问设备,非管理接口不允许管理员通过HTTP、HTTPS、Ping、SSH、SNMP以及Telnet访问设备。

只有在报文的入接口开启了访问管理功能,才可以通过对应的接口访问防火墙。例如需要访问防火墙的GE1/0/2接口,但报文从GE1/0/1接口进入设备,此时必须开启GE1/0/1接口的访问管理功能,方可以访问GE1/0/2接口。

接口下service-manage的优先级高于安全策略(Security-policy)。例如虽然安全策略没有放通接口GE1/0/1所在区域访问Local接口的ping流量,但是GE1/0/1下配置了service-manage ping permit,则所在区域内的用户依然能ping通该接口的IP地址。当然如果GE1/0/1接口下配置了service-manage ping deny,则即使安全策略中配置了相应的规则允许ping流量,所在区域内的用户也无法ping通该接口,除非将service-manage功能关闭(undo service-manage enable)。

3.接口及安全区域配置

网络拓扑如上图所示,完成防火墙接口IP地址配置,并将接口添加到相应的安全区域。其中,GE1/0/2口添加到新建的安全区域om。

代码语言:javascript复制
#配置接口IP地址:
[FW] interface GigabitEthernet 1/0/1
[FW-GigabitEthernet1/0/1] ip address 10.1.1.254 24
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] ip address 10.2.2.254 24
[FW] interface GigabitEthernet 1/0/3
[FW-GigabitEthernet1/0/3] ip address 10.3.3.254 24
#在NGFW上新建一个安全区域并设置安全级别:
[FW] firewall zone name om
[FW-zone-om] set priority 98
#将接口添加到安全区域:
[FW] firewall zone trust
[FW-zone-trust] add interface GigabitEthernet 1/0/1
[FW] firewall zone om
[FW-zone-om] add interface GigabitEthernet 1/0/2
[FW] firewall zone untrust
[FW-zone-untrust] add interface GigabitEthernet 1/0/3

4.SSH服务配置

PC连接在FW的GE1/0/1接口上,配置与防火墙相同网段的IP地址。现在要求PC能够通过SSH的方式,访问FW的GE1/0/1接口从而SSH到防火墙。

代码语言:javascript复制
#配置GE1/0/1接口,并允许用户从该接口进入、使用SSH的方式登录防火墙:
[FW] interface GigabitEthernet 1/0/1
[FW-GigabitEthernet1/0/1] ip address 192.168.10.1 24
[FW-GigabitEthernet1/0/1] service-manage ssh permit
#将GE1/0/1接口添加到安全区域:
[FW] firewall zone trust
[FW-zone-trust] add interface GigabitEthernet 1/0/1
#配置VTY管理员界面连接数限制,验证方式AAA:
[FW] user-interface vty 0 4
[FW-ui-vty0-4] authentication-mode aaa
#创建SSH管理账号(比如test):
[FW] aaa
[FW-aaa] manager-user test
[FW-aaa-manager-user-test] service-type ssh
[FW-aaa-manager-user-test] level 3
[FW-aaa-manager-user-test] ssh authentication-type password
[FW-aaa-manager-user-test] password
Enter Password:Huawei123  #根据实际情况填写
Confirm Password:Huawei123
[FW-aaa-manager-user-test] ssh service-type stelnet
[FW-aaa-manager-user-test] quit
#启用STelnet服务:
[FW] stelnet server enable
#生成本地RSA秘钥对:
[FW] rsa local-key-pair create
The key name will be: FW_Host
RSA keys defined for E1000E-N-1_Host already exist.
Confirm to replace them? [y/n]:y
The range of public key size is (512 ~ 2048).
NOTES: A key shorter than 2048 bits may cause security risks.
The generation of a key longer than 512 bits may take several minutes.
Input the bits in the modulus[default = 2048]:
Generating keys...
.............................................   
..   
......................................        
..        

5.安全策略的基础配置

下图通过简单的方式展示了安全策略(Security-policy)与安全规则(Security rule)的关系:

下图是一个简单的安全规则配置范例:

下面,再看几个例子:

用户可以在防火墙的Security-Policy视图下,定义多个rule,来满足不同的业务需求。

系统默认存在一条缺省安全规则,如果流量没有匹配到管理员定义的安全规则,就会命中缺省安全策略(条件为any,动作默认为deny)。

代码语言:javascript复制
#配置安全策略的缺省动作为允许:
[FW] security-policy
[FW-policy-security] default action permit
#配置安全策略的缺省动作为禁止:
[FW] security-policy
[FW-policy-security] default action deny

6.在安全策略中使用对象

在防火墙中,对象的类型有多种,例如地址对象、服务对象、应用对象等等。在设备配置过程中,例如为防火墙配置安全策略,如果不同的安全规则中,需要频繁使用到一个相同的地址范围,这个地址范围内包含多个地址,那么重复在这些规则中书写这些地址是很繁琐的,另外,如果这个地址范围要变更,那么所有相关的规则都需要进行配置,增加了工作量。

我们可以将这些地址关联到一个地址对象中,然后直接在安全策略里调用该地址对象即可。当需要调整地址范围时,也只需对地址对象进行修改。在安全策略的配置过程中,主要使用到的对象有两种:地址对象及服务对象。在华为防火墙上,使用ip address-set命令可以创建地址对象,使用ip service-set命令可以创建服务对象。对象创建完成之后,用户可以在安全规则中引用它。以下通过一个简单的场景,以及一些简单的配置来了解对象的应用。

需求一:Trust区域的PC1及PC2都能访问DMZ中的PC3的Telnet服务
代码语言:javascript复制
security-policy
rule name test1
source-zone trust
destination-zone dmz
source-address 192.168.10.5 32
source-address 192.168.10.6 32
destination-address 192.168.20.11 32
service telnet
action permit

本例中,两条source-address之间是“或”的关系。

需求二:Trust区域的PC1及PC2都能访问DMZ中的PC3的Telnet服务,使用地址对象完成上述需求
代码语言:javascript复制
ip address-set add1 type object
address 192.168.10.5 mask 32
address 192.168.10.6 mask 32
security-policy
rule name test1
source-zone trust
destination-zone dmz
destination-address 192.168.20.11 32
source-address address-set add1
service telnet
action permit

创建地址对象后,可以将一个或多个地址,或地址范围添加到该对象中,并在安全策略中调用,从而简化配置

需求三:Trust区域的任意PC都能访问DMZ中的PC3的TCP9931端口,使用服务对象完成上述需求
代码语言:javascript复制
ip service-set port1 type object
service protocol tcp destination-port 9931

security-policy
rule name test1
source-zone trust
destination-zone dmz
destination-address 192.168.20.11 32
service port1
action permit

服务代表了流量的协议类型。创建服务对象后,可以将一种或多种协议类型,或者TCP/UDP端口号添加到该对象中,并在安全策略中调用,从而简化配置

需求四:Trust区域的任意PC都能访问DMZ中的PC3的TCP9931、TCP9932、TCP9933、UDP2281端口
代码语言:javascript复制
ip service-set port1 type object
service protocol tcp destination-port 9931 to 9933
service protocol udp destination-port 2281
security-policy
rule name test1
source-zone trust
destination-zone dmz
destination-address 192.168.20.11 32
service port1
action permit

7.防火墙的OSPF配置

  1. ATAE3.0/E9000机框通过Fabric交换板堆叠组连接到防火墙。
  2. Server的缺省网关设置为FW的GE1/0/1接口。
  3. 完成FW的配置,与SW建立OSPF邻接关系,交互OSPF路由。使得SW能够从OSPF获知到达192.168.10.0/24的路由。

FW的配置如下:

代码语言:javascript复制
[FW] interface GigabitEthernet 1/0/1
[FW-GigabitEthernet1/0/1] ip address 192.168.10.1 24
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] ip address 10.1.1.1 30
[FW] firewall zone trust
[FW-zone-trust] add interface GigabitEthernet 1/0/1
[FW] firewall zone untrust
[FW-zone-untrust] add interface GigabitEthernet 1/0/2
#配置OSPF:
[FW] ospf 1 router-id 1.1.1.1
[FW-ospf-1] area 0
[FW-ospf-1-area-0.0.0.0] network 192.168.10.0 0.0.0.255
[FW-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.3
#开始配置安全策略,创建两条安全规则:
[FW] security-policy
[FW-policy-security] rule name OSPF_With_SW
[FW-policy-security-rule-OSPF_With_SW] source-zone local
[FW-policy-security-rule-OSPF_With_SW] source-zone untrust
[FW-policy-security-rule-OSPF_With_SW] destination-zone local
[FW-policy-security-rule-OSPF_With_SW] destination-zone untrust
[FW-policy-security-rule-OSPF_With_SW] source-address 10.1.1.1 32
[FW-policy-security-rule-OSPF_With_SW] source-address 10.1.1.2 32
[FW-policy-security-rule-OSPF_With_SW] destination-address 10.1.1.1 32
[FW-policy-security-rule-OSPF_With_SW] destination-address 10.1.1.2 32
[FW-policy-security-rule-OSPF_With_SW] action permit
[FW-policy-security-rule-OSPF_With_SW] quit
[FW-policy-security] rule name PC1_to_Untrust
[FW-policy-security-rule-PC1_to_Untrust] source-address 192.168.10.0 24
[FW-policy-security-rule-PC1_to_Untrust] source-zone trust
[FW-policy-security-rule-PC1_to_Untrust] destination-zone untrust
[FW-policy-security-rule-PC1_to_Untrust] action permit

注意:在上述安全策略的配置中,“OSPF_With_SW”规则用于允许FW与SW交互的OSPF报文,使得两者能够正确地建立OSPF邻接关系并交互路由。如果不配置相关安全规则,则FW与SW可能无法正确建立OSPF邻接。

完成上述配置后,首先查看一下OSPF邻接关系的建立情况:

代码语言:javascript复制
<FW> display ospf peer
OSPF Process 1 with Router ID 1.1.1.1
Neighbors
Area 0.0.0.0 interface 10.1.1.1(GigabitEthernet1/0/2)'s neighbors
Router ID: 1.1.1.2 Address: 10.1.1.2
State: Full Mode:Nbr is Master Priority: 1
DR: 10.1.1.1 BDR: 10.1.1.2 MTU: 0
Dead timer due in 39 sec
Retrans timer interval: 5
Neighbor is up for 00:00:32
Authentication Sequence: [ 0 ]

再看一下SW的路由表:

代码语言:javascript复制
<SW> display ip routing-table protocol ospf
……
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.10.0/24 OSPF 10 2 D 10.1.1.1 Vlanif1000
OSPF routing table status : <Inactive>
Destinations : 0 Routes : 0

SW已经通过OSPF学习到了192.168.10.0/24的路由。此时Server即可ping通SW(10.1.1.2)。

8.防火墙基础配置示例

防火墙的三个接口的IP地址如图所示;

  • 完成接口配置,并将防火墙的接口添加到相应的安全区域;
  • 完成防火墙的安全策略配置,使得PC1能够主动访问PC2,但是PC2无法主动访问PC1;
  • 完成防火墙的安全策略配置,使得PC2能够主动访问WebServer的WEB服务。 防火墙的配置如下:
代码语言:javascript复制
#配置各接口的IP地址:
[FW] interface GigabitEthernet1/0/1
[FW-GigabitEthernet1/0/1] ip address 192.168.1.254 24
[FW] interface GigabitEthernet1/0/2
[FW-GigabitEthernet1/0/2] ip address 172.16.1.254 24
[FW] interface GigabitEthernet1/0/3
[FW-GigabitEthernet1/0/3] ip address 10.1.1.254 24
#向安全区域中添加接口:
[FW] firewall zone trust
[FW-zone-trust] add interface GigabitEthernet1/0/1
[FW] firewall zone untrust
[FW-zone-untrust] add interface GigabitEthernet1/0/3
[FW] firewall zone dmz
[FW-zone-dmz] add interface GigabitEthernet1/0/2
#进入安全策略视图:
[FW] security-policy
#创建安全规则r1,使得trust区域的192.168.1.0/24网段用户能够访问untrust区域的10.1.1.0/24网段:
[FW-policy-security] rule name r1
[FW-policy-security-rule-r1] source-zone trust
[FW-policy-security-rule-r1] destination-zone untrust
[FW-policy-security-rule-r1] source-address 192.168.1.0 24
[FW-policy-security-rule-r1] destination-address 10.1.1.0 24
[FW-policy-security-rule-r1] action permit
#创建安全规则r2,使得untrust区域的10.1.1.0/24网段用户能够访问DMZ区域的WebServer的WEB服务:
[FW-policy-security] rule name r2
[FW-policy-security-rule-r2] source-zone untrust
[FW-policy-security-rule-r2] destination-zone dmz
[FW-policy-security-rule-r2] source-address 10.1.1.0 24
[FW-policy-security-rule-r2] destination-address 172.16.1.1 32
[FW-policy-security-rule-r2] service http
[FW-policy-security-rule-r2] action permit

完成上述配置后,PC1即可主动发起访问PC2,而PC2无法主动访问PC1;另外,PC2能够访问WebServer的HTTP服务。

9.报文捕获

在某些情况下,我们可能需要在防火墙上进行抓包,并对捕获的报文进行分析,此时可以在防火墙上配置五元组抓包。例如在上图中,在防火墙FW1上捕获Server1发往100.1.1.2的报文。

FW1的配置如下:

A.创建ACL3001,用于匹配192.168.1.7发往100.1.1.2的流量:

代码语言:javascript复制
HRP_A[FW1] acl 3001
HRP_A[FW1-acl-adv-3001] rule permit ip source 192.168.1.7 0 destination 100.1.1.2 0

B.配置五元组抓包,在FW1的GE1/0/0接口上抓取ACL3001所匹配的报文,并且将报文缓存在队列0中。缺省时,该命令将 会在GE1/0/0的入方向及出方向抓取相关报文:

代码语言:javascript复制
HRP_A[FW1] packet-capture ipv4-packet 3001 queue 0 interface GigabitEthernet 1/0/0

C.启动抓包进程,抓取报文的详细信息,并且抓包数量为1000:

代码语言:javascript复制
HRP_A[FW1] packet-capture startup verbose manual 1000

完成上述配置后,可以在FW1上查看生效的配置:

代码语言:javascript复制
HRP_A[FW1]display packet-capture configuration
capture number: 1000 capture mode: verbose send mode: manual
interface-name packet-direction acl-number queue-id capt-type
GigabitEthernet1/0/0 inbound 3001 0 IPv4
GigabitEthernet1/0/0 outbound 3001 0 IPv4

现在,FW1将会开始抓取符合条件的报文。此时如果Server1 ping 100.1.1.2,而且ping了5个报文,那么可以在FW1上看到如下信息:

代码语言:javascript复制
HRP_A[FW1]display packet-capture statistic
Number of dropped packets for exception during catching: 0
Number of dropped packets for exception during sending: 0
Queue 0
receive packet 5
drop packet 0
delete packet 0
send succeeded 0
send failed 0
inbound save packet 5
outbound save packet 0
Queue 1
receive packet 0
drop packet 0
delete packet 0
send succeeded 0
send failed 0
inbound save packet 0
outbound save packet 0
Queue 2
……

现在,这些报文已经被FW1缓存在队列0中,如果要将报文保存下来进行分析,则可以将队列0中的报文保存在FW1的磁盘空间中,形成*.cap文件,例如保存为pkt222.cap文件。

代码语言:javascript复制
HRP_A[FW1] packet-capture queue 0 to-file pkt222.cap

此时使用dir命令,可以查看到该文件:

代码语言:javascript复制
HRP_A<FW1>dir
Directory of hda1:/
Idx Attr Size(Byte) Date Time FileName
0 -rw- 119309177 Jan 13 2014 17:39:02 suampua10v1r1c00spc100.bin
1 -rw- 61 Jun 26 2017 10:28:58 private-data.txt
2 drw- - Jan 13 2014 17:48:10 isp
……
21 -rw- 594 Jul 11 2017 11:38:34 pkt222.cap

通过FTP/SFTP等方式从FW1上下载该文件,即可对报文进行分析。

完成抓包后,需要进行如下操作:

  • 停止抓包进程:
代码语言:javascript复制
HRP_A[FW1] undo packet-capture startup
  • 清空抓包队列:
代码语言:javascript复制
HRP_A<FW1> reset packet-capture queue 0
  • 清空抓包统计信息:
代码语言:javascript复制
HRP_A<FW1> reset packet-capture statistic
  • 删除抓包配置:
代码语言:javascript复制
HRP_A[FW1] undo packet-capture interface GigabitEthernet 1/0/0
注意事项:
  • 配置五元组抓包会在一定程度上影响设备性能,因此通常只在网络问题定位时使用。在网络问题定位结束后,必须停止抓包进程,并且清空抓包队列,释放内存。
  • 启动抓包需在数通工程师的指导下进行,并选择业务流量较小的时间进行,以防操作失误引起业务中断。禁止随意开启抓包。
  • 命令packet-capture { no-ip-packet | all-packet | ipv4-packet acl-number | ipv6-packet acl6-number } [ inbound | outbound ] [ queue queue-id ] interface interface-type interface-number用于配置抓包接口、方向以及该接口用来存储抓包的队列。缺省情况下,同时抓取入方向和出方向的报文,存储抓包的队列为0。设备提供四个队列用于存储抓取的报文。设备单次单向最大抓包数目为1000个报文。出入方向最多各存储1000个报文,每个队列最多存储共2000个,队列报文超过2000后,新的报文将被丢弃,不再进入队列。在队列存储到2000个报文以后如需重新抓包,可以配置该接口另一个队列,或者使用reset packet-capture queue queue-id命令清空该队列。
  • 在本例中,只要Server1发往100.1.1.2的报文到达FW1的GE1/0/0接口,便会被捕获,即使FW1的安全策略并未允许Server1主动访问100.1.1.2。

0 人点赞