Mr.Chan

导航

网络层访问权限控制技术 ACL详解(三) ACL执行顺序

“使用ACL技术对网络访问进行精细化控制”――ACL进阶配置

命名的IP ACL

由于最近服务器网段的机器老是被人用telnetrsh等手段进行攻击,我们只对员工开放web服务器(10.1.2.20)所提供的httpFTP服务器(10.1.2.22)提供的FTP服务和数据库服务器(10.1.2.211521)。好吧,我们着手进行配置,可是我们的ACL刚写到一半,发现前面写的几句好像有问题,一个no命令输进去,整个ACL都没了,唉,一切都得重来,难道就没有一个变通的办法么?有,这里我就需要用到:

命名的IP acl提供的两个主要优点是:

l         解决ACL号码不足的问题。

l         可以自由的删除ACL中的一条语句,而不必删除整个ACL

命名的ACL的主要不足之处在于无法实现在任意位置加入新的ACL条目。比如上面那个例子中,我们进行了如下的配置:

ip access-list extend server-protect

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

配置到这里,我们发现permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521这句配错了,我们得把它给取掉并重新配置,OK,我样可以简单的进行如下配置:

ip access-list extend server- protect

no permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.0.255 host 10.1.2.21 eq 1521

exit

int vlan 2

ip access-group server- protect

就可以了。现在对命名的IP access-list的配置方法解释如下:

ip access-list extend server-access-limitip access-list相当于使用编号的access-list中的access-list段。extend表明是扩展的ACL(对应地,standard表示标准的ACL)server-access-limitaccess-list的名字,相当于基于编号的ACL中的编号字段。

permit tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521这一段和使用编号的access-list的后半段的意义相同,都由操作和条件两段组成。

其实基于名字的IP ACL还有一个很好的优点就是可以为每个ACL取一个有意义的名字,便于日后的管理与维护。所以Ultra工作室强烈建议各位看官在实际工作中均使用命名的ACL

进一步完善对服务器数据的保护――ACL执行顺序再探讨

在服务器网段中的数据库服务器中存放有大量的市场信息,市场部门的人员不希望研发部门访问到数据库服务器,经过协商,同意研发部门的领导的机器(IP地址为10.1.6.33)可以访问到数据库服务器。这样,我们的服务器网段的的访问权限部分如下表所示:

协议

源地址

源端口

目的地址

目的端口

操作

TCP

10.1/16

所有

10.1.2.20/32

80

允许访问

TCP

10.1/16

所有

10.1.2.22/32

21

允许访问

TCP

10.1/16

所有

10.1.2.21/32

1521

允许访问

TCP

10.1.6/24

所有

10.1.2.21/32

1521

禁止访问

TCP

10.1.6.33/32

所有

10.1.2.21/32

1521

允许访问

IP

10.1/16

N/A

所有

N/A

禁止访问

于是,网管就在server-protect后面顺序加了两条语句进去,整个ACL变成了如下形式:
ip access-list extend server-protect

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521

permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521

做完之后发现根本没起到应有的作用,研发部门的所有机器还是可以访问到数据库服务器。这是为什么呢?

前面我们提到过,ACL的执行顺序是从上往下执行,一个包只要遇到一条匹配的ACL语句后就会停止后续语句的执行,在我们的这个ACL中,因为前面已经有了一条permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521语句。内部网上所有访问10.1.2.211521端口的在这儿就全部通过了,跟本不会到后面两句去比较。所以导致达不到我们的目的。应该把server-protect这个ACL按如下形式进行修改才能满足我们的要求:
ip access-list extend server-protect

permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521

deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

这个例子告诉我们在写ACL时,一定要遵循最为精确匹配的ACL语句一定要写在最前面的原则,只有这样才能保证不会出现无用的ACL语句。

posted on 2005-05-30 12:42  cunshen  阅读(1351)  评论(0编辑  收藏  举报