防火墙区域与转发规则
防火墙到底在管什么
路由器的一个核心职责是把家里网络与互联网隔开,同时有选择地放行流量。OpenWrt 内置的防火墙基于 Linux 内核的 netfilter 框架,LuCI 里看到的那些区域和规则,最终都会翻译成内核里的过滤表。普通用户不需要理解这些底层细节,只需要知道一条主线:所有进出流量都要经过一道道检查,匹配规则后放行或丢弃。
防火墙的逻辑可以归纳为三问:流量从哪里来,要去哪里,是什么类型。区域回答前两问,规则回答第三问。把这两个概念分清,防火墙页面就不再是一堆看不懂的英文单词,而是一张结构清晰的流向图。
| 概念 | 管的事情 | 例子 |
|---|---|---|
| 区域 | 接口属于哪个组 | lan、wan |
| 默认策略 | 没匹配规则时怎么办 | 拒绝或放行 |
| 转发 | 区域之间允不允许走 | lan 到 wan |
| 流量规则 | 单个端口或服务 | 放行某个端口 |
新手最容易犯的错是把区域和接口混为一谈。接口是物理或逻辑的网口,区域是防火墙视角的分组,一个接口必须归入某个区域才有防火墙行为。新刷机后某些接口明明配好了 IP 却完全不通,十有八九是没划进区域,流量在防火墙这一层就被默认丢弃了。
区域:把接口分组管理
OpenWrt 防火墙的核心思想是区域。每个接口属于一个区域,同一区域内的设备彼此信任,区域之间默认隔离。系统自带两个基本区域:lan 代表你的内网,wan 代表互联网。新刷好的系统里,lan 到 wan 的转发默认是允许的,这样家里设备才能上网;wan 到 lan 默认拒绝,外面的主动连接进不来。

如果你加了访客网络或者虚拟局域网,通常会再建一个区域,与 lan 隔离开。区域的好处是管理简单:几十条规则按接口写会乱成粥,按区域写只需要几条。新增接口时第一件要确认的事,就是它有没有被划进正确的区域,漏掉这一步流量全都不通。
区域还有一个容易被忽略的属性:每个区域可以单独设置对路由器本机的输入策略。lan 区域通常允许访问路由器的管理界面与各项服务,wan 区域则把输入压到最低,连 ping 都可以关掉。需要远程管理路由器本身时,正确做法是单独开一条规则放行管理端口,而不是把整个 wan 区域的输入策略改成允许,两者风险等级完全不同。
| 区域 | 含义 | 默认信任度 |
|---|---|---|
| lan | 你的内网 | 高 |
| wan | 互联网 | 低 |
| 自建区域 | 访客等 | 自己设定 |
转发规则:区域之间怎么走
区域之间能不能通,由转发规则决定。转发指的是流量从一个区域流向另一个区域,方向很重要:lan 到 wan 表示内网主动访问互联网,一般允许;wan 到 lan 表示外部主动连进来,一般拒绝。方向写反了是最常见的配置错误,也是排查不通时的第一检查点。
| 转发方向 | 含义 | 常规做法 |
|---|---|---|
| lan 到 wan | 内网出去上网 | 允许 |
| wan 到 lan | 外部主动连入 | 拒绝 |
| 访客到 lan | 访客访问内网 | 拒绝 |
| lan 到访客 | 内网访问访客 | 按需 |
每条转发规则还限定具体端口与协议。比如允许局域网设备出去时,通常不限端口;而对外开放服务时只放某一个端口,其他一律拒绝。这种做法叫最小开放面,是所有安全配置的基本原则,也适用于服务器管理,bt2017 里有类似实践的展开。
流量规则:放行或拒绝单个端口
转发管的是区域之间,流量规则管得更细:进入路由器本身的、从路由器发出的、以及单个端口的开放。最典型的场景是让外网访问家里某台设备上的服务,比如把外部某个端口转发到内网的一台机器上,这类做法称为端口转发,属于流量规则的一种。
| 规则类型 | 作用范围 | 典型场景 |
|---|---|---|
| 输入规则 | 到路由器本机 | 允许 ping |
| 输出规则 | 从路由器发出 | 很少需要改 |
| 端口转发 | 外部到内网设备 | 对外开放服务 |
| 通配放行 | 单个端口 | 临时测试 |
新建一条端口转发时需要填四项:协议、外部端口、内部设备的内网地址、内部端口。其中内部设备地址最好是静态绑定的,否则设备重启换了地址,规则就失效了。静态分配在那篇 DHCP 与静态地址分配里讲过,两者配合才能稳定对外服务。
在 LuCI 里看懂防火墙页面
LuCI 的防火墙页面分为三个标签:区域、流量规则、自定义规则。区域标签负责接口分组与转发关系,日常百分之八十的操作都在这里;流量规则标签管理具体的放行与转发;自定义规则标签用来写原生规则,属于进阶用法,新手保持默认即可。

| 操作 | 在哪里做 | 建议频率 |
|---|---|---|
| 查接口归属 | 区域标签 | 每次加接口 |
| 改默认策略 | 区域标签 | 尽量不动 |
| 开放端口 | 流量规则标签 | 按需 |
| 验证生效 | 状态页面 | 每次改完 |
防火墙配置改动之后,LuCI 会提示保存并应用,这与普通设置页面不一样:防火墙规则生效要先写入内核,大改动时可能让当前连接断一下,用无线管理时尤其明显。大改动最好留到方便重启连接的时候进行。
一次完整的端口转发示例
把整套流程串起来看更直观。假设家里有一台小型服务器,内网地址固定为一段,服务端口是八十,想让外网朋友通过互联网访问它。操作分五步:先在 DHCP 设置里给这台机器绑定固定地址,再进防火墙的流量规则标签,新建一条端口转发,协议选传输控制协议,外部端口自己定一个不常见的,内部地址填那台机器,内部端口填八十,保存应用后让朋友用你的公网地址加外部端口访问。
| 步骤 | 操作要点 |
|---|---|
| 绑定内部地址 | 先固定再转发 |
| 选外部端口 | 避开常见端口 |
| 填内部信息 | 地址与端口 |
| 保存并应用 | 注意断连提示 |
| 外部验证 | 请人帮忙测试 |
外部端口刻意选不常见的数字,并不是玄学,而是能避开大量自动扫描的噪声流量。扫描器通常只检查常见端口,换一个数字就能让日志清净不少。这种小习惯成本极低,收益却很明显。
规则的顺序与优先级
防火墙判断流量时是从上到下逐条匹配的,命中第一条就生效,后面的不再看。这意味着规则顺序相当重要:拒绝规则放在放行之前,整体表现为拒绝;放行在前则表现为放行,先例外的写法在排错时很有效。如果某条规则怎么都不生效,先怀疑顺序问题,而不是规则本身写错。

一个实用习惯:把最常用的规则放上面,例外规则插在相关位置,整体读起来像一份条理分明的清单。规则积压了几十条的时候,花十分钟重新排序与合并,比出问题再翻配置轻松得多。顺序调好之后做一个配置备份,jsjwlmst 里的配置管理思路在这里同样适用。
IPv6 与防火墙
IPv6 时代每台设备都有公网地址,防火墙的地位反而更重要了。好在 OpenWrt 的区域与规则同时作用于 IPv4 与 IPv6,新增规则时默认两代都覆盖,不需要写两遍。需要单独区分的情况很少,界面上有协议选项再细究即可。
| IPv6 下的变化 | 对配置的影响 |
|---|---|
| 设备都有公网地址 | 依赖默认拒绝 |
| 规则覆盖两代 | 一般不用分写 |
| 端口转发需求下降 | 地址可直接寻址 |
| 安全思路不变 | 最小开放面 |
一个常见疑问是 IPv6 拿到公网地址后要不要关掉它来图安心。答案是不必:默认的入站拒绝策略对 IPv6 同样有效,外部主动连接照样进不来。这个机制在上一节 IPv6 基础配置里有过说明。
需要特别留意的反而是你自己主动开放的端口:IPv4 时代端口转发同时配了内外两层,IPv6 时代设备地址可直接寻址,规则一旦放行就直接到达设备。所以每条对外规则都要想清楚必要性,用完立刻关闭。
安全自查清单
防火墙配置最怕日积月累的临时改动,定期对照清单自查一遍非常有必要。
| 检查项 | 期望状态 |
|---|---|
| wan 默认策略 | 拒绝 |
| lan 到 wan 转发 | 允许 |
| 端口转发条目 | 每条都必要 |
| 临时测试规则 | 已删除 |
| 对外服务端口 | 最小开放面 |
清理旧规则时容易纠结,一个判断标准是这条规则对应的服务现在还在不在用。不在用的果断删掉,将来需要时重建一条比从混乱配置里考古容易。配置干净了,排查故障时的心情也会好很多。
另一个值得养成的习惯是改动前先备份当前防火墙配置。哪怕只是加一条规则,也建议先点一下保存备份,万一新规则把远程管理自己的连接切断,还有机会快速恢复回去。这种预防措施花费的时间以秒计,却能避免最狼狈的局面。
