ACL 和 FPM 有什么区别?请详细说明,但要以简单易懂的方式。
ACL 和 FPM 的区别
我假设您要比较Cisco Access Control Lists (ACL)和Cisco Flexible Packet Matching (FPM)。
数据包包含许多字段,例如:
- IP源地址
- IP目的地址
- TCP 源端口
- TCP 目的端口
- UDP 源端口
- UDP 目的端口
ACL
传统的ACL只能基于有限数量的字段允许或拒绝(上面列出了一些最常用的字段);这些领域在互联网上是众所周知的。然而,传统的ACL s不能过滤器内的IP数据包的有效载荷,例如,如果有人想阻止某些类型的Tibco的RV UDP组播负载,这是不可能与传统的ACL这样做。传统的ACL看起来像这样......
! Note: this ACL is only granular to a TCP port
access-list 102 permit tcp any any eq 80
access-list 102 permit tcp any any eq 443
access-list 102 permit tcp any any eq 23
access-list 102 permit tcp any any eq 25
access-list 102 permit tcp any any eq 110
access-list 102 deny ip any any log
!
interface FastEthernet0/0
ip access-group 102 in
FPM
然而,FPM可以阻止/允许单个数据包报头或有效载荷1内的任何位,只要为需要阻止或允许的字段加载了有效的PHDL文件。 FPM可以定义类和策略的层次结构,以对允许或拒绝的数据包实施非常精细的控制。
这是一个示例策略,取自FPM文档,它匹配Slammer Worm发送的 UDP 数据包。除非您通过单独的 IP 源地址阻止好的和坏的 SQL 流量,否则不可能使用ACL来阻止感染了Slammer Worm的主机。
load protocol disk2:ip.phdf
load protocol disk2:udp.phdf
!
class-map type stack match-all ip-udp
description "match UDP over IP packets"
match field ip protocol eq 0x11 next udp
!
class-map type access-control match-all slammer
description "match on slammer packets"
match field udp dest-port eq 0x59A
match field ip length eq 0x194
match start l3-start offset 224 size 4 eq 0x4011010
!
policy-map type access-control fpm-udp-policy
description "policy for UDP based attacks"
class slammer
drop
!
policy-map type access-control fpm-policy
description "drop worms and malicious attacks"
class ip-udp
service-policy fpm-udp-policy
!
interface GigabitEthernet0/1
service-policy type access-control input fpm-policy
尾注:
1 FPM检查单个IP包的的限制是不平凡的,因为这意味着它的可能规避FPM如果攻击设法跨多个IP片段,或TCP数据包(因为TCP流在重新组装拆分攻击签名接收者)。也就是说,只要您了解该技术的局限性,它仍然是一个非常强大的工具。
访问控制列表 (ACL) 是网络语句,它根据第一个匹配项允许或拒绝对给定条件集的访问。
标准 ACL 是最古老的 ACL 形式,以极其广泛的方式运行。它们仅基于单个 IP 地址进行匹配,并且由于这种有限的功能,它们在大多数情况下运行其他类型的速度要快得多;这没有考虑到基于硬件的加速。
假设我们想限制对单个主机的访问,下面是我们要做的。
rtr(config)# access-list 1 permit 10.1.1.100 0.0.0.0
随着扩展 ACL 的引入,此 ACL 功能得到了进一步完善。这允许您指定源和目标 IP 地址,以及端口号和一些其他参数(例如,tos、优先级等)。这提供的附加功能也有一个缺点:增加开销和数据包检查。
假设我们想进一步改进上述场景,以将该主机限制为单个 IP 并允许 HTTP 访问。
rtr(config)# access-list 199 permit tcp host 10.1.1.100 host 192.168.1.1 eq 80
灵活数据包匹配 (FPM) 确实是可用的最新 ACL。由于其广泛的匹配特性,主要关注点是入侵预防/检测。您似乎可以在数据包内定义任何参数以进行检查。就像任何具有附加功能的东西一样,这会带来显着的性能损失。我从Cisco 的FPM文档中获取了下一个示例,并对其进行了修改以匹配相关字段。
假设我们想进一步细化上述限制。我们希望允许来自该单个主机的访问,并防止任何那些“受信任的”用户将恶意查询(特别是“GET \%”)传递给单个主机。
rtr(config)# load protocol flash:ip.phdf
rtr(config)# load protocol flash:tcp.phdf
rtr(config)# class-map type stack match-all ip_tcp
rtr(config-cmap)# description "match TCP over IP packets"
rtr(config-cmap)# match field ip protocol eq 0x6 next tcp
rtr(config-cmap) # description "Match HTTP Exploit Packets"
rtr(config-cmap)# match field tcp dest-port eq 80
rtr(config-cmap)# match field ip source-addr eq 10.1.1.100
rtr(config-cmap)# match start tcp payload-start offset 0 size 32 regex ".*GET \%"
rtr(config)# policy-map type access-control fpm_tcp_policy
rtr(config-pmap)# description "policy for TCP packets"
rtr(config-pmap)# class http_psirt_class
rtr(config-pmap-c)# drop
rtr(config)# policy-map type access-control fpm_policy
rtr(config-pmap)# description "policy HTTP Get exploitation"
rtr(config-pmap)# class ip_tcp
rtr(config-pmap-c)# service-policy fpm_tcp_policy