包过滤技术介绍
所谓包过滤就是对防火墙需要转发的数据包,先获取包头信息,然后和设定的规则进行比较,根据比较的结果对数据包进行转发或者丢弃的动作。
实现包过滤的核心技术就是使用访问控制列表(ACL)。下图描述了在防火墙内部设置适当的访问控制列表可以允许某公司的分支机构-办事处访问公司总部,但禁止对于未授权的用户访问公司总部。
包过滤防火墙基本配置
包过滤防火墙配置包括:
- 允许或禁止防火墙
- 设置防火墙缺省过滤方式
- 设置包过滤防火墙分片报文检测开关
- 配置分片报文检测的上、下门限值
- 在接口上应用访问控制列表
允许或者禁止防火墙
操作 | 命令 |
---|---|
允许防火墙 | firewall packet-filter enable (缺省) |
禁止防火墙 | undo firewall packet-filter enable |
此命令在系统视图下进行下配置,系统缺省防火墙为允许。
设置包过滤防火墙缺省过滤方式
此命令在系统视图下进行下配置:
操作 | 命令 |
---|---|
设置缺省过滤方式为允许通过 | firewall packet-filter default permit (缺省) |
设置缺省过滤方式为禁止通过 | firewall packet-filter default deny |
防火墙初始情况下,系统缺省为允许通过。
设置包过滤防火墙分片检测
此命令在系统视图下进行配置:
操作 | 命令 |
---|---|
打开分片报文检测 | firewall packet-filter fragments-inspect |
关闭分片报文检测 | undo firewall packet-filter fragments-inspect |
只有打开了分片报文检测开关,精确匹配模式才能真正有效。
配置分片报文检测的上下限域值
此命令在系统视图下进行配置。
缺省的上限(high)分片状态记录数目为2000;下限(low)分片状态记录数目为1500.
操作 | 命令 |
---|---|
指定上、下限分片状态记录数目 | firewall packet-filter fragments-inspect { high | low } { default | number } |
恢复上限分片状态记录数目为缺省值 | undo firewall packet-filter fragments-inspect { high | low } |
如果打开分片检测开关,应用精确匹配过滤后,包过滤的执行效率会略微降低,配置的匹配项目越多,效率降低越多。因此,需要设定门限值(最大允许上、下限域值)。当记录状态数达到上限时,将删除最先保存的状态项直至下限值。下限值必须小于或等于上限值。
在接口上应用访问控制列表
此命令在接口视图下进行配置:
操作 | 命令 |
---|---|
指定接口上过滤接收报文的规则 | firewall packet-filter acl-number { inbound | outbound } [ match-fragments { normally | exactly } ] |
取消接口上过滤接收报文的规则 | undo firewall packet-filter acl-number { inbound | outbound } |
注意事项:
- 将访问规则应用到接口上时,同时会遵循时间段过滤规则。
- 也可以对接口的收发报文分别指定访问规则。
- 基于接口的访问控制列表(即序号为1000到1999的ACL)只能用参数outbound。
- 高级访问控制列表提供标准匹配和精确匹配两种匹配方式。标准匹配即三层信息的匹配,匹配将忽略三层以外的信息;精确匹配规则对所有的高级ACL的过滤规则进行匹配,这就要求防火墙必须记录首片分片报文的状态已获得完整的后续分片的匹配信息。缺省模式为标准匹配方式。
- match-fragments参数仅能应用于高级访问控制列表。
- 要将基于MAC地址的访问控制列表应用到接口上,防火墙必须工作在通明模式下。
包过滤防火墙的显示与调试
在所有视图下执行display命令可以显示包过滤防火墙的运行情况,查看显示的信息可以验证配置的效果。
在用户视图下执行debugging 命令可以对包过滤防火墙进行调试。
操作 | 命令 |
---|---|
显示接口的有关防火墙的统计信息 | display firewall packet-filter statistics { all | interface type number | fragments-inspect } |
显示分片表 | display firewall fragment |
打开防火墙包过滤调试信息开关 | debugging firewall packet-filter { all | denied | permitted | icmp | tcp | udp | fragments-inspect | others } [ interface type number ] |
关闭防火墙包过滤调试信息开关 | undo debugging packet-filter firewall { all | denied | permitted | icmp | tcp | udp | fragments-inspect | others } [ interface type number ] |
清除包过滤防火墙的统计信息 | reset firewall packet-filter statistics { all | interface type number } |
ASPF原理介绍
包过滤技术存在的问题
许多应用层协议,如Telnet、SMTP等都是使用标准的知名端口地址进行通信,但是大部分多媒体应用协议(如H.323)及FTP等协议先使用约定的端口来初始化一个控制连接,然后再动态的选择端口用于数据传输。端口的选择是通信双方动态协商的,其中的某些应用可能会同时用到多个端口。为避免内部网络遭受外部的攻击,包过滤防火墙只能阻止固定端口的应用,因而存在安全隐患。
结论是:
- 对于多通道的应用层协议(如FTP、H.323等),部分安全策略无法预知;
- 无法检测某些来自于应用层的攻击行为(如TCP SYN Java applet等);
鉴于以上问题,提出了状态防火墙的概念,即ASPF的概念。
ASPF介绍
ASPF (Application Specific Packet Filter)是针对应用层及传输层的包过滤,既基于状态的报文过滤。
ASPF能够实现的应用层协议检测包括:FTP HTTP SMP RTSP H.323(Q.931 H.245 RTP/RTCP),ASPF能够实现的传输层协议检测包括:通用TCPUDP的检测。
ASPF主要提供如下功能:
- 能够检查应用层协议信息
- 能够检测传输层协议信息
- Java Blocking(Java阻断)
- DoS(Denial of Service,拒绝服务)的检测和防范
- ActiveX Blocking(ActiveX阻断)
- 支持端口到应用的映射,为基于应用层协议的服务指定非通用端口
- 增强的会话日志功能
ASPF能够支持一个控制连接上存在多个数据连接,监听每一个应用的每一个连接所使用的端口,打开合适的通道让会话中的数据出入防火墙,在会话结束时则关闭该通道,从而对使用动态端口的应用实现有效的访问控制。
状态检测技术采用的是一种基于会话的状态检测机制,将属于同一会话的所有包作为一个整体的数据流看待,构成一个会话状态表。通过会话状态表与临时访问控制表的共同配合,对流经路由器特定接口的报文的各个连接状态因素加以识别判定。ASPF主要采用了会话状态表和临时访问控制表实现对传输报文的动态过滤。
会话状态表的概念:
一个会话可以被认为是一个TCP连接。会话状态表维护了一次会话中某一时刻会话所处的状态,用于匹配后续的发送报文,并检测会话状态的转换是否正确。会话状态表在检测到第一个外发报文时创建,即通过第一个SYN包建立。
会话状态表中的记录的信息既包括当前会话的通信信息,也包括是本次会话之前的通信信息。因此,与传统包过滤防火墙的静态过滤相比,ASPF考虑到会话的上下文信息,具有更好的灵活性和安全性。
临时访问控制表的概念:
临时访问控制表不同于包过滤防火墙的访问控制列表(ACL)。它独立于访问控制列表,在创建会话状态表项的时候同时创建,会话结束后删除。其功能相当于一个扩展的访问控制规则的permit项,用于匹配一个会话中的所有应答报文。
传输层协议检测基本原理:
传输层协议检测是指通用TCP/UDP检测。通用TCP和UDP检测与应用层协议检测不同,是对报文的传输层信息进行的检测,如源、目的地址及端口号等。需要注意的是,应用层协议检测优先于传输层协议检测。通用TCP/UDP检测要求流入接口的报文与之前流出接口的报文完全匹配,即源、目的地址及端口号恰好对应,否则返回的报文将被丢弃。因此对于FTP,H.323这样的多通道应用层协议,在不配置应用层检测而直接配置TCP检测的情况下会导致数据通道无法建立.
ASPF 部署功能的基本概念
Java Blocking
由于恶意applet会对用户的计算机系统资源的造成破坏,因而需要限制未经用户允许的Java applet下载至用户的网络中。Java 阻塞(Java Blocking)可实现对来自于不信任站点Java applet的过滤,对通过HTTP协议传输的Java applet小程序进行阻断。当配置了Java Blocking时,用户对视图在web页面中获取包含Java applet的程序而发送的请求指令将会被ASPF阻断过滤。
需要注意的是,ASPF的Java 阻断功能现在只能实现对封装成.Class的Java applet进行阻断,而对于以其它方式封装的applet不能实现过滤。
代码语言:javascript复制[Quidway-aspf-policy-1]detect http java-blocking ? (在HTTP的检测视图下实现)
INTEGER<2000-2999> 基本访问控制列表号码
activex-blocking 应用ActiveX阻断
aging-time 设定非活动状态的超时值
<cr>
端口映射PAM
应用层协议使用通用的端口号进行通信。端口映射允许用户对不同的应用定义一组新的端口号。端口映射提供了一些机制来维护和使用用户定义的端口配置信息。
PAM支持两类映射机制:
①通用端口映射是将用户自定义端口号和应用层协议建立映射关系。例如将8080端口映射为HTTP协议,这样所有目标端口是8080的TCP报文被认为是HTTP报文。
②基于基本访问控制列表的主机端口映射是对去往或来自某些特定主机的报文建立自定义端口号和应用协议的的映射。例如,将目的地址为10.110.0.0网段的使用8080端口的TCP报文映射为HTTP报文。主机的范围由ACL基本列表指定的。
单通道协议/多通道协议
① 单通道协议:从会话建立到删除的全过程中,只有一个通道参与数据交互:SMTP HTTP。
② 多通道协议:包含一个控制通道和若干其它控制或者数据通道,即控制信息的交互和数据的传输在不同的通道上完成的,如FTP,RTSP。
内部接口和外部接口
如果防火墙连接了内部网络和互联网,防火墙通过ASPF部署来保护内部网络的服务器,则安全网关上于内部链接的接口就是内部接口,与互联网连接的接口就是外部接口。当ASPF应用于防火墙外部接口的出方向时,可以在防火墙上为内网用户访问互联网的返回报文打开一个临时通道。
ASPF检测应用层协议基本原理
为了保护内部网络,一般情况下需要在防火墙上配置静态访问控制列表,以便允许内部网络的主机访问外部网络,同时拒绝外部网络的主机访问内部网络。但静态访问控制列表会将用户发起连接后返回的报文过滤掉,导致连接无法建立。
当在安全网关上配置了应用层协议检测后,ASPF可以检测每一个应用层的会话,并创建一个状态表和一个临时的访问控制表TACL。
状态表在检测到第一个外发报文时候创建,用于维护了一次会话中某一时刻会话所处的状态,并检测会话状态的转换是否正确。
临时访问控制列表TACL的表项在创建状态表项的时候一并创建,会话结束后删除,它相当于一个扩展的ACL的permit项。TACL主要用于匹配一个中的所有返回的报文,可以为某一个应用返回的报文在防火墙的外部接口上建立了一个临时返回的通道。
ASPF检测多通道应用层协议基本原理
FTP属于多通道协议,FTP连接的建立过程描述如下 假设FTP clients 以1333端口向FTP Server 的21端口发起FTP控制通道的连接,通过协商决定由Server端的20端口向client 端的1600端口发起数据通道的连接,数据传输超时或结束后连接删除。
ASPF多通道协议FTP检测在FTP连接建立到拆除过程中的处理如下:
- 检查从出接口上向外发送的IP报文,确认为基本TCP的FTP报文
- 检查端口号确认为控制连接,为返回报文建立相应的的TACL和会话状态表
- 检查FTP控制连接报文,解析FTP指令,根据指令更新状态表,如果包含数据通道建立指令,则创建数据连接的TACL,对于数据连接,不进行状态检测。
- 对于返回报文,根据协议类型做相应匹配检查,检查将根据相应协议的状态表和TACL决定报文是否允许通过。
- FTP连接删除时,状态表和TACL也随之删除。
单通道协议检测比较简单,当发起连接时建立TACL,删除时随之删除TACL即可。
ASPF 基本配置
ASPF配置包括:
- 允许防火墙
- 配置访问控制列表
- 定义一个ASPF策略
- 在选定的接口上应用ASPF策略过滤范围
允许防火墙
操作 | 命令 |
---|---|
允许防火墙 | firewall packet-filter enable |
配置访问控制列表
操作 | 命令 |
---|---|
配置访问控制列表(在ACL视图下) | rule deny |
将ACL应用到出接口上(在接口视图下) | firewall packet-filter acl-num inbound |
在出接口上流入信任区的数据为“入”的概念。
定义ASPF策略之创建ASPF策略
操作 | 命令 |
---|---|
创建一个ASPF策略 | aspf-policy aspf-policy-number |
删除创建一个ASPF策略 | undo aspf-policy aspf-policy-number |
aspf-policy-number 为ASPF策略号,范围为1-99
定义ASPF策略之配置空闲超时值
操作 | 命令 |
---|---|
配置空闲超时值 | aging-time { syn | fin | tcp | udp } seconds |
恢复默认的空闲超时值 | undo aging-time { syn | fin | tcp | udp } |
TCP的SYN状态等待超时值、FIN状态等待超时值,TCP和UDP会话表项空闲状态超时值。默认超时分别为30秒、5秒、3600秒和30秒。
定义ASPF策略之配置应用层检测
操作 命令 配置应用协议检测 detect protocol [ aging-time seconds ] 删除配置的应用协议检测 undo detect protocol
定义ASPF策略之配置通用TCP和UDP检测
在不配置应用层检测,直接配置TCP或UDP检测的情况下,可能会产生部分报文无法返回的情况,建议应用层检测和TCP UDP检测配合使用。对于Telnet应用,直接配置通用TCP检测即可实现ASPF功能。
操作 | 命令 |
---|---|
配置应用协议检测 | detect protocol [ aging-time seconds ] |
删除配置的应用协议检测 | undo detect protocol |
在接口上应用ASPF策略
操作 | 命令 |
---|---|
在接口上应用ASPF策略 | firewall aspf aspf-policy-number { inbound | outbound } |
删除该接口上应用的ASPF策略 | undo firewall aspf aspf-policy-number { inbound | outbound } |
由于ASPF对于应用层协议状态的保存和维护都是基于接口的。因此,在实际应用中,必须保证报文入口的一致性,即必须保证连接发起报文和返回报文基于同一接口。
黑名单原理
黑名单原理介绍
黑名单指根据报文的源地址进行过滤的一种方式。
同基于ACL的包过滤功能相比,由于黑名单进行匹配的值非常简单,可以很高的速度实现报文过滤,从而有效地将特定IP地址发送来的报文屏蔽。
黑名单最主要的一个特色是可以由防火墙动态地进行添加和删除,当防火墙中根据报文的行为特征察觉到特定的IP地址攻击企图后,主动修改黑名单列表,从而将该IP地址发送的报文过滤掉。因此,黑名单是防火墙一个中药店安全特征。
黑名单列表表项的来源
①手动添加:
代码语言:javascript复制Firewall blacklist item sour-addr {timeout minutes}
该命令可人工创建一条黑名单,黑名单表项以IP 地址为插入的依据,如果使用命令行多次配置同一IP地址的表项到黑名单中,则最后配置的表项会覆盖原有表项。
在配置表项时,若使用timeout minutes参数,则意味着该黑名单表项会在指定的老化时间后被自动删除,对源自相应IP地址的报文过滤功能也随之消失;反之,若不使用该参数,则意味着该表项始终有效,不会被老化。
② 动态创建:
防火墙相应模块可以动态的向黑名单中插入表项。比如,当攻击防范模块察觉到特定IP地址的攻击之后,如果进行了相关设定,则会将这个Ip地址自动插入到黑名单表中。此后的一定时间内,来自这个IP地址的任何报文,都将被黑名单过滤掉。
如果防火墙相关模块准备向黑名单中插入的IP地址已经存在于黑名单中,则老化时间长的表项会被保留。
目前可以主动向黑名单中插入表项的防火墙模块是攻击防范模块,相应的配置请见第7章攻击防范中的描述。
黑名单基本配置
黑名单基本配置包括
- 使能或禁止黑名单
- 配置黑名单表项
- 黑名单的显示与调试
使能或禁止黑名单
操作 | 命令 |
---|---|
使能黑名单功能 | firewall blacklist enable |
禁止黑名单功能 | undo firewall blacklist enable |
配置黑名单表项
操作 | 命令 |
---|---|
配置黑名单表项 | firewall blacklist sour-addr [ timeout minutes ] |
删除黑名单表项 | undo firewall blacklist item [ sour-addr ] |
黑名单的显示与调试
操作 | 命令 |
---|---|
显示当前黑名单表项信息或运行状态 | display firewall blacklist { enable | item [ sour-addr ] } |
打开黑名单的调试开关 | debugging firewall blacklist { all | item | packet } |