别再乱改防火墙了!OpenWrt 21.02 /etc/config/firewall 配置文件逐行解读与安全配置建议
OpenWrt防火墙配置深度解析:从安全误区到最佳实践
每次在OpenWrt路由器上随意修改防火墙设置时,你是否想过那些看似无害的配置可能正在为网络攻击敞开大门?作为Linux网络堆栈的核心组件,OpenWrt防火墙的复杂性远超表面所见。本文将带您深入/etc/config/firewall的每个配置段,揭示那些容易被忽视的安全陷阱,并提供经过实战检验的配置方案。
1. 防火墙架构与配置基础
OpenWrt的防火墙系统本质上是对Linux内核netfilter框架的封装,但通过fw3工具和UCI配置界面进行了高度抽象。这种设计虽然提升了易用性,却也隐藏了关键的安全细节。理解以下核心概念是安全配置的前提:
- 四表五链体系:虽然OpenWrt简化了iptables的原始结构,但filter表的INPUT、FORWARD、OUTPUT链以及nat表的PREROUTING、POSTROUTING链仍然构成流量控制的基础框架
- fw3工作流程:UCI配置文件 → fw3解析器 → iptables/nftables规则生成 → 内核netfilter加载
- 配置生效机制:修改
/etc/config/firewall后必须执行/etc/init.d/firewall restart才能使变更生效,直接使用iptables命令修改会绕过配置持久化
典型的新手错误包括:
# 危险操作示例:直接清空所有防火墙规则 iptables -F iptables -t nat -F这种操作会立即移除所有防护,使设备完全暴露在网络中。正确的做法是通过UCI系统进行配置变更,确保规则持久化和一致性。
2. defaults段:全局策略的安全平衡
defaults段定义了防火墙的全局默认行为,看似简单的参数选择实则影响整个网络的安全态势。以下是经过安全加固的推荐配置:
config defaults option syn_flood '1' option input 'REJECT' # 严格模式建议改为REJECT option output 'ACCEPT' option forward 'REJECT' # 明确拒绝未授权的转发 option disable_ipv6 '0' # 现代网络需要IPv6支持关键参数的安全考量:
| 参数 | 安全值 | 风险值 | 潜在威胁 |
|---|---|---|---|
| input | REJECT | ACCEPT | 暴露管理接口和本地服务 |
| forward | REJECT | ACCEPT | 可能成为流量转发跳板 |
| syn_flood | 1 | 0 | 易受SYN洪水攻击 |
| disable_ipv6 | 0 | 1 | 导致IPv6流量绕过防火墙 |
特别警告:将input设置为ACCEPT是家用路由器常见的安全隐患,这会使所有LAN设备都能访问路由器的管理界面。在商业环境中,这可能导致内部横向渗透。
3. zone配置:网络边界的精确划分
zone是OpenWrt防火墙的核心抽象概念,正确划分安全域是构建防御体系的基础。以下是典型的两zone配置示例:
config zone option name 'lan' list network 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'RECEPT' # 严格控制LAN间转发 option masq '0' config zone option name 'wan' list network 'wan' list network 'wan6' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option masq '1' # 启用NAT伪装 option mtu_fix '1'安全配置要点:
- masq(NAT)配置:仅在WAN zone启用,LAN zone启用会导致双重NAT问题
- MTU修复:PPPoE等连接必须设置
mtu_fix 1避免分片攻击 - 网络接口绑定:确保每个物理接口只属于一个zone,避免边界模糊
常见错误案例:
# 危险配置:将同一接口加入多个zone config zone option name 'dmz' list network 'lan' # 与lan zone重叠 ...这种配置会导致防火墙策略冲突,可能意外允许WAN到LAN的直接访问。
4. forwarding规则:区域流量的精细控制
forwarding段控制zone间的流量交互,需要遵循最小权限原则。安全配置示范:
# 允许LAN到WAN的出口流量 config forwarding option src 'lan' option dest 'wan' # 禁止所有其他zone间转发 # 不配置任何额外的forwarding规则高级安全策略可以通过规则组合实现:
- 创建隔离区(DMZ)zone:
config zone option name 'dmz' list network 'dmz' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT'- 精确控制DMZ访问:
config forwarding option src 'lan' option dest 'dmz' option family 'ipv4'- 禁止DMZ发起向内连接:
config rule option name 'Block-DMZ-to-LAN' option src 'dmz' option dest 'lan' option proto 'all' option target 'REJECT'5. rule规则:服务访问的精准管控
rule段提供最细粒度的流量控制能力,需要特别注意规则顺序带来的影响。安全增强配置示例:
# 基础服务放行 config rule option name 'Allow-DHCP' option src 'lan' option proto 'udp' option dest_port '67-68' option target 'ACCEPT' option family 'ipv4' config rule option name 'Allow-DNS' option src 'lan' option proto 'udp' option dest_port '53' option target 'ACCEPT' # 严格限制WAN入站 config rule option name 'Block-WAN-Input' option src 'wan' option proto 'all' option target 'REJECT' option family 'ipv4'关键安全实践:
- 默认拒绝策略:先设置全局REJECT规则,再逐步开放必要服务
- 协议限定:避免使用
proto all,明确指定tcp/udp/icmp等 - 日志记录:对关键规则添加
option extra '--log-prefix "FIREWALL: "'便于审计
危险配置警示:
# 高风险规则:开放所有WAN到LAN的ICMP config rule option name 'Allow-All-ICMP' option src 'wan' option dest 'lan' option proto 'icmp' option target 'ACCEPT'这可能导致ICMP隧道攻击,建议仅放行特定类型的ICMP:
list icmp_type 'echo-request' list icmp_type 'destination-unreachable'6. redirect规则:端口转发的安全实现
端口转发是最大攻击面之一,必须严格限制范围和目标。安全配置模板:
# 安全的SSH转发示例 config redirect option name 'SSH-Redirect' option src 'wan' option src_dport '2222' # 修改默认端口 option proto 'tcp' option dest 'lan' option dest_ip '192.168.1.100' option dest_port '22' option target 'DNAT' option extra '--match limit --limit 3/min --limit-burst 3'安全增强措施:
- 端口伪装:不使用标准服务端口(如80/22)
- 速率限制:通过
extra参数添加iptables扩展 - IP限制:结合rule段实现源IP白名单
# IP白名单示例 config rule option name 'Allow-SSH-Office' option src 'wan' option src_ip '203.0.113.15' # 办公网络IP option proto 'tcp' option dest_port '2222' option target 'ACCEPT'绝对避免的配置:
# 危险的全端口DMZ转发 config redirect option src 'wan' option proto 'all' option dest_ip '192.168.1.2'这相当于将内网主机完全暴露在公网,应使用精确的端口映射替代。
7. 高级安全配置技巧
7.1 防御DDoS攻击
在defaults段启用SYN cookie防护:
option syn_flood '1' option synflood_rate '25' option synflood_burst '50'7.2 防止IP欺骗
添加规则阻止私有IP从WAN进入:
config rule option name 'Block-Private-IPs' option src 'wan' option src_ip '10.0.0.0/8 172.16.0.0/12 192.168.0.0/16' option proto 'all' option target 'REJECT'7.3 应用层防护
利用iptables扩展防御常见攻击:
# 在/etc/firewall.user中添加 iptables -A INPUT -p tcp --dport 80 -m string --string "cmd.exe" --algo bm -j DROP iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP7.4 配置备份与恢复
定期备份防火墙配置:
# 备份 uci export firewall > /etc/firewall.backup.$(date +%F) # 恢复 cat /etc/firewall.backup | uci import firewall /etc/init.d/firewall restart8. 安全审计与监控
8.1 日志分析配置
启用详细日志记录:
config rule option name 'Log-WAN-Attempts' option src 'wan' option proto 'all' option target 'LOG' option extra '--log-level 4 --log-prefix "WAN_ATTACK: "'8.2 实时监控命令
查看当前生效规则:
iptables-save -c监控实时连接:
conntrack -E8.3 安全扫描检测
使用nmap自检:
nmap -sS -T4 -A -v 192.168.1.1检查开放服务:
netstat -tulnp