Iptables-Legacy 和 Iptables-Nft 规则转换
背景
在现代 Linux 发行版中,iptables 命令实际上可能有两个后端实现:传统的 iptables-legacy 和新的 iptables-nft。后者是一个兼容层,其底层使用的是 nftables 框架。
iptables-save 和 iptables-legacy-save 分别用于保存这两个版本的防火墙规则。由于它们的格式和底层机制不同,不能直接合并。正确的做法是将 iptables-legacy 规则转换为 nftables 格式。
使用 iptables-restore-translate 工具自动转换
iptables-restore-translate 是一个用于将 iptables-legacy 规则转换为 nftables 格式的官方工具。
1. 安装工具
如果你的系统中没有 iptables-restore-translate 命令,可以通过包管理器安装最新的 iptables 或 iptables-nft 软件包。
Debian/Ubuntu:
1 2sudo apt update sudo apt install iptablesCentOS/RHEL:
1 2 3sudo yum install iptables-nft # 或者 sudo dnf install iptables-nft
2. 转换步骤
保存旧版规则:
1iptables-legacy-save > legacy-rules.txt使用工具进行转换:
1iptables-restore-translate -f legacy-rules.txt > nft-rules.nft加载新规则: 在确认
nft-rules.nft文件内容无误后,使用nft命令加载:1nft -f nft-rules.nft
手动转换规则
如果你无法安装 iptables-restore-translate 工具,则需要手动将规则从 iptables-legacy 语法转换为 nftables 语法。
示例
iptables-legacy 规则:
1iptables -A INPUT -p tcp --dport 22 -j ACCEPT等效的 nftables 规则:
1nft add rule ip filter INPUT tcp dport 22 accept
手动转换虽然繁琐,但在无法使用工具时是唯一的选择。你需要熟悉 nftables 的语法,并逐条翻译现有规则。
通过以上方法,你可以成功地将旧的 iptables 规则迁移到新的 nftables 框架,实现平滑过渡。
完整迁移流程示例
以下是一个完整的操作流程,用于将 iptables-legacy 规则迁移到 iptables (nf_tables)。
确认系统环境
首先,确认系统中
iptables和iptables-legacy的版本,明确当前的默认后端。1 2 3 4 5iptables -V # > iptables v1.8.7 (nf_tables) iptables-legacy -V # > iptables v1.8.7 (legacy)备份旧规则
将当前的
iptables-legacy规则保存到文件中,以便进行转换。这是非常重要的一步,确保你有原始规则的备份。1iptables-legacy-save > legacy-rules.txt转换规则
使用
iptables-restore-translate工具将备份的旧规则文件转换为nftables格式。1iptables-restore-translate -f legacy-rules.txt > nft-rules.nft审查新规则
在应用新规则之前,务必打开并检查
nft-rules.nft文件的内容,确保转换结果符合预期。1cat nft-rules.nft清空旧规则(可选但推荐)
为了避免新旧规则冲突,可以在加载新规则前清空所有旧的
iptables-legacy规则。1 2 3 4 5 6 7 8 9iptables-legacy -F iptables-legacy -X iptables-legacy -t nat -F iptables-legacy -t nat -X iptables-legacy -t mangle -F iptables-legacy -t mangle -X iptables-legacy -P INPUT ACCEPT iptables-legacy -P FORWARD ACCEPT iptables-legacy -P OUTPUT ACCEPT加载新规则
使用
nft命令加载转换后的新规则。1nft -f nft-rules.nft验证规则
使用
iptables(它现在是nftables的前端) 命令来查看规则是否已成功加载。1iptables -L -v -n
通过以上步骤,你就可以安全、完整地将防火墙规则从 iptables-legacy 迁移到 nftables 进行统一管理。