访问控制列表-细说ACL那些事儿(ACL应用篇)
1、ACL应用范围
通过前两期的ACL理论学习,大家知道ACL并不能单独完成控制网络访问行为或者限制网络流量的效果,而是需要应用到具体的业务模块才能实现上述功能。
那么ACL到底可以应用在哪些业务中呢?
小编总结了一下,ACL应用的业务模块非常多,但主要分为以下四类:
业务分类 |
应用场景 |
涉及业务模块 |
登录控制 | 对交换机的登录权限进行控制,允许合法用户登录,拒绝非法用户登录,从而有效防止未经授权用户的非法接入,保证网络安全性。
例如,一般情况下交换机只允许管理员登录,非管理员用户不允许随意登录。这时就可以在Telnet中应用ACL,并在ACL中定义哪些主机可以登录,哪些主机不能。 |
Telnet、SNMP、FTP、 TFTP、SFTP、HTTP |
对转发的报文进行过滤 | 对转发的报文进行过滤,从而使交换机能够进一步对过滤出的报文进行丢弃、修改优先级、重定向、IPSEC保护等处理。
例如,可以利用ACL,降低P2P下载、网络视频等消耗大量带宽的数据流的服务等级,在网络拥塞时优先丢弃这类流量,减少它们对其他重要流量的影响。 |
QoS流策略、NAT、IPSEC |
对上送CPU处理的报文进行过滤 | 对上送CPU的报文进行必要的限制,可以避免CPU处理过多的协议报文造成占用率过高、性能下降。
例如,发现某用户向交换机发送大量的ARP攻击报文,造成交换机CPU繁忙,引发系统中断。这时就可以在本机防攻击策略的黑名单中应用ACL,将该用户加入黑名单,使CPU丢弃该用户发送的报文。 |
黑名单、白名单、
用户自定义流 |
路由过滤 | ACL可以应用在各种动态路由协议中,对路由协议发布和接收的路由信息进行过滤。
例如,可以将ACL和路由策略配合使用,禁止交换机将某网段路由发给邻居路由器。 |
BGP、IS-IS、OSPF、
OSPFv3、RIP、RIPng、 组播协议 |
2、ACL业务模块的处理机制
各类ACL应用的业务模块对命中/未命中ACL的处理机制是各不相同的。
例如,在流策略中应用ACL时,如果ACL中存在规则但报文未匹配上,该报文仍可以正常通过;但在Telnet中应用ACL,这种情况下,该报文就无法正常通过了。
再如,在黑名单中应用ACL时,无论ACL规则配置成permit还是deny,只要报文命中了规则,该报文都会被系统丢弃,其他模块却不存在这种情况。
所以,大家在配置ACL规则并应用到业务模块中时,一定要格外小心。
为了方便大家查阅,小编特地将常用ACL业务模块的处理机制进行了整理。
业务模块 |
匹配上了permit规则 | 匹配上了deny规则 | ACL中配置了规则,但未匹配上任何规则 | ACL中没有配置规则 | ACL未创建 | |
Telnet |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
HTTP |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
SNMP |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
FTP |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
TFTP |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
SFTP |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) | |
流策略 |
流行为是permit时:permit(允许通过)
流行为是deny时:deny(丢弃报文) |
deny(丢弃报文) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | |
NAT |
permit(进行NAT转换) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | |
IPSEC |
permit(数据流经过IPSec处理后再转发) | 不允许出现此情况 | permit(功能不生效,按照原转发方式进行转发) | 不允许出现此情况 | 不允许出现此情况 | |
本机防攻击策略 |
白名单 | permit(CPU优先处理) | deny(丢弃报文) | permit (功能不生效,正常上送报文) | permit(功能不生效,正常上送报文) | permit(功能不生效,正常上送报文) |
黑名单 |
deny(丢弃报文) |
deny(丢弃报文) |
permit (功能不生效,正常上送报文) |
permit (功能不生效,正常上送报文) |
permit (功能不生效,正常上送报文) |
|
用户自定义流 | 用户自定义流的处理动作是deny时:deny(丢弃报文)
动作是car时:permit(进行CAR限速) |
deny(丢弃报文) | permit (功能不生效,按照原转发方式进行转发) | permit (功能不生效,正常上送报文) | permit (功能不生效,正常上送报文) | |
路由 |
Route Policy | 匹配模式是permit时:permit(允许执行路由策略)
匹配模式是deny时: deny(不允许执行路由策略) |
deny(功能不生效,不允许执行路由策略) | deny(功能不生效,不允许执行路由策略) | permit(对经过的所有路由生效) | deny(功能不生效,不允许执行路由策略) |
Filter Policy | permit(允许发布或接收该路由) | deny(不允许发布或接收该路由) | deny(不允许发布或接收该路由) | deny(不允许发布或接收路由) | permit(允许发布或接收路由) | |
组播 |
igmp-snooping ssm-policy | permit(允许加入SSM组播组范围) | deny(禁止加入SSM组地址范围) | deny(禁止加入SSM组地址范围) | deny(禁止加入SSM组地址范围,所有组都不在SSM组地址范围内) | deny(禁止加入SSM组地址范围,只有临时组地址范围232.0.0.0~232.255.255.255在SSM组地址范围内) |
igmp-snooping group-policy | 配置了default-permit时:permit(允许加入组播组)
未配置default-permit: permit(允许加入组播组) |
配置了default-permit时:deny(禁止加入组播组)
未配置default-permit:deny (禁止加入组播组) |
配置了default-permit时:permit(允许加入组播组)
未配置default-permit:deny(禁止加入组播组) |
配置了default-permit时:permit(允许加入组播组)
未配置default-permit:deny(禁止加入组播组) |
配置了default-permit时:permit(允许加入组播组)
未配置default-permit:deny(禁止加入组播组) |
3、ACL应用方式
每个业务模块的ACL应用方式,风格也是各不相同。为此,小编同样进行了一番整理,供大家参考查阅。
业务模块 |
ACL应用方式 | 可使用的ACL编号范围 | |
Telnet |
方式一:
系统视图下执行命令telnet [ ipv6 ] serveracl acl-number 方式二: a、执行命令user-interface vty first-ui-number [ last-ui-number ],进入VTY用户界面视图 b、执行命令acl [ ipv6 ] acl-number{inbound | outbound } |
2000~3999 | |
HTTP |
系统视图下执行命令http acl acl-number | 2000~3999 | |
SNMP |
SNMPv1和SNMPv2c:
系统视图下执行命令snmp-agent acl acl-number 或snmp-agent community { read |write } { community-name | ciphercommunity-name } [ mib-view view-name | acl acl-number ] * SNMPv3: 系统视图下执行命令snmp-agent acl acl-number、snmp-agent group v3group-name { authentication | privacy| noauthentication } [ read-view read-view| write-view write-view | notify-viewnotify-view ]* [ acl acl-number ]或snmp-agent usm-user v3 user-name[ groupgroup-name | acl acl- number ]* |
2000~2999 | |
FTP |
系统视图下执行命令ftp [ ipv6 ] acl acl-number | 2000~3999 | |
TFTP |
系统视图下执行命令tftp-server [ ipv6 ]aclacl-number | 2000~3999 | |
SFTP |
方式一:
系统视图下执行命令ssh [ ipv6 ] serveraclacl-number 方式二: a、执行命令user-interface vty first-ui-number [ last-ui-number ],进入VTY用户界面视图 b、执行命令acl [ ipv6 ] acl-number{inbound | outbound } |
2000~3999 | |
流策略 |
a、 系统视图下执行命令traffic classifierclassifier-name [ operator { and | or} ] [ precedence precedence-value],进入流分类视图。
b、执行命令if-match acl { acl-number |acl-name },配置ACL应用于流分类。 c、 系统视图下执行命令traffic behaviorbehavior–name,定义流行为并进入流行为视图。 d、配置流动作。报文过滤有两种流动作:deny 或permit。 e、 系统视图下执行命令traffic policypolicy-name [ match-order { auto |config } ],定义流策略并进入流策略视图。 f、 执行命令classifier classifier-namebehavior behavior-name,在流策略中为指定的流分类配置所需流行为,即绑定流分类和流行为。在系统视图、接口视图或VLAN视图下,执行命令traffic-policy policy-name{ inbound| outbound },应用流策略。 |
ACL:2000~5999
ACL6:2000~3999 |
|
NAT |
方式一:
a、 系统视图下执行命令nat address-group group-index start-addressend-address,配置公网地址池。 b、 执行命令interface interface-typeinterface-number.subnumber,进入子接口视图。 c、 执行命令nat outbound acl-numberaddress-group group-index [ no-pat ],,配置带地址池的NAT Outbound。 方式二: a、 系统视图下执行命令interfaceinterface-type interface-number.subnumber,进入子接口视图。 b、 执行命令nat outbound acl-number,配置Easy IP。 |
2000~3999 | |
IPSEC |
方式一:
a、 系统视图下执行命令ipsec policypolicy-name seq-number manual,创建手工方式安全策略,并进入手工方式安全策略视图。 b、 执行命令security acl acl-number,在安全策略中引用ACL。 方式二: a、 系统视图下执行命令ipsec policypolicy-name seq-number isakmp,创建IKE动态协商方式安全策略,并进入IKE动态协商方式安全策略视图。 b、 执行命令security acl acl-number,在安全策略中引用ACL。 方式三: a、 系统视图下执行命令ipsec policy-template template-name seq-number,创建策略模板,并进入策略模板视图。 b、 执行命令security acl acl-number,在安全策略中引用ACL。 c、 系统视图下执行命令ipsec policypolicy-name seq-number isakmptemplatetemplate-name,在安全策略中引用策略模板。 |
3000~3999 | |
本机防攻击策略 |
白名单 | a、 系统视图下执行命令cpu-defend policypolicy-name,创建防攻击策略并进入防攻击策略视图。
b、 执行命令whitelist whitelist-id aclacl-number,创建自定义白名单。 c、 系统视图下执行命令cpu-defend-policypolicy-name [ global ],或槽位视图下执行命令cpu-defend-policypolicy-name,应用防攻击策略。 |
2000~4999 |
黑名单 | a、 系统视图下执行命令cpu-defend policypolicy-name,创建防攻击策略并进入防攻击策略视图。
b、 执行命令blacklist blacklist-id aclacl-number,创建黑名单。 c、 系统视图下执行命令cpu-defend-policypolicy-name [ global ],或槽位视图下执行命令cpu-defend-policypolicy-name,应用防攻击策略。 |
2000~4999 | |
用户自定义流 | a、 系统视图下执行命令cpu-defend policypolicy-name,创建防攻击策略并进入防攻击策略视图。
b、 执行命令user-defined-flow flow-idacl acl-number,配置用户自定义流。 c、 系统视图下执行命令cpu-defend-policypolicy-name [ global ],或槽位视图下执行命令cpu-defend-policypolicy-name,应用防攻击策略。 |
2000~4999 | |
路由 |
Route Policy | a、 系统视图下执行命令route-policyroute-policy-name { permit | deny }node node,创建Route-Policy,并进入Route-Policy视图。
b、 执行命令if-match acl { acl-number| acl-name },配置基于ACL的匹配规则;或者配置apply子句为路由策略指定动作,如执行命令apply cost [ + | –] cost,设置路由的开销值等。 c、 应用路由策略。路由协议不同,命令行不同。例如针对OSPF协议,可以在OSPF视图下,执行命令import-route { limit limit-number | { bgp [permit-ibgp ] | direct | unr | rip [process-id-rip ] | static | isis[process-id-isis ] | ospf [ process-id-ospf ] } [ cost cost | type type | tagtag | route-policyroute-policy-name ]* },引入其他路由协议学习到的路由信息;针对RIP协议,可以在RIP视图下,执行命令import-route { {static | direct | unr } | { { rip | ospf |isis } [ process-id ] } } [ cost cost |route-policyroute-policy-name ]*。 |
2000~2999 |
Filter Policy | 路由协议不同,过滤方向不同,命令行不同。例如针对RIP协议,对引入的路由进行过滤,可以在RIP视图下执行命令filter-policy { acl-number | acl-name acl-name | ip-prefix ip-prefix-name [ gateway ip-prefix-name ] }import [ interface-type interface-number];对发布的路由进行过滤,可以在RIP视图下执行命令filter-policy {acl-number | acl-name acl-name | ip-prefix ip-prefix-name } export [ protocol [ process-id ] | interface-type interface-number ] 。 | 2000~2999 | |
组播 |
igmp-snooping ssm-policy | VLAN视图下执行命令igmp-snooping ssm-policy basic-acl-number | 2000~2999 |
igmp-snooping group-policy | VLAN视图下执行命令igmp-snooping group-policy acl-number [ versionversion-number ] [ default-permit ] | 2000~3999 |
好啦,有了小编整理的这两张表做参考,配置ACL应用案例就可以轻松搞定啦!下面就跟随小编一起,动手试试吧~
4、ACL应用案例
案例1:使用ACL限制Telnet访问权限
为了保障远程维护网络设备的安全性,现要求只有管理员(源地址是10.1.1.1/32)才能telnet登录交换机,其他人不允许登录。
要实现这个需求,一定是在Telnet模块中应用ACL。那么该如何配置ACL规则呢?大家是不是认为应该先配置一条permit规则允许10.1.1.1/32登录,然后再配置多条deny规则拒绝其他地址登录呢?其实大可不必。
查阅Telnet模块的报文处理机制参照表,当ACL中存在规则的情况下,如果报文匹配上permit规则,则该地址允许登录设备;如果未匹配上规则,该地址被拒绝登录设备。
业务模块 |
匹配上了permit规则 | 匹配上了deny规则 | ACL中配置了规则,但未匹配上任何规则 | ACL中没有配置规则 | ACL未创建 |
Telnet |
permit(允许登录) | deny(拒绝登录) | deny(拒绝登录) | permit(允许登录) | permit(允许登录) |
因此,我们仅需配置一条允许10.1.1.1/32地址通过的permit规则即可,10.1.1.1/32以外的地址的报文因匹配不上任何规则会被拒绝登录。
案例1关键配置的配置文件如下:
#
telnet server port 1025
#
acl number 2001 //创建基本ACL,编号为2001
rule 5 permit source 10.1.1.1 0 //仅允许10.1.1.1/32登录
#
aaa
local-user admin1234 password irreversible-cipher ****** //登录密码用******代替,请根据实际情况配置
local-user admin1234 privilege level 3
local-user admin1234 service-type telnet
#
user-interface maximum-vty 8
user-interface vty 0 7
acl 2001 inbound //对通过用户界面的登录进行限制
案例2:使用基于时间的ACL限制用户访问服务器权限
某企业禁止市场部门和研发部门在上班时间(8:00至17:30)访问工资查询服务器(IP地址为10.10.4.9/32),而总裁办公室不受限制,可以随时访问。
分析上述需求,实际上就是要对源IP=10.10.1.0/24访问目的IP=10.10.4.9/32的转发流量、以及源IP=10.10.2.0/24访问目的IP=10.10.4.9/32的转发流量,在特定时间内进行限制,其他访问流量则不受限制,所以我们可以通过在流策略中应用ACL来解决。
1) 首先,查阅流策略模块的ACL处理机制参照表,为需要过滤的报文配置ACL规则。
当ACL中存在规则的情况下,如果报文匹配上deny规则,则被拒绝通过;如果未匹配上,则会被正常转发。因此,根据上述需求,我们只需要针对两类需限制的流量,分别配置deny规则即可。其他地址访问服务器的报文因匹配不上任何规则而被正常转发,不受限制。
业务模块 |
匹配上了permit规则 | 匹配上了deny规则 | ACL中配置了规则,但未匹配上任何规则 | ACL中没有配置规则 | ACL未创建 |
流策略 |
流行为是permit时:
permit(允许通过) 流行为是deny时: deny(丢弃报文) |
deny(丢弃报文) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) |
2) 其次,我们需要注意,需求中强调了是在一定时间范围内进行流量限制,所以仅仅进行流量控制是不可行的,还必须在规则中引入生效时间段。
我们定义一个时间段名称为control-time,并配置该时间段为8:00至17:30,然后在规则中指定time- name参数为control-time,即把生效时间段与ACL关联起来了。
3) 最后,我们再查阅流策略ACL应用方式参照表,将ACL应用到流策略中。
根据上述需求,我们为市场部和研发部分别配置两个流分类c_market、c_rd,然后将配置的两条deny规则对应的ACL应用到两个流分类中,并配置两个流行为动作为deny。同时为市场部和研发部分别创建流策略p_market和p_ rd,并将流分类和流行为与流策略绑定,最后再在接口上应用流策略。
在选择流策略的应用方向时,一定要注意,需求中是要对源自市场部和研发部的报文进行过滤,即对从接口GE1/0/0和接口GE1/0/1进入交换机的报文进行过滤,所以流策略的应用方向必须指定为入方向(inbound)。如果应用方向配置成了出方向(outbound),那就达不到过滤的效果了。
小编提醒,上述案例我们还可以通过这样的配置来实现需求:在一条ACL中配置两条规则,在一个流分类中应用这条ACL,配置一个流行为动作为deny,最后创建并应用一个流策略。这样配置起来更加简洁和方便,但同时又带来了新的问题:若后续企业增加了市场部对其他服务器的访问限制,这时该如何处理呢?
如果之前市场部和研发部使用的是同一个ACL、流分类、流行为和流策略(这整套ACL的相关配置小编统称为“ACL策略配置”),那么这时只能重新再为市场部配置一条新的ACL策略;如果之前两个部门使用的是不同的ACL策略,那么现在只需在市场部的ACL策略中,增加一条ACL规则即可解决。所以,为各个部门部署独立的ACL策略,可以让您在后续需求扩充或发生改变时,更加方便的维护网络配置。小编建议大家能把眼光放的更加长远一些,不要只顾眼前配置的简单噢~
案例2关键配置的配置文件如下:
time-range control-time 08:00 to 17:30 working-day //配置生效时间段,工作日8:00至17:30 # acl number 3002 rule 5 deny ip source 10.10.1.0 0.0.0.255 destination 10.10.4.9 0 time-range control-time //限制市场部人员在上班时间不能访问工资服务器 # acl number 3003 rule 5 deny ip source 10.10.2.0 0.0.0.255 destination 10.10.4.9 0 time-range control-time //限制研发部人员在上班时间不能访问工资服务器 # traffic classifier c_market operator or precedence 5 //为市场部配置基于ACL的流分类 if-match acl 3002 //对匹配ACL 3002的报文(即源地址是市场部IP的报文)进行分类 traffic classifier c_rd operator or precedence 10 //为研发部配置基于ACL的流分类 if-match acl 3003 //对匹配ACL 3003的报文(即源地址是研发部IP的报文)进行分类 # traffic behavior b_market deny //配置流行为,拒绝匹配上规则的报文通过 traffic behavior b_rd deny //配置流行为,拒绝匹配上规则的报文通过 # traffic policy p_market match-order config //为市场部配置流策略 classifier c_market behavior b_market //在流策略中绑定流分类和流行为 traffic policy p_rd match-order config //为研发部配置流策略 classifier c_rd behavior b_rd //在流策略中绑定流分类和流行为 # interface GigabitEthernet1/0/0 port link-type access port default vlan 10 traffic-policy p_market inbound //接口下应用流策略(市场部从接口GE1/0/0接入) # interface GigabitEthernet1/0/1 port link-type access port default vlan 20 traffic-policy p_rd inbound //接口下应用流策略(研发部从接口GE1/0/1接入) |
结束了ACL应用案例的配置,本期ACL应用篇也要完结了。限于篇幅问题,小编只能为大家讲解两个最为典型的ACL案例。好学的你,一定觉得不过瘾吧!
更多博客文章,请访问我的独立博客:一日程博客:http://www.yiricheng.cn/