在目前大多数安全解决方案中,防火墙的实施是最为重要的需求,它是每个网络基础设施必要且不可分割的组成部分。这篇博客主要介绍防火墙安全算法的原理与基本配置以及远程管理防火墙的几种方式
硬件与软件防火墙
1.软件防火墙
软件防火墙单独使用软件系统来完成防火墙功能,将软件部署到系统主机上,其安全性较硬件防火墙差,同时占用系统资源,在一定程度上影响系统性能。其一般用于单机系统或个人计算机,极少用于计算机网络,如瑞星、天网、360等。
2.硬件防火墙
硬件防火墙比软件防火墙更有优势,原因有一下两个方面
* 硬件防火墙功能强大,且明确是为抵御威胁而设计的
* 硬件防火墙比软件防火墙漏洞少
Cisco硬件防火墙技术应用于以下三个领域
* PIX 500系列安全设备
* ASA 5500系列自适应安全设备
* Catalyst 6500系列交换机和Cisco 7600系列路由器的防火墙服务模块
ASA安全设备
Cisco ASA 5500系列自适应安全设备是最新的Cisco防火墙技术产品,它提供了整合防火墙、***保护系统、高级自适应威胁防御服务,其中包括应用安全和简化网络安全解决方案的×××服务。
目前,Cisco ASA 5500系列有六种型号,下表所示:
型号 |
价格 |
并发连接数 |
网络吞吐量 |
描述 |
ASA 5505 |
2600~15700 |
25000 |
150MB |
适用于小型企业 |
ASA 5510 |
12000~94200 |
130000 |
300MB |
适用于中型企业 |
ASA 5520 |
28000~84000 |
280000 |
450MB |
适用于中型企业 |
ASA 5540 |
68000~70000 |
400000 |
650MB |
适用于中型企业 |
ASA 5550 |
80000~85000 |
650000 |
1200MB |
适用于大型企业及电信运营商 |
ASA 5580 |
200000~530000 |
1000000~2000000 |
5000MB~10000MB |
适用于大型企业及电信运营商 |
ASA的安全算法
ASA首先是一个状态化防火墙,状态化防火墙维护一个关于用户信息的连接表,称为Conn表,表中关键信息如下:
* 源IP地址
* 目的IP地址
* IP协议
* IP协议信息
默认情况下,ASA对TCP和UDP协议提供状态化连接,但ICMP协议是非状态化的。
状态化防火墙进行状态化处理的过程如图所示:
(1)PC发起一个HTTP请求给Web服务器
(2)HTTP请求到达防火墙,防火墙将连接信息添加到Conn表
(3)防火墙将HTTP请求转发给Web服务器
流量返回时,状态化防火墙处理的过程如下:
(4)Web服务器响应HTTP请求,返回相应的数据流量
(5)防火墙拦截该流量,检查其连接信息
* 如果在Conn表中查找到匹配的连接信息,则流量被允许
* 如果在Conn表中查不到匹配的连接信息,则流量被丢弃
安全算法的原理
ASA使用安全算法执行一下三项基本操作
* 访问控制列表:基于特定的网络,主机和服务(TCP/UDP端口号)控制网络访问。
* 连接表:维护每个连接的状态信息。安全算法使用此信息在已建立的连接中有效转发流量
* 检测引擎:执行状态检测和应用层检测。检测规则集是预先定义的,来验证应用是否遵从每个RFC和其他标准。
数据报文穿越ASA的过程如下图所示:
(1)一个新来的TCP SYN报文到达ASA,试图建立一个新的连接。
(2)ASA检查访问列表,确定是否允许连接。
(3)ASA执行路由查询,如果路由正确,ASA使用必要的会话信息在连接表(XLATE和Conn)中创建一个新条目。
(4)ASA在检测引擎中检查预定义的一套规则,如果是已知应用,则进一步执行应用层检测。
(5)ASA根据检测引擎确定是否转发或丢弃报文。如果允许转发,则将报文转发到目的主机。
(6)目的主机响应该报文。
(7)ASA接收返回报文并进行检测,在连接数据库中查询连接,确定会话信息与现有连接是否匹配。
(8)ASA转发属于已建立的现有会话的报文。
ASA的引用层检测是通过检查报文的IP头和有效载荷的内容,对应用层协议流量执行深层检测,检查应用层协议是否遵守RFC标准,从而检测出应用层数据中的恶意行为。
ASA的基本配置
配置主机名
ASA初始启动后默认的主机名是ciscoasa,可以通过以下命令将主机名配置为asa。
ciscoasa# config terminal ciscoasa(config)# hostname asa asa(config)#
配置密码
可以配置特权密码和远程登录密码
1.配置特权密码
以下命令将配置特权密码为123456
asa(config)# enable password 123456
2.配置远程登录密码
远程登录密码是在使用Telnet或SSH时需要输入的密码。以下命令将配置远程登录密码为ysf,注意与路由器配置是不同的。
asa(config)# password ysf
接口的概念与配置
ASA的接口通常有两种名称,即物理名称和逻辑名称
1.物理名称
物理名称与路由器名称类似,例如Ethernet0/0、Ethernet0/1,可以简写为E0/0、E0/1,通常用来配置接口的速率,双工和IP地址等
ASA 5510及以上型号还有专门的管理接口用于管理目的,例如management0/0
2.逻辑名称
逻辑名称用于大多数的配置命令,例如配置ACL、配置路由等使用命令中都用到逻辑名称。逻辑名称用来描述安全区域,例如通常用inside表示ASA连接的内部区域(安全性高),用outside表示ASA连接的外部区域(安全性低)。
防火墙与路由器有着本质的不同,防火墙是用于安全目的,所以它的各个接口代表了不同的安全区域,而安全区域之间隔着一堵墙。
接口的安全级别
ASA的每个接口都有一个安全级别,范围是0-100,数值越大其安全级别越高。当配置接口的名称为inside时,其安全级别自动设置为100。而配置其他的接口名称例如outside时,其安全级别自动设置为0.
不同安全级别的接口之间互相访问时,遵从如下的默认规则。
* 允许出站(outbound)连接,即允许从高安全级别接口到低安全级别接口的流量通过。
* 禁止入站(inbound)连接,即禁止从低安全级别接口到高安全级别接口的流量通过。
* 禁止相同安全级别的接口之间通信。
接口的配置
配置命令语法如下:
asa(config-if)# nameif name //配置接口名称 asa(config-if)# security-level number //配置接口安全级别
其中number的范围为0-100。
案例:如图,使用路由器R1和R2模拟PC,要求配置ASA的接口并验证接口之间的通信。
ASA接口配置如下:
asa(config)# int e0/1 asa(config-if)# namaif inside asa(config-if)# security-level 100 asa(config-if)# ip add 10.1.1.254 255.255.255.0 asa(config-if)# no sh asa(config)# int e0/0 asa(config-if)# nameif outside asa(config-if)# security-level 0 asa(config-if)# ip add 172.16.1.254 255.255.255.0 asa(config-if)# no sh
如果ASA的型号是5505,则不支持在物理接口上直接进行以上配置,必须通过VLAN虚接口来配置,具体配置如下:
asa(config)# int vlan 1 asa(config-if)# nameif inside asa(config-if)# security-level 100 asa(config-if)# ip add 10.1.1.254 255.255.255.0 asa(config-if)# no sh asa(config-if)# int e0/1 asa(config-if)# no sh asa(config-if)# switchport access vlan 1 asa(config)# int vlan 2 asa(config-if)# nameif outside asa(config-if)# security-level 0 asa(config-if)# ip add 172.16.1.254 255.255.255.0 asa(config-if)# no sh asa(config-if)# int e0/0 asa(config-if)# no sh asa(config-if)# switchport access vlan 2
查看Conn表
asa# show conn dateil
通过验证,在R1可以Telnet到R2,但在R2可以Telnet到R1
配置ACL
在ASA上配置ACL有两个作用:一是允许入站连接,二是控制出站连接的流量
* 标准ACL的配置如下:
asa(config)# access-list acl_name [ standrad ] { permit | deny } ip_addr mask
* 扩展ACL的配置如下:
asa(config)# access-list acl_name [ extended ] { permit | deny } protocol src_ip_addr src_mask dst_ip_addr dst_mask [ operator port ]
* 将ACL应用到接口,配置如下:
asa(config)# access-group acl_name { in | out } interface interface_name
需要注意的是,路由器上的ACL使用的是反码,而ASA上的ACL使用正常的掩码。另外,标准ACL过滤流量时不能应用到接口,它应用到其他场合,如远程访问×××中分离隧道的配置
允许入站连接
ASA的默认规则是禁止入站连接,如果要允许入站连接,就需要配置ACL。
例如:在上个案例中,要在R2上Telnet到R1,可以在ASA上做如下配置
asa(config)# access-list out_to_in permit ip host 172.16.1.1 host 10.1.1.1 asa(config)# access-group out_to_in in int outside
控制出站连接的流量
例如:在上个案例中,如果inside区域有多个子网。例如,10.1.1.0/24、10.1.2.0/24等,要禁止子网10.1.1.0/24的流量出站,可以在ASA上做如下配置
asa(config)# access-list in_to_out deny ip 10.1.1.0 255.255.255.0 any asa(config)# access-list in_to_out permit ip any any asa(config)# access-group in_to_out in int inside
配置静态路由
ASA支持静态和默认路由、动态路由(例如OSPF等)
配置静态路由的命令语法如下
asa(config)# route interface-name network mask next-hop-address
ICMP协议
默认情况下,禁止ICMP报文穿越ASA是基于安全性的考虑。为了方便调试,可以配置暂时允许ICMP应答报文穿越ASA
asa(config)# access-list 111 permit icmp any any asa(config)# access-group 111 in int outside
在调试完毕后,通常建议禁止ICMP报文穿越ASA
其他配置命令
(1)保存running-configuration配置到startup configuration,可以使用以下两种命令:
asa(config)#write memory //第一种 asa(config)#copy running-config startup-config //第二种
(2)清除running configuration的所有配置,可以使用以下命令
asa(config)#clear configure all
(3)清除running configuration中指定命令的配置,可以使用以下命令
asa(config)#clear configure configurationcommand [ leve12configurationcommand ]
例如:要清除所有access-list命令的配置,可以使用以下命令
asa(config)#clear configure access-list
只清除access-list in_to_out的配置,可以使用以下命令
asa(config)#clear configure access-list in_to_out
远程管理ASA
ASA支持三种主要的远程管理接入方式:Telnet、SSH和ASDM
1.配置Telnet接入
由于使用Telnet远程管理是不安全的,所以一般禁止从外部接口使用Telnet接入,而只允许在内网使用Telnet。
(1)配置允许Telnet接入
asa(config)# telnet {network|ip-address} mask interface_name
例如:配置允许从inside区域内的192.168.0.0/24使用Telnet接入,命令如下
asa(config)# telnet 192.168.0.0 255.255.255.0 inside
可以配置为只允许主机192.168.0.1/24使用Telnet接入,命令如下
asa(config)# telnet 192.168.0.1 255.255.255.255 inside
(2)(可选)配置空闲超时时间
asa(config)# telnet timeout minutes
参数minutes的取值范围为1-1440分钟,默认值是5分钟。
2.配置SSH接入
使用SSH可以安全地对ASA进行远程管理,配置SSH接入分为四个步骤。
(1)配置主机名和域名
在生成RSA密钥对的过程中需要用到主机名和域名,以下命令为ASA配置主机名为asa802,配置域名为asadomain.com
asa(config)# host asa802 asa802(config)# domain-name asadomain.com
(2)生成RSA密钥对
asa802(config)# crypto key generate rsa modulus 1024
可以指定modulus的大小为512、768、1024或2048位,默认是1024,表示生成的RSA密钥的长度。
(3)配置允许SSH接入
配置SSH的命令语法与配置Telnet是类似的,但是SSH可以配置为从外部接口接入,命令如下
asa802(config)# ssh 192.168.0.0 255.255.255.0 inside asa802(config)# ssh 0 0 outside
(4)其他可选配置
配置空闲超时时间。与配置Telnet类似,例如设置为30分钟,命令如下
asa802(config)# ssh timeout 30
配置SSH的版本。默认情况下支持版本1和版本2.要限定使用哪个版本,可以使用如下命令
asa802(config)# ssh version 2
配置完后,可以在Outside 区域内的主机上使用Putty登录ASA的Oouside接口。注意ASA默认使用用户名pix,密码为使用passwd命令设置的密码,即可登录成功
3.配置ASDM接入
除了使用命令行外,ASA还支持GUI远程管理方式,即自适应安全设备管理器(ASDM)
要使用ASDM,首先要保证ASA的Flash中有ASDM映像,可以通过dir命令查看
asa# dir Directory of disk0:/ 55 -rwx 6889764 14:16:34 Dec 09 2017 asdm-602.bin
(1)启用HTTPS服务器功能,命令如下
asa(config)# http server enable [port] //默认端口是443
(2)配置允许HTTPS接入,命令如下:
asa(config)# http {network|ip-address} mask interface-name
(3)指定ASDM映像的位置,命令如下:
asa(config)# asdm p_w_picpath disk0:/asdm-602.bin
(4)配置客户端登陆使用的用户名和密码,命令如下:
asa(config)# username user password password privilege 15
如果不配置用户名和密码,ASDM默认使用用户名admin,密码为使用enable password命令设置的密码。
例如:以下是一个ASA的配置案例
asa(config)# http server enable asa(config)# http 192.168.0.0 255.255.255.0 inside asa(config)# asdm p_w_picpath disk0:/asdm-602.bin asa(config)# username ysf password 123456 privilege 15
客户端主机使用ASDM需要首先安装Java Runtiime Environment(JRE),然后在主机启动浏览器,输入https://192.168.0.254(inside接口的IP地址)进行访问。
多安全区域(配置DMZ)
上面介绍了ASA的基本配置,其中只用到了inside和outside两个安全区域,实际上ASA可以配置多个安全区域,比较常用的是DMZ
DMZ(隔离区)位于企业内部网络和外部网络之间的一个网络区域,通常用来放置一些必须公开的服务器,如Web服务器、FTP服务器和论坛等。下图所示
DMZ默认的访问规则
DMZ的安全级别介于inside和outside之间,在存在DMZ的情况下,默认的访问规则如下图所示:
* 允许从高安全级别接口到低安全级别接口的流量通过
* 禁止从低安全级别接口到高安全级别接口的流量通过
在实际应用中,通常需要配置访问规则和地址转换允许outside访问DMZ
DMZ的基本配置
asa(config)# int e0/1 asa(config-if)# namaif dmz asa(config-if)# security-level 50 asa(config-if)# ip add 192.168.1.1 255.255.255.0 asa(config-if)# no sh