公司预算少,买了路由器买不了防火墙?想用高大上×××技术,防火墙不支持?分公司小,只有一台路由器不能安全防护?这些都不是问题,今天和明天笔者将向大家介绍思科的IOS防火墙,将IOS路由器打造成一台防火墙。


笔者目前知道的支持IOS防火墙的设备有ISR (Integrated Service Router,集成多业务路由器)系列路由器,ASR 1K路由器,72系列路由器。在ISR G1 系列路由器(就是18/28/38打头的路由器,例如1841,2801,3825,现在ISR G1已经停产)如果需要使用IOS防火墙功能,只需更换路由器的IOS即可;而ISR G2系列(就是19/29/39打头的路由器)开始,如果想使用IOS防火墙功能,是需要security的license激活的,就是需要向思科购买license才能使用,如果是试用的话,可以在思科license网站申请试用的license来激活该功能。


思科IOS防火墙分为两种,一种是基于CBAC(Context-Based Access Control,基于内容的访问控制)的传统IOS防火墙,另一种是在IOS 12.4(6)T版本以后才开始使用的Zone-based Firewall。本文讲的是基于CBAC的IOS防火墙,下一篇博文将介绍Zone-based Firewall。


防火墙知识普及(可略过):

防火墙发至今,已经有很多各类了,大致可以分为4类:

  1. 基于包过滤的防火墙:说白了就是ACL,通过ACL来控制数据包,实现访问控制。这种基于数据包的控制,可以对http、telnet(单信道协议)等简单的协议进行很好的管控,但对FTP、语音流量(多信道协议)等较复杂的协议并不能很好的支持。

  2. 基于状态包过滤的防火墙:目前市面上能够见到的防火墙都是状态化的防火墙,所谓状态化的防火墙,即当数据包穿越防火墙之后,防火墙会记录该会话的状态,当该会话的流量返回的时候会查询状态化表项,如果在表项中存在,就直接放行通过,不会查询ACL,当没有状态会话的时候,才会查询ACL条目。这样的话,我们只需放行始发的流量即可,无需理会回来的流量。并且,状态化的防火墙对协议的支持更好,它本身能够识别FTP、SIP、等多信道协议,并对这些协议进行状态化监测。

  3. 代理防火墙:代理防火墙是一种应用层的防火墙,我们一般的防火墙都是工作在三、四层,防止或放行IP层、TCP、UDP等流量,而代理防火墙则是工作在七层,对控制更加深入。代理防火墙分为好多种类型,有HTTP代理防火墙,邮件代理防火墙等。以HTTP代理防火墙为例,在客户端浏览器上需要配置HTTP代理,然后该电脑所有HTTP流量先到达防火墙,防火墙过滤后,再与真正的WEB服务器进行通信。代理防火墙可以针对更深入的内容进行过滤,例如可以访问淘宝,不可以访问视频等策略。

  4. 下一代防火墙(Next Genaral Firewall):现在市场上谷鼓吹的NGFW,即不仅能够对三四层流量进行控制,更能对七层应用层进行控制。例如可以对QQ、微信等各种应用,淘宝、百度等各类网站进行精准识别,对内网用户进行高度匹配,最后实现谁可以访问什么,谁不能访问什么。例如,张三是DHCP获取地址,但他一上线,防火墙就能够识别出来,并对张三进行控制,可以访问百度,不能访问淘宝,可以发邮件,但不能用QQ,而无需对IP进行控制,即使张三下次DHCP拿到其他IP,策略还是一样。


防火墙产品介绍(可略过):

防火墙大致分为软件防火墙和硬件防火墙两类,一般常用的都是硬件防火墙。软件防火墙如微软的TMG。硬件防火墙的品牌就较多了,国外知名的有Checkpoint,Juniper,PALoalto,Cisco、fortinet(飞塔 )等,国内知识的有天融信、山石、华为等。


下面正式进入今天的主题:Cisco IOS 防火墙


拓扑图如下:

将路由器打造成防火墙之IOS精典防火墙_第1张图片


基本配置:

R1配置:

R1(config)#int f0/0

R1(config-if)#ip add 12.1.1.1 255.255.255.0

R1(config-if)#no shut

R1(config-if)#router rip 

R1(config-router)#ver 2

R1(config-router)#no auto

R1(config-router)#net 12.0.0.0


R2配置:

Router(config)#host R2

R2(config)#int f0/0

R2(config-if)#ip add 12.1.1.2 255.255.255.0

R2(config-if)#no shut

R2(config-if)#int f1/0

R2(config-if)#ip add 23.1.1.2 255.255.255.0

R2(config-if)#no shut

R2(config-if)#router rip 

R2(config-router)#ver 2

R2(config-router)#no auto

R2(config-router)#net 12.0.0.0

R2(config-router)#ver 23.0.0.0


R3配置:

Router(config)#host R3

R3(config)#int f1/0

R3(config-if)#ip add 23.1.1.3 255.255.255.0

R3(config-if)#no shut

R3(config-if)#router rip 

R3(config-router)#ver 2

R3(config-router)#no auto

R3(config-router)#net 23.0.0.0

R3(config)#line vty 0 4

R3(config-line)#no login


防火墙配置:

  1. 在防火墙出接口配置一条Deny any的ACL,防止由外部始发的流量访问内部网络(如果内网有服务器发布到外网,需要在ACL中进行放行)

  2. 在内部网络的流量访问外部网络时候配置监测,可以在内部接口入方向或外部接口出方向配置监测。推荐在外接口的出方向做inspect,这样可以不用考虑inside区域接口的数量,都能够监测到。

  3. 配置全局参数(可选)


配置要求:

R1能够ping通R3,不能telnetR3。


配置前测试:

R1#ping 23.1.1.3

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 92/99/116 ms

R1#telnet 23.1.1.3

Trying 23.1.1.3 ... Open


R3>


R2 CBAC配置

R2(config)#ip access-list extended outside-acl

R2(config-ext-nacl)#deny ip any any

R2(config)#int f1/0

R2(config-if)#ip access-group outside-acl in

配置完上述命令,R1再次telnetR3


[Connection to 23.1.1.3 closed by foreign host]

R1#telnet 23.1.1.3

Trying 23.1.1.3 ... 

% Connection timed out; remote host not responding

 

发现无法telnet通R3,还一正处于一种卡着的状态。其实telnet的数据包是能够发出去的,并且已经到达了R3,但是R3回来的数据包被在R2入方向的ACL阻止了,因此导致telnet超时。

继续配置第二步,对数据包进行检测:

R2(config)#ip inspect name outside.inspect tcp

R2(config)#ip inspect name outside.inspect udp

R2(config-if)#int f1/0

R2(config-if)#ip inspect outside.inspect out 

再次telnet进行测试,已经可以telnet通R3了。

R1#telnet 23.1.1.3

Trying 23.1.1.3 ... Open

R3>

通过show命令进行查看 

R2#show ip inspect sessions 

Established Sessions

 Session 682C3818 (12.1.1.1:30018)=>(23.1.1.3:23) tcp SIS_OPEN

我们再来进行PING测试,发现PING不通,这是因为没有配置针对ICMP的检测。

R1#ping 23.1.1.3

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:

.....

Success rate is 0 percent (0/5)

配置ICMP监测:

R2(config)#ip inspect name outside.inspect icmp 

再次测试:

R1#ping 23.1.1.3

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 76/98/116 ms

show ip inspect查看:

R2#show ip inspect sessions 

Established Sessions

 Session 682C3818 (12.1.1.1:8)=>(23.1.1.3:0) icmp SIS_OPEN

注意:虽然配置了针对TCP和UDP的检测,但只能单信道的一些协议生效,如果是FTP、SIP等多协议的,还需要对它们进行专门的监测。

配置如下:

R2(config)#ip inspect name outside.inspect ftp 

R2(config)#ip inspect name outside.inspect sip

这样配置只能监控FTP默认21端口,假设FTP服务器更改端口为2121则无法监测了。下面引入技术PAM(Port-To-ApplicationMapping),通过这个技术,为应用定义端口号。例如我公司里面21和2121都是FTP,配置如下:

R2(config)#ip port-map ftp port tcp 21 2121

通过show ip port map来查看已有的映射关系。


思科IOS CBAC防火墙现在已有不怎么使用了,IOS Zone-Based Firewall更加灵活好用和专业。