Nftables官方网站
使用nftables配置和管理防火墙规则相对于iptables来说更加灵活和强大。
1. 什么是 nftables
nftables 是 Linux 内核的一个包过滤和网络地址转换框架,是 iptables 的继任者。它集成了所有网络表(IPv4, IPv6, ARP, ebtables)到一个统一的框架中,并提供了更高效和灵活的包过滤和管理机制。
2. nftables 的优势
统一的框架:取代了 iptables、ip6tables、arptables 和 ebtables 等工具。
简洁的语法:nftables 采用了一种更为简洁和高级的语言,使规则编写和管理更加方便。
高效的规则处理:使用了更高效的数据结构,减少了内存占用并提升了处理速度。
动态更新:在不中断现有连接的情况下动态更新规则集。
复杂匹配和操作:更灵活的匹配条件、映射和操作。
3. 基本概念
表(table):表是规则的容器,可以包含多个链和规则。
链(chain):链是在某个特定时刻应用规则的一个序列。
规则(rule):规则定义了具体的过滤或者转换操作。
集(set):集用于存储动态更新的数据,比如 IP 地址列表。
4. 安装和基本配置
在大多数现代 Linux 发行版上,nftables 通常已经预装。如果没有,可以使用包管理器安装:sudo apt-get install nftables # 对 Debian/Ubuntu 系统
sudo yum install nftables # 对 CentOS/RHEL 系统
启动和启用 nftables 服务:sudo systemctl start nftables
sudo systemctl enable nftables
添加规则: 通过添加规则来定义如何处理匹配的数据包。以下是一个允许进入系统的SSH连接的规则示例:nft add rule ip filter input tcp dport 22 accept
保存规则: 默认情况下,nftables并不会自动将规则保存到磁盘上。你可以将规则保存到一个文件中,以便在系统重启后加载规则。将当前规则保存到文件中:nft list ruleset > /etc/nftables.conf
加载规则: 要加载之前保存的规则文件,可以使用以下命令:nft -f /etc/nftables.conf
删除规则: 如果需要删除某条规则,你可以使用nft delete命令。例如,删除之前创建的SSH连接规则:nft delete rule ip filter input tcp dport 22 accept
清空规则: 要清空所有规则,可以使用以下命令:nft flush ruleset
5. 示例:创建简单防火墙规则
假设你需要创建一个防火墙规则,允许 SSH 连接并禁止所有其他连接。
创建表和链:sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
添加规则:
允许来自本地回环接口的流量sudo nft add rule inet filter input iif lo accept
允许已建立和相关连接的流量sudo nft add rule inet filter input ct state established,related accept
允许 SSH 连接sudo nft add rule inet filter input tcp dport ssh accept
丢弃其他所有流量sudo nft add rule inet filter input drop
查看规则:
查看当前表和规则:sudo nft list ruleset
输出可能类似于:
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
iif "lo" accept
ct state established,related accept
tcp dport ssh accept
drop
}
}
6. 高级功能和使用技巧
使用集(sets)
在防火墙规则中,可以使用集来匹配动态变化的数据。下面是一个示例,防止来自特定 IP 地址的访问:
创建一个集:sudo nft add set inet filter blacklist { type ipv4_addr \; }
添加某个 IP 到集:sudo nft add element inet filter blacklist { 192.168.1.100 }
修改规则引用集:sudo nft add rule inet filter input ip saddr @blacklist drop
NAT 和转发
nftables 也可以用于 NAT 和包转发。以下是一个简单的 NAT 示例:
创建 NAT 表和链:sudo nft add table ip nat
sudo nft add chain ip nat PREROUTING { type nat hook prerouting priority 0 \; }
sudo nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }
添加规则:
- 将入站 NAT 流量转发到内网服务器
sudo nft add rule ip nat PREROUTING tcp dport 80 dnat to 192.168.1.10
- 出站 NAT(伪装)规则
sudo nft add rule ip nat POSTROUTING oif eth0 masquerade
总结
nftables 是一种强大且灵活的网络包过滤工具,是 iptables 的优秀继任者。它通过简洁的语法和高效的规则处理,提高了网络管理的效率和灵活性。通过对基本概念、安装配置、规则示例以及高级功能的学习和掌握,可以有效地利用 nftables 来保护和管理网络环境。