5.1 实验目的:
1. 熟悉路由器的包过滤的核心技术:访问控制列表;
2. 掌握访问控制列表的相关知识;
3. 掌握访问控制列表的应用,灵活设计防火墙;
4. 熟悉地址转换特性。
5.2 实验环境:
在实际的企业网或者校园网络中为了保证信息安全以及权限控制,都需要分别对待网内的用户群。有的能够访问外部,有的则不能。这些设置往往都是在整个网络的出口或是入口(一台路由器上)进行的。所以在实验室我们用一台路由器(RTA)模拟整个企业网,用另一台路由器(RTB)模拟外部网。具体实验环境如下:
5.3 实验步骤:
5.3.1 实验准备
按照上面的组网图建立实验环境,然后按照如下规则分配IP地址。
路由器接口IP地址:
RTA RTB
S0 192.0.0.1/24 192.0.0.2/24
E0 202.0.0.1/24 202.0.1.1/24
主机的地址和缺省网关:
PCA PCB PCC PCD PCE
IP/MASK 202.0.0.2/24 202.0.0.3/24 202.0.0.4/24 202.0.1.2/24 202.0.1.3/24
GATEWAY 202.0.0.1 202.0.0.1 202.0.0.1 202.0.1.1 202.0.1.1
5.3.2 标准访问控制列表
标准访问控制列表只使用数据包的源地址来判断数据包,所以它只能以源地址来区分数据包,源相同而目的不同的数据包也只能采取同一种策略。所以利用标准访问控制列表,我们只能粗略的区别对待网内的用户群,那些主机能访问外部网,那些不能。我们来完成如下实验,看看标准访问控制列表是如何完成该功能的。在实验环境中,我们如果只允许IP地址为202.0.0.2的主机访问外部网络,则只需在路由器上进行如下配置即可:
RTA#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
firewall enable //启动防火墙功能
access-list normal 1 permit 202.0.0.2 0.0.0.0 //允许特定主机访问外部网络
access-list normal 1 deny 202.0.0.0 0.0.0.255 //禁止其他主机访问外部网络
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
ip access-group 1 out //使访问列表生效
!
interface Serial1
encapsulation ppp
!
exit
router rip //启动路由协议
network all
!
Now create configuration...
Current configuration
!
version 1.5.6
hostname RTB
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.1.1 255.255.255.0
!
interface Serial0
encapsulation ppp
ip address 192.0.0.2 255.255.255.0
!
interface Serial1
clock-select DTECLK1
encapsulation ppp
!
exit
router rip
network all
!
注意:在配置路由器时还需要配置防火墙的缺省工作过滤模式(firewall default {permit|deny}),因该命令配置与否在配置信息中没有显示,所以要特别注意。Quidway系列路由器防火墙默认过滤模式是允许。在此我们也设为允许。(您可以设为禁止,看看实验现象。此时有可能路由器不能发现动态路由,因为路由协议也是用IP包去发现路由的,禁止了所有IP包的传送当然不可能生成动态路由。)完成上述配置之后,用网络测试命令测试PCA是不是真的能够访问外部网络,PCB等主机是不是不能访问外部网络呢?
在设置防火墙时,一般选择在路由器的出口,可以使用ip access-group 101 out来使防火墙生效,但是如果改为ip access-group 101 in呢?试试会是什么现象,是不是任何主机都可以访问外部网络呢?答案是肯定的。那么我们如果是在E0口使用ip access-group 101 in命令呢?现象就如同开始一样了。现在明白in和out的意义了吗?我们甚至可以在RTB上来完成该项功能,完成如下配置即可达到同样的效果:
RTA#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
!
interface Serial1
encapsulation ppp
!
exit
router rip
network all
!
Now create configuration...
Current configuration
!
version 1.5.6
firewall enable
access-list normal 1 permit 202.0.0.2 0.0.0.0
access-list normal 1 deny 202.0.0.0 0.0.0.255
hostname RTB
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.1.1 255.255.255.0
!
interface Serial0
encapsulation ppp
ip address 192.0.0.2 255.255.255.0
ip access-group 1 in
!
interface Serial1
clock-select DTECLK1
encapsulation ppp
!
exit
router rip
network all
!
从上面的实验可以看出in和out两个方向不同作用以及使用不同接口的配置差异了,所以在设置防火墙时,我们需要仔细分析,灵活运用,选择最佳接口,最简单的配置完成最完善的功能。
5.3.3 扩展访问控制列表
扩展访问控制列表不仅使用数据包的源地址作为判断条件,还使用目的地址、协议号为判断条件。所以它可以更加详细的区分数据包,更好的控制用户访问。下面我们先应用扩张访问控制列表来完成前面标准访问控制列表完成的功能,以便比较。在路由器上的具体配置如下:
RTA(config)#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
firewall enable
access-list normal 101 permit ip 202.0.0.2 0.0.0.0 202.0.1.0 0.0.0.255
access-list normal 101 deny ip 202.0.0.0 0.0.0.255 202.0.1.0 0.0.0.255
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
ip access-group 101 out
!
interface Serial1
encapsulation ppp
!
exit
router rip
network all
!
Now create configuration...
Current configuration
!
version 1.5.6
hostname RTB
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.1.1 255.255.255.0
!
interface Serial0
encapsulation ppp
ip address 192.0.0.2 255.255.255.0
!
interface Serial1
clock-select DTECLK1
encapsulation ppp
!
exit
router rip
network all
!
此时用网络测试命令ping测试主机的通信状况,应该和前面一样。刚才提到的扩展访问控制列表可以更加详细的控制访问,那么究竟怎样才能实现这项要求呢?在此我们只需要把access-list normal 101 permit ip 202.0.0.2 0.0.0.0 202.0.1.0 0.0.0.255换成access-list normal permit ip 202.0.0.2 0.0.0.0 202.0.1.2 0.0.0.0既可以控制主机PCA只能访问主机PCD,而使用标准访问控制列表是不能实现的。在访问控制列表命令中还有normal字段,这是区别于special的,即我们可以分时间段进行不同的访问控制策略。此时需要允许时间段控制(timerange enable)和设定特定时间段(settr begin-time end-time)。在此不再详细阐述,学员可以自行完成。
上面的实验都是只有一条列表,在同一列表中有多条规则,多条规则之间采用深度优先的原则,即描述的地址范围越小,优先级越高,越先考虑。但是有时候需要在一个接口上使用多条列表,以完成更丰富的功能。但是列表之间有时什么样的规则呢?还是深度优先吗?
让我们看看下面的实验,RTB不作任何改动,RTA配置如下:
RTA(config-if-Serial0)#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
firewall enable
access-list normal 101 permit ip 202.0.0.2 0.0.0.0 202.0.1.0 0.0.0.255
access-list normal 101 deny ip 202.0.0.0 0.0.0.255 202.0.1.0 0.0.0.255
access-list normal 102 permit ip 202.0.0.3 0.0.0.0 202.0.1.0 0.0.0.255
access-list normal 102 deny ip 202.0.0.0 0.0.0.255 202.0.1.0 0.0.0.255
access-list normal 103 deny ip 202.0.0.2 0.0.0.0 202.0.1.0 0.0.0.255
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
ip access-group 103 out
ip access-group 102 out
ip access-group 101 out
!
interface Serial1
encapsulation ppp
!
exit
router rip
network all
!
此时主机PCA也不能与外部网络通信了,因为首先匹配列表103,发现不允许通过,则拒绝通过。此时列表102、101不启作用。但是主机PCB可以与外部网通信。列表101不启作用。如果取消列表102的作用(no ip access-group 102 out),则PCB又不能与外部网络通信了。所以我们可以得出如下结论:多条列表时,先匹配列表序号大的规则,如果匹配则按该规则处理数据包,如果不匹配则匹配较小序号的列表,直至最后。所以在编写列表时要多加注意它们之间的先后顺序。
5.3.4 地址转换(NAT)
由于IP地址紧缺,企业网常常使用的都是私有地址,这给访问外部网络带来了麻烦。因为很可能存在两个IP地址一样的主机访问同一个网络而产生冲突,无法正常完成数据传输。所以我们企业网内部主机访问外部网络时,需要进行地址转换,在公网上使用公有地址进行数据传输。
地址转换有两种方式,一种是通过与接口关联,使用物理接口的IP地址作为转换后的公有地址。另一种是通过地址池来完成地址转换,转换时可以任意从地址池中选取一个地址进行转换。让我们先来看看第一种方式。使用RTA的S0口的IP地址作为公有地址,路由器的具体配置如下:
RTA(config-if-Serial0)#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
logging console
firewall enable
access-list normal 101 permit ip 202.0.0.2 0.0.0.0 any
//允许特定主机访问外部网络
access-list normal 101 permit ip 202.0.0.3 0.0.0.0 any
//允许内部服务器访问外部网络
access-list normal 101 deny ip any any
//禁止所有包通过
access-list normal 102 permit tcp 202.0.1.2 0.0.0.0 192.0.0.1 0.0.0.0
//允许特定外部主机访问内部服务器
access-list normal 102 deny tcp any 192.0.0.1 0.0.0.0
//禁止其他外部用户访问内部服务器
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
ip access-group 101 in
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
nat inside 102 interface //使列表与接口关联
nat server global 192.0.0.1 ftp inside 202.0.0.3 ftp tcp //内部ftp服务器
ip access-group 102 in
!
interface Serial1
encapsulation ppp
!
exit
router rip
network all
!
Now create configuration...
Current configuration
!
version 1.5.6
hostname RTB
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.1.1 255.255.255.0
!
interface Serial0
encapsulation ppp
ip address 192.0.0.2 255.255.255.0
!
interface Serial1
clock-select DTECLK1
encapsulation ppp
!
exit
router rip
network all
!
在上面的配置中完成了内部向外部网络提供ftp服务器,允许内部特定主机PCA能够访问外部网络,允许外部特定用户PCD可以访问ftp服务器。在PCB上提供ftp服务,然后测试是否满足设计需求。我们还可以使用监控与维护命令显示地址转换状态,如:
RTA#show nat
Nat Pool Information:
ddd : from 192.0.0.3 to 192.0.0.4
Interface GlobalAddr GlobalPort InsideAddr InsidePort Pro
Serial0 192.0.0.1 21(ftp) 202.0.0.3 21(ftp) 6(tcp)
Serial0: Access-list(102) --- Interface
tcp ---- timeout value is 240 (seconds)
udp ---- timeout value is 40 (seconds)
icmp ---- timeout value is 20 (seconds)
从显示信息可以看到地址转换对应表,地址池信息以及地址转换有效时间。我们还可以根据需要更改地址转换有效时间(nat timeout)。还可以查看nat的调试信息如:
RTA#debug nat packet
Debugging NAT packet is on
RTA#
NAT In:find a TCP packet to server(192.0.0.1:21---->202.0.0.3:21)
NAT_Forward:TCP packet to inside server(202.0.0.3:21----->192.0.0.1:21)
NAT In:find a TCP packet to server(192.0.0.1:21---->202.0.0.3:21)
NAT_Forward:TCP packet to inside server(202.0.0.3:20----->192.0.0.1:20)
NAT_Forward:TCP packet to inside server(202.0.0.3:21----->192.0.0.1:21)
NAT In:find a TCP packet to server(192.0.0.1:20---->202.0.0.3:20)
可以通过此命令检查是否有数据包被转换,地址是如何转换的。这对我们的调试有很大帮助。
第二种方式是地址池关联。该方式可以应用多个公有地址来完成地址转换,增大数据转换量。该方式的配置如下:(RTB不作改变)
RTA#show running-config
Now create configuration...
Current configuration
!
version 1.5.6
nat timeout tcp 300 //设定地址转换有效时间
nat pool 192.0.0.3 192.0.0.4 ddd //配置地址池
logging console
firewall enable
access-list normal 101 permit ip 202.0.0.2 0.0.0.0 any
access-list normal 101 permit ip 202.0.0.3 0.0.0.0 any
access-list normal 101 deny ip any any
access-list normal 102 permit tcp 202.0.1.2 0.0.0.0 192.0.0.3 0.0.0.0
access-list normal 102 deny tcp any 192.0.0.3 0.0.0.0
hostname RTA
!
interface Aux0
async mode interactive
encapsulation ppp
!
interface Ethernet0
speed auto
duplex auto
no loopback
ip address 202.0.0.1 255.255.255.0
ip access-group 101 in
!
interface Serial0
clock-select DTECLK1
encapsulation ppp
ip address 192.0.0.1 255.255.255.0
nat inside 102 pool ddd //将列表与地址池关联
nat server global 192.0.0.3 ftp inside 202.0.0.3 ftp tcp
ip access-group 102 in
!
interface Serial1
encapsulation ppp
!
exit
router rip
network all
!
完成上述配置后,测试功能需求,应该满足需要。注意在本实验中配置地址池时是使用的开始地址和结束地址,所以地址池中的地址需要且必须连续,且最多只能定义64个地址。
小结
关于防火墙我们主要讲述了标准访问控制列表、扩展访问控制列表以及地址转换。我们在完成实验时要多注意其中的区别与联系,特别是不同的使用场合。还有多条规则,多条列表的作用原则的掌握。