
干了十几年网络一直有同行在群里争论一个问题内网里的访问控制到底该让三层交换机上的 ACL 干还是干脆交给防火墙这个问题看起来简单但我见过太多项目因为一开始没想清楚后期把拓扑改得面目全非。今天我不绕弯子直接把这个话题拆开讲明白三层交换机 ACL 和防火墙的访问控制到底有什么区别什么场景用哪个具体配置怎么落以及我在实际排障里踩过的坑。1. 先搞清楚三层交换机的 ACL 和防火墙的访问控制到底是不是同一个东西1.1 三层交换机的 ACL转发路径上的“路障”三层交换机上的 ACL全称是 Access Control List本质是一套包过滤规则。你可以把三层交换机理解成一个高速路口每个 VLAN 之间要互相通行必须经过它的三层转发引擎。ACL 就是在这个转发路径上设置的路障匹配到规则里描述的流量就执行允许或拒绝。这类 ACL 的优点是极度高效。因为三层交换机的转发通常由硬件芯片完成ACL 规则如果设计得简单也能一并打进硬件转发表里一条 ACL 命中检查只需要几十纳秒级别的时间对转发性能影响很小。而且配置方式非常直接不用改拓扑不用引流量在现有的 VLANIF 接口上一挂策略就生效了。但它的短板也很明显无状态。交换机只看单个报文头不会记录这条 TCP 连接是从哪个源 IP 发起的、之前有没有握手成功。你让三层交换机 ACL 去区分“这个 HTTP 请求是用户正常访问还是攻击尝试”它做不到。它只能看源地址、目的地址、协议、端口这些“快递面单”信息。1.2 防火墙的访问控制有状态的“门卫”防火墙的访问控制模型和交换机 ACL 是两套思路。防火墙核心是会话表。当流量第一次到达防火墙时它会根据安全策略判断是否允许建立会话如果允许后续响应的回程流量只要匹配会话表就直接放行不用再把每个报文重新过一遍策略。换句话说防火墙记得住“谁跟谁在聊天”。这个有状态特性带来一个很大的好处回程流量天然能通TCP 三次握手状态异常、无连接的扫描包、伪造源地址的报文在会话检查这一层就会被拦下来。再加上现代防火墙基本都集成了应用识别、用户认证、URL 过滤、入侵防御等功能它可以识别出你访问的究竟是网页还是数据库应用甚至可以细分到某个软件版本。所以防火墙的访问控制不是“路障”更像公司门口的“门卫”先登记、再检查、记录进出、遇到可疑行为还能联动告警。代价是处理路径更长转发时延比交换机高同等吞吐能力下设备成本也更高。1.3 一张表看懂核心差异对比维度三层交换机 ACL防火墙访问控制处理位置交换机硬件转发路径防火墙专用处理引擎是否有状态无状态逐包匹配有状态基于会话表策略依据五元组、MAC、VLAN、时间段五元组 应用 用户 URL 等转发性能高硬件线速转发相对低受会话数和策略数影响安全扩展基本没有NAT、IPS、防病毒、日志审计等典型部署位置内网核心/汇聚交换机网络边界、安全区域之间运维复杂度简单直接排障快需要理解区域、会话、策略关系这张表不是告诉你哪个更好而是说明它们定位不同。三层交换机 ACL 是“轻量级路障”防火墙是“重量级门卫”。问题在于很多项目把两者用反了。2. 选型决策什么场景该让三层交换机 ACL 干什么场景必须交给防火墙2.1 适合交换机 ACL 的场景流量大、路径简单、不需要精细识别我在实际项目里总结下来三层交换机 ACL 最适合三类场景。第一类是数据中心或办公网内部的 VLAN 间隔离。比如财务网段只能访问财务服务器业务网段不能访问管理网段这类规则非常固定基础五元组就够用。而且内网流量通常很大如果全部绕到防火墙再回来延迟和带宽都是浪费。第二类是保护网络设备自身管理面。很多设备出问题不是因为业务流量而是因为有人从内网某个角落去访问交换机的 Telnet、SSH、SNMP 端口。在交换机上直接限制只允许运维网段访问这些管理服务简单又有效。第三类是控制路由协议邻居。比如只允许指定邻居跟自己建立 OSPF/BGP 邻居关系或者限制某些组播流量进入特定 VLAN用交换机 ACL 做一层过滤比在防火墙上折腾方便得多。这类场景有一个共同点访问关系简单、变化少、对性能要求高。你不需要分析应用不需要审计每个用户做了什么只需要“这个网段不准访问那个网段”这种粗粒度控制。2.2 适合防火墙的场景需要状态、应用、用户识别和审计反过来说遇到下面这些情况三层交换机 ACL 就别硬扛了。首先是网络边界和 DMZ 区域。内外网之间、办公网和 DMZ 之间流量复杂度高攻击面大必须要有状态检测、NAT、日志审计。你在边界防火墙上写一条 deny all 是底线但交换机 ACL 很难帮你回答“谁在什么时候访问了哪个网站”这种问题。其次是等保合规和审计需求。很多行业的检查会要求保留访问日志、能追溯到具体用户和会话。交换机 ACL 只告诉你“某条规则命中多少次”防火墙能记录完整会话日志甚至可以对接审计平台。为了满足合规要求策略必须落在防火墙上。第三是用户和应用维度的控制。比如只允许销售部门访问客户管理系统不允许普通员工访问或者某个软件只允许从指定服务器出站联到官方升级地址。这些策略依赖用户认证和应用识别三层交换机 ACL 完全做不了。还有一类场景经常被忽略出站限制也就是“谁能不能上外网”。网上经常有人问“防火墙怎么阻止某个软件出站联网”这类需求其实就是出站白名单/黑名单策略。白名单思路是默认禁止所有出站只放行指定程序或域名黑名单则是默认放行单独封禁某个程序。黑名单配置简单但漏网之鱼多白名单安全度高但日常维护量大。这种策略放防火墙上一目了然放交换机 ACL 上你连域名都识别不了。2.3 边界与内网的分工不要把 ACL 部署层次搞反我见过最典型的错误是在核心交换机上堆了上千条 ACL每条都写得很具体看着很安全实际上一旦业务调整排障排到怀疑人生。核心交换机承担着全网流量的高速转发复杂 ACL 会占用硬件表项规则多了以后要么下发失败要么转发延迟变大。反过来我也见过有人把内网所有 VLAN 互访流量都引到防火墙要求防火墙上做出全部策略。这样看似“安全无死角”但延迟增加、设备负载高而且只要防火墙一重启全网业务全部中断。我的建议是边界、高危区域、资源区出口必须用防火墙做有状态策略内网 VLAN 间的纯网段隔离用三层交换机 ACL 做第一道闸。两道防线各干各的活别互相替代。3. 实操三层交换机 ACL 怎么配、绑在哪才不踩坑3.1 华为/华三交换机 ACL 的类型与配置模板先讲基本概念。三层交换机上的 ACL 一般分三类基本 ACL2000-2999只能匹配源地址高级 ACL3000-3999可以匹配源、目的、协议、端口、时间段二层 ACL4000-4999匹配 MAC、二层协议等。做网段间访问控制基本都用高级 ACL。华为交换机配置示例假设需求是VLAN 10192.168.10.0/24的终端禁止访问 VLAN 20192.168.20.0/24的服务器但 VLAN 10 访问其他网段不受影响。system-view acl number 3000 rule 5 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 rule 10 permit ip quit interface Vlanif20 traffic-filter inbound acl 3000这里的逻辑要理解清楚traffic-filter inbound挂在 Vlanif20 上意思是“进入 Vlanif20 的流量”执行过滤。VLAN 10 的终端去访问 VLAN 20 服务器目的地址是 192.168.20.0/24在进入 VLAN 20 网关时被命中丢弃。后面的rule 10 permit ip用来放行其他流量否则会触发隐含的拒绝规则导致 Vlanif20 所有入向流量都不通。华三交换机的配置思路一样只是命令风格不同system-view acl advanced 3000 rule 0 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 rule 5 permit ip quit interface Vlan-interface20 packet-filter 3000 inbound华三的命令是packet-filter华为是traffic-filter名字不同作用类似。需要注意华三的 ACL 规则默认匹配顺序可能随设备型号和版本有差异稳妥做法是把最具体的规则放前面然后在 ACL 视图下执行display this确认匹配顺序。3.2 用 ensp/华三模拟器验证 ACL 策略现在很多工程师都在用 ensp 或华三模拟器做实验我也一样。模拟器最大的价值是可以随便折腾一个配置错误顶多重新启动设备不会把生产网络搞瘫。我在 ensp 里的验证流程一般是先建好拓扑一台三层交换机、两台 PC、一台防火墙如果验证防火墙策略。PC1 划入 VLAN 10IP 配 192.168.10.1PC2 划入 VLAN 20IP 配 192.168.20.1。交换机配置 VLANIF10 和 VLANIF20分别作为两个网段的网关。先不挂 ACL两台 PC 互 ping 测试连通性。然后挂上访问控制规则再从 PC1 ping PC2。如果 ping 不通而 PC1 访问其他网段正常说明 ACL 生效。这时候用display acl all查看命中次数如果命中次数一直在增加就说明流量确实被规则拦住了。模拟器里墙另外值得注意ensp 导入防火墙时如果报格式错误或者启动失败大概率是设备包版本不匹配或者电脑内存不够。我遇到过 USG6000V 启动报错 40 的情况换了匹配版本的设备包后就好了。华三模拟器也类似遇到问题先检查版本兼容性别一上来就怀疑配置。3.3 配 ACL 时最容易翻车的四个细节第一个坑是放行规则写太少。很多人只写了 deny 规则忘了在最后补一条 permit结果不止目标网段不通DHCP、DNS、OSPF 等基础协议也全被误伤。我的习惯是凡是涉及 VLAN 间互访的 ACL都要想清楚“除了被禁止的其他流量是放行还是拒绝”然后在规则里明确写出来。第二个坑是方向搞反。接口的 inbound 指进入接口的方向outbound 指从接口出去的方向。很多新手把流量路径想反了结果策略没生效甚至把正常流量挡了。我的排障经验是先想清楚这个接口的“入”和“出”分别对应哪边的流量再决定挂 inbound 还是 outbound。第三个坑是把 ACL 绑在了物理接口而不是 VLANIF 接口。物理接口只对从这个物理口进出的流量生效如果电脑分散在多个接入交换机后面只在核心交换机某一个物理口上绑 ACL 是没有用的。要按 VLAN 隔离就应该绑在 VLANIF 接口上或者用华为的traffic-filter vlan 20 inbound acl 3000这种基于 VLAN 的过滤。第四个坑是远程操作时把自己封了。我曾经在给一台核心交换机加 ACL 时没注意管理网段也被包含在 deny 范围里策略生效的瞬间我的 SSH 会话直接断掉差点需要跑机房重启设备。现在我的习惯是所有涉及管理地址的 ACL 变更必须通过 console 口操作或者在变更前先把一条“放行自己当前登录源地址”的规则放在最前面。4. 实操防火墙侧访问控制怎么落地部署模式决定策略形态4.1 路由、透明、旁挂三种模式怎么选防火墙的访问控制好不好用很大程度取决于部署模式。常见的三种模式必须搞清楚。路由模式是最常规的。防火墙的接口配置 IP 地址作为三层节点参与路由流量必须经过防火墙才能到达目标。这种模式适合网络出口、NAT 场景也适合防火墙两边的网段本来就是不同三层网络的场景。配置时要注意安全区域的划分接口加入正确的 zone否则流量到了防火墙直接被丢弃。透明模式相当于把防火墙做成一个“高级二层设备”。接口不配业务 IP流量从接口进来再从接口出去对终端来说感觉不到防火墙的存在。这种模式适合在不改动现有 IP 规划的前提下把防火墙“串”进原有链路。经常有人问透明模式下防火墙端口可以配 IP 吗严格说业务口不能配 IP但管理口可以单独配地址用于远程维护子接口在特殊虚拟化场景下也能配 IP原则是不能影响二层流量转发。旁挂模式是很多内网改造的首选。防火墙不在主数据通路上而是通过核心交换机上的策略路由或者 VRF 把特定流量牵引到防火墙处理完再送回正常转发路径。这种模式的好处是部署风险低紧急情况下把策略路由一删流量就走原来的路径业务不受影响。坏处是流量路径复杂排查问题时要时刻想着“引流规则命中了没有”。实际操作里我做旁挂项目时必做的一件事是把引流前后两条路径的转发逻辑画清楚。核心交换机上写策略路由时要小心别把自己管理地址的流量也引到防火墙否则防火墙一断你连交换机都登不上。4.2 防火墙策略设计与黑白名单思路防火墙的策略基础是安全区域。一般设备默认有 trust、untrust、dmz 这几个区域你把物理接口加入对应区域然后写“从哪个区域到哪个区域、匹配什么条件、执行什么动作”的策略。以华为 USG 系列为例一条简单的内网到外网放行策略长这样system-view firewall zone trust add interface GigabitEthernet1/0/0 quit security-policy rule name permit_trust_to_untrust source-zone trust destination-zone untrust source-address 192.168.10.0 mask 24 action permit华三 F1000 系列的命令风格略有不同但思路一致。无论是哪个品牌我建议遵循一个总原则默认拒绝按需放行。不要一上来就写一堆 permit先把最底层的 deny 策略确认好再逐步放行必要的业务。黑白名单思路在防火墙策略里很常见。黑名单适合临时封禁比如发现某个 IP 在持续扫描直接加一条 deny白名单适合核心系统访问控制比如只允许运维网段访问堡垒机。黑名单的优点是配置简单缺点是默认放行兜不住未知风险白名单的优点是安全基线明确缺点是维护量大业务变动频繁时会让你天天改策略。如果你只是想控制某个软件能不能访问网络比如网上有人问“怎么阻止 geekuninstaller.exe 出站联网”思路就是先看这个进程访问的服务器域名或 IP然后在防火墙出站策略里加一条针对该应用或目的地址的 deny 规则。如果设备支持应用识别可以直接按应用名封如果不支持就按 DNS 解析出的 IP 段封。4.3 防火墙与交换机联动路由、双机和旁挂的坑防火墙不是孤立设备实际项目里它总要跟交换机联动。最常出问题的三个点第一是防火墙学习不到路由。尤其是旁挂模式下防火墙接口虽然是三层口但没有跑动态路由协议也没有配置缺省路由结果数据包到了防火墙不知道该往哪发。解决思路是先确认防火墙有没有对应的路由表项没有就补静态路由或者在防火墙上和核心交换机之间跑 OSPF让路由自动进来。第二是双机部署防火墙做 OSPF。很多人以为只要两台防火墙都接入网络跑 OSPF 就能实现自动切换。实际上防火墙双机通常需要配置 VGMP/HRP 之类的会话同步机制否则主备切换时已经建立的连接全部断掉路由还是会震荡。我的经验是双机场景先把主备状态和会话同步调通再上 OSPF顺序不能反。第三是核心交换机上要不要配 VRF。如果你只是做正常的 VLAN 间访问控制不需要 VRF配了反而增加复杂度。但如果多个业务系统要求路由隔离比如银行的前台业务和后台管理完全隔离那就用 VRF然后在 VRF 里单独配置到防火墙的路由。要不要 VRF 是架构需求决定的不是防火墙联动需求决定的别混为一谈。5. 常见问题与排查技巧实录5.1 问题速查表问题现象可能原因排查思路配置了防火墙策略仍然不通接口没加入正确安全区域或者策略在想用的 zone 之前被更高优先级策略拦截逐个检查安全区域、策略命中计数三层交换机 ACL 之后所有 VLAN 都不通缺少放行基础协议的 permit 规则或者隐含 deny all 命中查看display acl all命中次数先恢复放行旁挂模式下防火墙策略已放行但业务不通核心交换机策略路由没生效或者防火墙没有回程路由在核心交换机和防火墙上分别确认转发路径与路由表防火墙关掉后网络恢复正常防火墙策略或 NAT 配置误拦截也可能是设备性能瓶颈不要直接关闭防火墙先抓包定位被丢弃的报文ensp 导入防火墙报格式错误设备包版本不匹配或内存不足更换匹配版本的 USG6000V 设备包关闭多余程序透明模式接入后部分 VLAN 不通二层接口没放通对应 VLAN或者 STP 阻塞确认接口 trunk 放行 VLAN检查二层转发Windows 服务器 FTP 访问异常防火墙拦截了被动模式数据端口在 Windows 防火墙或边界防火墙上放行 FTP 被动模式端口范围5.2 排查思路访问控制类的故障我最常用的手段是“两头看路由中间看策略”。两头指源和目的设备先确认源设备能到网关目的设备能回应中间看策略就是看设备和防火墙上有没有把路径挡住。在三层交换机上优先看display acl all里的命中计数。如果计数不涨说明流量根本没走到这条规则上问题在路由或者接口方向如果计数在涨但业务还是不通说明后面的 permit 规则没写好流量被错误丢弃了。在防火墙上优先看会话表。流量经过防火墙后一定会有会话记录。如果会话表里没有记录说明流量压根没到防火墙问题在引流和路由如果有会话记录但业务不通要看 NAT、安全策略和端口是否匹配。5.3 最后再分享一点个人体会访问控制这件事最怕的不是技术不会而是边界模糊。我后来做项目都会在拓扑图上用不同颜色标清楚哪些地方走交换机 ACL哪些地方走防火墙策略编号和业务负责人写清楚。三个月后你再回头看会感谢当时留的这些注释。还有一个小技巧变更前永远先备份配置变更时永远走最小影响路径变更后立刻验证并记录。很多人问我“防火墙关闭有影响吗”我的回答是如果这台防火墙承担着边界或安全区域隔离关闭之后短期内业务可能看不出异常但风险敞口已经打开。真正规范的做法不是考虑关不关而是通过白名单策略把误拦率降到最低。回到标题那个问题三层交换机的 ACL 和防火墙不是二选一而是接力配合。防线要分层边界要高配内网要快而稳。理解这一点比背任何配置命令都重要。