Iptables-Legacy 和 Iptables-Nft 规则转换

背景

在现代 Linux 发行版中,iptables 命令实际上可能有两个后端实现:传统的 iptables-legacy 和新的 iptables-nft。后者是一个兼容层,其底层使用的是 nftables 框架。

iptables-saveiptables-legacy-save 分别用于保存这两个版本的防火墙规则。由于它们的格式和底层机制不同,不能直接合并。正确的做法是将 iptables-legacy 规则转换为 nftables 格式。

使用 iptables-restore-translate 工具自动转换

iptables-restore-translate 是一个用于将 iptables-legacy 规则转换为 nftables 格式的官方工具。

1. 安装工具

如果你的系统中没有 iptables-restore-translate 命令,可以通过包管理器安装最新的 iptablesiptables-nft 软件包。

  • Debian/Ubuntu:

    1
    2
    
    sudo apt update
    sudo apt install iptables
  • CentOS/RHEL:

    1
    2
    3
    
    sudo yum install iptables-nft
    # 或者
    sudo dnf install iptables-nft

2. 转换步骤

  1. 保存旧版规则

    1
    
    iptables-legacy-save > legacy-rules.txt
  2. 使用工具进行转换

    1
    
    iptables-restore-translate -f legacy-rules.txt > nft-rules.nft
  3. 加载新规则: 在确认 nft-rules.nft 文件内容无误后,使用 nft 命令加载:

    1
    
    nft -f nft-rules.nft

手动转换规则

如果你无法安装 iptables-restore-translate 工具,则需要手动将规则从 iptables-legacy 语法转换为 nftables 语法。

示例

  • iptables-legacy 规则:

    1
    
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 等效的 nftables 规则:

    1
    
    nft add rule ip filter INPUT tcp dport 22 accept

手动转换虽然繁琐,但在无法使用工具时是唯一的选择。你需要熟悉 nftables 的语法,并逐条翻译现有规则。

通过以上方法,你可以成功地将旧的 iptables 规则迁移到新的 nftables 框架,实现平滑过渡。

完整迁移流程示例

以下是一个完整的操作流程,用于将 iptables-legacy 规则迁移到 iptables (nf_tables)

  1. 确认系统环境

    首先,确认系统中 iptablesiptables-legacy 的版本,明确当前的默认后端。

    1
    2
    3
    4
    5
    
    iptables -V
    # > iptables v1.8.7 (nf_tables)
    
    iptables-legacy -V
    # > iptables v1.8.7 (legacy)
  2. 备份旧规则

    将当前的 iptables-legacy 规则保存到文件中,以便进行转换。这是非常重要的一步,确保你有原始规则的备份。

    1
    
    iptables-legacy-save > legacy-rules.txt
  3. 转换规则

    使用 iptables-restore-translate 工具将备份的旧规则文件转换为 nftables 格式。

    1
    
    iptables-restore-translate -f legacy-rules.txt > nft-rules.nft
  4. 审查新规则

    在应用新规则之前,务必打开并检查 nft-rules.nft 文件的内容,确保转换结果符合预期。

    1
    
    cat nft-rules.nft
  5. 清空旧规则(可选但推荐)

    为了避免新旧规则冲突,可以在加载新规则前清空所有旧的 iptables-legacy 规则。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    iptables-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
  6. 加载新规则

    使用 nft 命令加载转换后的新规则。

    1
    
    nft -f nft-rules.nft
  7. 验证规则

    使用 iptables (它现在是 nftables 的前端) 命令来查看规则是否已成功加载。

    1
    
    iptables -L -v -n

通过以上步骤,你就可以安全、完整地将防火墙规则从 iptables-legacy 迁移到 nftables 进行统一管理。

0%