当我研究访问控制的概念时,我发现 ACL 使用逆掩码。但在研究思科站点关于控制列表,我注意到在所有的解释中,他们都将逆掩码转换为原始掩码,然后进行必要的操作。
如果是这样,我们为什么需要逆掩码呢?据我所知,逆掩码只有在与 IP 地址进行位或运算时才有用。但我怀疑情况并非如此。那么使用逆掩码的真正原因是什么?
答案1
逆位掩码比单纯使用网络掩码更灵活。绝大多数应用程序只是将网络掩码反转为逆掩码,如下所示:
! Deny tcp/25 traffic from all sources going to addresses
! in the seqence matching [172.16.0.4, 172.16.1.4, 172.16.2.4, etc...]
ip access-list 101 deny tcp any 172.16.0.4 0.0.0.0 eq 25
ip access-list 101 deny tcp any 172.16.1.4 0.0.0.0 eq 25
ip access-list 101 deny tcp any 172.16.2.4 0.0.0.0 eq 25
ip access-list 101 deny tcp any 172.16.3.4 0.0.0.0 eq 25
ip access-list 101 deny tcp any 172.16.4.4 0.0.0.0 eq 25
ip access-list 101 deny tcp any 172.16.5.4 0.0.0.0 eq 25
! keep repeating the pattern all the way to 172.16.255.4
本质上,acl 101 根据 /32 网络掩码阻止数据包。更简洁的表达方式是
! 255 in the third octet of the wildcard mask matches from 0-255
ip access-list 102 deny any 172.16.0.4 0.0.255.0 eq 25
ACL 102 只是表达第一个 ACL 的更紧凑的方式。
在 Cisco IOS 仅基于 CPU 能力切换所有流量且没有内置内部 acl 模式优化的时代,ACL 101 会比 ACL 102 慢得多,因为 ACL 101 中的条目数量较多。现在,Cisco IOS 在模式匹配引擎中包含一些重大优化,高端平台甚至使用 ASIC 进行过滤……因此,将 ACL 表达为 102 更为方便。
请记住,您的 IOS 配置的好坏取决于您的员工在凌晨 3 点出现问题时的状况;因此,如果您尽可能巧妙地编写 ACL,则可能需要在凌晨危机期间花费更多时间来调试问题。