openWrt firewall分析以及nftables配置方法

目录

一、openwrt原生页面

二、配置文件 

defaults

zone

forwarding

rule

include

三、配置生效流程

总流程

procd初始化注册config.change事件流程

四、Nftables

ruleset层级操作常用命令

表table

Family集合

链chain

        常用命令

参数解析

规则rule

        常用命令


一、openwrt原生页面

二、配置文件 

        如下为firewall的uci配置文件,该配置文件位于/etc/config目录下,下图中包括了defaults、zone、forwarding三个部分;

defaults

defaults部分声明了不属于特定区域的全局防火墙设置

config defaults

option syn_flood '1'   #布尔值,启动SYN洪水攻击保护

option input 'ACCEPT'  #字符串,设置过滤表INPUT链的策略

option output 'ACCEPT'   #字符串,设置过滤表OUTPUT链的策略

option forward 'REJECT'   #字符串,设置过滤表FORWARD链的策略

# option disable_ipv6  '1'   #布尔值,关闭ipv6防火墙

zone

zone安全域配置节

        一个安全域根据接口来划分,可以包含一个或多个接口,在源和目的之间进行转发、生成规则和重定向。输出的流量伪装是每一个安全域的基础控制。注意伪装是对即将报文离开的接口进行定义,是将报文的源ip转换为路由器的出口ip。

 

forwarding

forwarding转发配置节

        转发部分控制安全域之间的数据流量,可以使MSS(最大分片大小)为特定方向。

        一个转发规则仅代表一个方向。允许两个区域之间的双向流量,这需要两个转发规则,src和dest部分颠倒过来即可,转发配置节的类型为forwarding

        iptables规则生成该部分依靠需要链接跟踪工作来生成状态匹配。在src和dest安全域至少需要有一个连接跟踪通过MASQ或连接跟踪选项启用。如果没有启用连接跟踪机制,那报文只能单向通过,返回的报文将被拒绝。

rule

如下为rule规则部分

规则用于定义基本的接受、丢弃或拒绝规则,以允许或限制特定端口或主机的访问

规则定义如下:

        如果src和dest均指定,规则作用于转发流量

        如果仅指定了src,规则匹配流入本机的流量,即目的地址为防火墙的报文

        如果仅指定了dest,规则匹配本机作为源地址的流量

        如果src和dest均没有给出,则默认作用于本机作为源地址的流量

include

配置节

<think>嗯,用户提到他的OpenWrt系统里同时使用了nftables和iptables,想要去除iptables相关的规则。首先,我需要确认OpenWrt的版本,因为从21.02开始,默认使用nftables而不是iptables。不过,用户可能还在使用旧版本,或者可能手动安装了iptables相关的包,导致两者共存。 接下来,用户想要完全移除iptables的规则,可能需要检查当前系统中有哪些iptables相关的软件包。通常,OpenWrtnftables是通过firewall4来实现的,而iptables则属于firewall3。如果用户升级过系统,可能还残留了旧的iptables包,或者某些依赖导致它们被保留下来。 然后,用户可能需要停止iptables服务,并禁用它们,防止开机启动。同时,删除相关的包,比如iptables-nft或者legacy版本。但需要注意,有些包可能被其他程序依赖,直接删除可能导致问题,所以需要谨慎处理。 另外,用户可能担心现有的nftables规则是否会受到影响。需要确保在移除iptables之后,防火墙功能仍然正常,可能需要重新启动防火墙服务,或者重新加载nftables配置。还要检查是否存在混合规则的情况,比如有些规则可能通过iptables-nft兼容层加载到nftables中,导致混乱。 此外,用户可能不太清楚如何检查当前系统使用的是nftables还是iptables,可以指导他们使用命令如`iptables -V`查看版本,如果显示是nftables后端,说明使用的是兼容层。而`nft list ruleset`可以查看当前的nftables规则,确认是否有残留的iptables规则。 最后,用户可能需要清理残留的配置文件,或者重启服务来确保更改生效。还要提醒他们在操作前备份现有配置,防止意外丢失重要规则。如果有依赖问题无法删除包,可能需要找出哪些包依赖了iptables,并考虑替代方案或者重新配置。</think>--- ### 彻底移除OpenWrt中iptables规则的完整方案 --- #### 一、现状确认 1. **检测混合使用情况** ```bash iptables -V # 若显示"legacy"则为传统iptables,显示"nf_tables"表示通过nftables兼容层运行 nft list ruleset ``` - 如果同时存在`iptables`规则和`nftables`规则,需进行清理 --- #### 二、核心操作步骤 1. **卸载iptables相关软件包** ```bash opkg remove --force-removal-of-dependent-packages \ iptables \ iptables-legacy \ iptables-mod-conntrack-extra \ iptables-mod-ipopt \ iptables-mod-nat-extra ``` 2. **清理残留配置** ```bash rm -rf /etc/iptables /etc/sysconfig/iptables* ``` 3. **禁用iptables服务**(如存在) ```bash /etc/init.d/iptables stop /etc/init.d/iptables disable ``` --- #### 三、防火墙配置迁移 1. **确认当前防火墙实现** ```bash uci get firewall.@defaults[0].flow_offloading ``` - 输出`1`表示使用`firewall4`(基于nftables) 2. **重建防火墙规则** ```bash uci commit firewall /etc/init.d/firewall restart ``` --- #### 四、深度清理与验证 1. **检查内核模块** ```bash lsmod | grep -E 'iptable|ip_tables' # 应无输出 ``` 2. **验证规则纯净度** ```bash nft list ruleset | grep -i 'hook input' -A20 # 查看INPUT链规则是否仅含nftables配置 ``` --- #### 五、常见问题处理 1. **依赖冲突解决方案** 若出现`package xxx is depended upon by packages: yyy`错误: ```bash opkg remove --force-depends [冲突包名] ``` 2. **混合规则残留处理** 手动清除`/etc/nftables.d/`目录下的遗留配置: ```bash find /etc/nftables.d/ -name "*-iptables*" -delete ``` --- ### 关键技术说明 1. **OpenWrt版本差异** | 版本范围 | 防火墙实现 | 内核支持 | |---------------|--------------|------------------| | ≤19.07 | firewall3 | iptables | | ≥21.02 | firewall4 | nftables | 2. **兼容层机制** `iptables-nft`本质是通过`xtables-nft-multi`将iptables命令转换为nftables规则,可通过以下命令检测: ```bash update-alternatives --list iptables ``` --- ### 操作前后对比验证 | 检测项 | 操作前示例 | 正常目标状态 | |---------------------|---------------------------|------------------------| | `iptables -L` | 显示多行规则 | `iptables: No chain/target/match by that name` | | `nft list ruleset` | 含`inet fw4`等标准规则集 | 无`ip`/`ip6`前缀的遗留规则 | --- #### 注意事项 1. **备份配置** ```bash sysupgrade -b /tmp/backup.tar.gz ``` 2. **服务重启顺序** ```bash /etc/init.d/network restart /etc/init.d/firewall reload ``` 3. **硬件加速兼容性** 若使用MTK/高通等硬路由,需确认卸载iptables后offloading功能正常: ```bash ethtool -k eth0 | grep hw-tc-offload ``` 通过以上步骤,可彻底清除OpenWrt系统中iptables的规则残留,确保网络栈完全基于nftables运行。建议操作完成后重启设备进行最终验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值