你的浏览器无法正常显示内容,请更换或升级浏览器!

RouterOS 防火墙规则那些年踩过的坑

tenfei
tenfei
发布于2026-06-11 12:05 阅读11次
RouterOS 防火墙规则那些年踩过的坑
本文结合实际案例,总结 RouterOS 防火墙配置中容易被忽视的避坑经验,涵盖规则顺序、connection-state、address-list、raw table 和 service-port 等五大常见问题,帮助运维人员少走弯路。
做网络运维的同学应该都知道,RouterOS(也就是 MikroTik 的路由系统)功能非常强大,但强大的背后也意味着配置复杂度直线上升。尤其是防火墙规则,稍有不慎就会把自己关在设备外面。本文结合实际案例,总结几条 RouterOS 防火墙配置中容易被忽视的避坑经验。 ## 坑一:默认规则顺序搞反,SSH 管理端口直接失联 很多新手在配置 RouterOS 防火墙时,喜欢先写一条 accept 规则放行自己的管理 IP,觉得这样最保险。但问题是,如果你先把 accept 规则放在前面,而 default policy 又是 accept 的话,后续即使你写了 drop 规则,也根本不会生效——流量在到达 drop 规则之前就已经被 accept 放行了。 更危险的一种情况是,有人会在 filter 规则里先写一条 `action=drop src-address=your-managed-ip`,然后以为自己后续会写 accept 规则,结果顺序排错,accept 规则写在了 drop 规则后面,管理 IP 直接被拒之门外。RouterOS 没有回滚功能,只能通过 console 口物理接入才能恢复。 正确的做法是:先用 `print` 查看现有规则列表,确认顺序无误后再 `move` 调整。如果是通过 Winbox 操作,建议在修改前截图当前配置。 ## 坑二:connection-state 判断不完整,导致内网用户无法上网 RouterOS 防火墙的 connection-state 有四种状态:established、related、new、invalid。很多人在写 output chain 规则时图方便,只写一条 `action=accept connection-state=established,related`,然后把所有未知流量都 drop。这样做在内网访问外网时往往没问题,但一旦涉及到 VPN 或者 port forwarding,就会出现奇怪的不通现象。 原因在于,RouterOS 对 connection-state 的判断是流表级别的。如果你先在 forward chain 里做了 NAT 转换,但 filter 规则里没有正确处理 established 和 related 状态的返回流量,内网用户发起的新建连接可能无法正常返回。 实操建议是,在 filter 规则中始终保持这两条规则靠前位置: ``` /ip firewall filter add chain=forward action=accept connection-state=established,related comment="allow established" /ip firewall filter add chain=forward action=accept connection-state=new src-address=内网网段 comment="allow new from LAN" ``` 不要图省事把所有流量一把梭交给 default policy 处理。 ## 坑三:address-list 用错范围,导致规则失效 RouterOS 的 address-list 功能很实用,可以把一批 IP 放在一个列表里统一管理。但有一种错误很常见:管理员把内网网段写错了。 举个例子,本来想把 `192.168.10.0/24` 加入 address-list,结果手滑写成了 `192.168.1.0/24`,导致本该被过滤的 IP 始终不匹配这条规则。RouterOS 不会报错,因为它认为这是一个合法的网段。 建议的做法是:使用 `add list=黑名单 address=192.168.1.0/24` 时,务必用 `print` 确认列表内容是否正确,或者先 `ping-address` 测试一下该地址能否 ping 通。 ## 坑四:raw table 的 prerouting 规则影响后续 connection tracking RouterOS 的 raw 表有 prerouting chain,设计初衷是在 connection tracking 之前就拦截某些流量。但如果你在 raw prerouting 里写了 `action=drop`,后续的 filter forward 规则即使想对这条连接做日志记录,也看不到这个行为了——因为连接根本没有建立起来。 这个坑在排查问题时特别隐蔽,流量就是不通,但 filter 规则里明明没有匹配的 drop 语句。 实操建议:除非是明确的恶意扫描源,否则不要在 raw table 做常规流量的 drop,应该让流量进入 filter 链再做判断,这样也方便后续用 `connection-bytes` 或 `p2p` 做更细粒度的控制。 ## 坑五:firewall service port 和 filter 规则混用造成冲突 有些管理员会在 `ip firewall service-port` 里禁用了某些端口(比如 sip),然后在 filter 规则里又试图放行这些端口。结果发现怎么调都不生效。 原因是 service-port 的处理在 filter 之前,一旦在 service-port 里做了-nat或者disable,filter 规则根本看不到原始流量。 正确的做法是:如果不需要 SIP 相关的 ALG 功能,直接在 service-port 里关闭;如果需要精细控制,在关闭 service-port 的前提下,通过 filter 规则自己实现放行逻辑,不要两边同时配置。 ## 总结 RouterOS 防火墙配置的核心要点就是三条:确认规则顺序、验证地址范围、理解各表的处理优先级。看似简单的规则,真到线上环境里出了问题排查起来却很费劲。建议每次修改前先在测试环境验证,重要操作前先备份配置。

2

0

文章点评
Copyright © from 2021 by namoer.com
458815@qq.com QQ:458815
蜀ICP备2022020274号-2