NFTables

什么是 nftables?

nftables 是由 Netfilter 项目开发的新一代 Linux 防火墙框架,用于替代 iptables、ip6tables、arptables 和 ebtables。它提供了一个统一的、简化的接口来定义、管理和查询防火墙规则,旨在提高性能和灵活性。

nftables 的特点

  1. 统一的命令行工具

    • nftables 提供了一个名为 nft 的命令行工具,统一管理 IPv4、IPv6、防火墙、NAT 和桥接过滤。
  2. 改进的规则表达能力

    • 使用类 C 的表达式语法,可以更灵活地定义复杂规则。
  3. 高效的规则集管理

    • 支持批量添加和删除规则,减少了处理大量规则时的性能开销。
  4. 内核空间和用户空间的分离

    • nftables 将规则集的评估逻辑移到了内核空间,从而提高了效率。

基本概念

  • 表(table)

    • 用于组织规则集,类似于数据库中的表。每个表可以包含多个链和规则。
  • 链(chain)

    • 表中的逻辑结构,包含一组按顺序执行的规则。链可以是内置的(如 inputoutputforward)或用户自定义的。
  • 规则(rule)

    • 定义具体的过滤条件和动作(如接受、拒绝、日志记录等)。
  • 集合(set)和映射(map)

    • 集合用于存储多个匹配项(如 IP 地址列表),映射用于将一个值映射到另一个值(如端口重定向)。

基本用法示例

  1. 创建表

    nft add table ip filter
    
  2. 添加链

    nft add chain ip filter input { type filter hook input priority 0 \; }
    
  3. 添加规则

    nft add rule ip filter input ip saddr 192.168.1.0/24 counter accept
    
  4. 使用集合

    nft add set ip filter blacklist { type ipv4_addr \; }
    nft add element ip filter blacklist { 192.168.1.100, 192.168.1.101 }
    nft add rule ip filter input ip saddr @blacklist drop
    

迁移到 nftables

从 iptables 迁移到 nftables 并不困难。可以使用 iptables-translate 工具将现有的 iptables 规则转换为 nftables 规则,例如:

iptables-translate -A INPUT -s 192.168.1.0/24 -j ACCEPT

会生成类似以下的 nftables 规则:

nft add rule ip filter input ip saddr 192.168.1.0/24 accept

高级功能

  • 动态更新规则

    • nftables 支持在不影响现有连接的情况下动态更新规则。
  • 扩展模块

    • 支持各种扩展模块,如 nft_set, nft_ct 等,用于更高级的网络功能,如连接跟踪。

结论

nftables 提供了一种更现代化、更高效的防火墙管理方式。通过统一的命令行工具、灵活的规则表达能力和改进的性能,nftables 成为替代 iptables 的理想选择。对于需要管理复杂网络配置的管理员来说,学习和采用 nftables 是非常值得的。

参考资料