在很多人的观念中,路由器是路由器,防火墙是防火墙。路由器和防火墙都是可以作出口网关使用的,路由器作网关安全性差,防火墙安全性强。其实对于路由器和防火墙来说,他们可以算是一家人;同样作为网关,防火墙拥有路由功能,为何路由器不能有安全功能呢?对于路由器和防火墙来说,它们都是全才,只不过各自精通的领域不一样。路由器精通路由辅以防护,防火墙精通防护辅以路由。就跟我们网络工程师的一样,不能只懂网络不懂系统,而是要精通网络辅以系统,这才是最佳的选择。下面就介绍一下如何把一个普通的路由器变成防火墙来运行吧。
    懂点IOS安全的都知道,有一种传统的路由器防火墙叫做CBAC(context-based access control),也就是以ip inspect开头的那些命令,它提供了基于接口的流量保护。CBAC在流量过滤、流量检查、警告和审计蛛丝马迹、***检测等方面表现卓越。例如CBAC使用超时值和阈值确定会话的状态及其持续的时间.可清除不完全会话和闲置会话,用以对Dos进行检测和防护。但是CBAC的缺点就是会对所有穿过接口的流量进行相同的审查策略,无法精确控制防火墙策略,部署起来相对困难。
    针对这种问题,一种新的IOS防火墙应运而生,那就是ZFW(Zone-base Firewall)。这种防火墙改变了老式CBAC基于接口的配置模式,而是以区域为单位进行配置。就拿大家熟悉的防火墙来说,我们都知道分内部和外部区域,还有一个DMZ区域;ZFW跟硬件防火墙同理,也是按照这么分的,只是你可以自己决定哪个接口需要加进什么区域,以及每个区域的功能。自由程度很高,使用起来也很方便。下面就用一个实验来验证一下(本实验需要用到7200安全IOS或者L3IOU模拟器)。
    某公司有一台服务器,需要映射到外网让别人去访问。
 


其中具体需求如下:
1、只允许外网用户ping通服务器以及通过SSH登录服务器;
2、只允许内网用户ping通服务器以及通过telnet登录服务器;
3、内网用户可以自由访问外网;
4、服务器不能访问外网。
第一步:
首先保证服务器和PC能够ping通网关GW,然后在GW上做NAT,并保证内网PC可以ping通外网。这里网关的NAT地址池为100.1.1.2—100.1.1.5,另外服务器做静态映射,映射的公网IP为100.1.1.6。内网PC接口为F0/1,外网接口为S1/0。
GW:
access-list 1 permit any
ip nat pool cisco 100.1.1.2 100.1.1.5 netmask 255.255.255.0
ip nat inside source list 1 pool cisco overload
ip nat inside source static 172.16.1.2 100.1.1.6
ip route 0.0.0.0 0.0.0.0 Serial1/0
int f0/1
ip nat inside
int s1/0
ip nat outside
服务器开启SSH和telnet登录
Server:
ip domain name hujw.com
crypto key generate rsa
line vty 0 4
password cisco
login
transport input ssh telnet
第二步:
划分区域,并将相应接口加入区域。
这里我们划分三个区域,分别是private、internet和dmz。private对应内部主机,dmz对应服务器,internet对应外网。然后把相应接口加入这三个区域,其中服务器接口为F0/2。
GW:
zone security internet
zone security dmz
zone security private
int f0/1
zone-member security private
int f0/2
zone-member security dmz
int s1/0
zone-member security internet
第三步:
创建class-map,加入各区域需要用到的协议
首先是从内网访问外网的class-map。在ZFW中,默认是拒绝所有流量的。因为内网PC可以自由,所以可以用ACL匹配所有流量予以放行。这里使用之前创建的access-list 1。
class-map type inspect match-any pri-to-int
match access-group 1
其次是创建内网PC访问DMZ的策略。根据要求,只能ping以及telnet服务器,所以应该匹配icmp和telnet协议。
class-map type inspect match-any pri-to-dmz
match protocol icmp
match protocol telnet
最后是外网访问DMZ服务器的策略。根据要求,只能ping以及ssh服务器,所以应该匹配icmp和ssh协议。
class-map type inspect match-any int-to-dmz
match protocol ssh
match protocol icmp
第四步:
创建policy-map,应用刚才所创建的策略。
ZFW策略包括三种:pass、drop、inspect。Drop是默认行为,inspect是对流量进行审查,返回流量通过查看路由器的session表来决定是否允许进入。PASS行为不会跟踪连接或者流量的session,但是只允许单方向通过。也就是说,如果要配置PASS的话,就要在两个方向同时配上PASS。
分别创建private-to-dmz、private-to-internet、internet-to-dmz这三个策略去调用相应的class-map。
policy-map type inspect private-to-dmz
class type inspect pri-to-dmz
  inspect
class class-default
  drop

policy-map type inspect private-to-internet
class type inspect pri-to-int
  inspect
class class-default
  drop

policy-map type inspect internet-to-dmz
class type inspect int-to-dmz
  inspect
class class-default
drop
第五步:
将策略关联在接口上。
ZFW用的可不是普通的物理接口,它有着自己专用的接口,那就是zone-pair。在这里,物理接口的地位不再重要,它才是路由器真正的守卫!这里需要填写zone的源和目的区域名称,并且将policy-map应用在zone-pair里。
zone-pair security private-internet source private destination internet
service-policy type inspect private-to-internet

zone-pair security internet-dmz source internet destination dmz
service-policy type inspect internet-to-dmz

zone-pair security private-dmz source private destination dmz
service-policy type inspect private-to-dmz
第六步:
测试各个区域的功能。
测试内网PC对DMZ服务器的访问
clip_image002
发现服务器可以正常ping通和telnet访问。
测试外网PC对DMZ服务器的访问
clip_image002[7]
发现可以ping和ssh登录服务器,但是不能telnet服务器。
内网PC可以任意访问外网。
看,一台路由器已经变成了一台有模有样的防火墙了。虽然不是很专业,但是如果专业硬件防火墙对你的网络来说是杀鸡用牛刀的话,这种“业余”的防火墙就再适合不过啦!