- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Linux之nftables安装及简单使用
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
1. 概述
NFTables 是 Netfilter 项目的一部分,于 Linux 内核 3.13 版本引入,用于替代传统的 iptables、ip6tables、arptables 和 ebtables 工具。它提供了一个更简洁、高效的框架来管理网络数据包过滤、网络地址转换(NAT)和数据包修改。
2. 架构与核心概念
2.1 核心组件
Tables(表):用于分类规则,常见的表有 ip、ip6、inet、arp、bridge、netdev。
Chains(链):规则链,可以是内置链(如 input、output、forward)或用户自定义链。
Rules(规则):包含匹配表达式和动作的过滤规则。
Expressions(表达式):用于匹配数据包的条件,如源地址、目标地址、协议等。
Actions(动作):对匹配数据包执行的操作,如 accept、drop、jump 等。
2.2 与传统 iptables 的区别
统一的语法结构,不再区分 IPv4 和 IPv6。
使用集合和映射,提高规则处理效率。
支持规则集的原子更新,减少对系统的影响。
3. 安装与基本命令
3.1 安装
# Debian/Ubuntu
sudo apt install nftables
# RHEL/CentOS/Fedora
sudo yum install nftables
3.2 服务管理
# 启动服务
sudo systemctl start nftables
# 开机自启
sudo systemctl enable nftables
# 查看状态
sudo systemctl status nftables
4. 基本语法
4.1 创建表
nft add table inet filter
4.2 创建链
# 创建基础链
nft add chain inet filter input { type filter hook input priority 0\\; }
# 创建自定义链
nft add chain inet filter my_chain
4.3 添加规则
# 允许 SSH 连接
nft add rule inet filter input tcp dport 22 accept
# 允许回环接口流量
nft add rule inet filter input iif lo accept
# 允许已建立和相关的连接
nft add rule inet filter input ct state established,related accept
# 丢弃其他所有流量
nft add rule inet filter input drop
5. 高级配置
5.1 使用集合
# 创建命名集合
nft add set inet filter allowed_ips { type ipv4_addr\\; }
# 添加元素到集合
nft add element inet filter allowed_ips { 192.168.1.100, 192.168.1.200 }
# 使用集合匹配
nft add rule inet filter input ip saddr @allowed_ips accept
5.2 使用映射
# 创建映射
nft add map inet filter port_map { type inet_service : verdict \\; }
# 向映射添加项目
nft add element inet filter port_map { 80 : accept, 443 : accept, 22 : drop }
# 使用映射
nft add rule inet filter input tcp dport vmap @port_map
5.3 NAT 配置
# 创建 nat 表
nft add table nat
# 创建 prerouting 链
nft add chain nat prerouting { type nat hook prerouting priority -100\\; }
# 创建 postrouting 链
nft add chain nat postrouting { type nat hook postrouting priority 100\\; }
# DNAT 规则
nft add rule nat prerouting daddr 203.0.113.1 tcp dport 80 dnat to 192.168.1.100:8080
# SNAT 规则
nft add rule nat postrouting oif eth0 snat to 203.0.113.1
6. 配置文件
6.1 配置文件格式
NFTables 配置文件通常位于 /etc/nftables.conf:
#!/usr/sbin/nft -f
# 清空所有规则
flush ruleset
# 定义表
table inet filter {
# 定义集合
set allowed_ips {
type ipv4_addr
elements = { 192.168.1.100, 192.168.1.200 }
}
set blocked_ports {
type inet_service
elements = { 25, 135, 137, 138, 139, 445 }
}
# 定义链
chain input {
type filter hook input priority 0; policy drop;
# 允许回环接口
iif lo accept
# 允许已建立和相关的连接
ct state established,related accept
# 允许 ICMP
meta l4proto icmp accept
meta l4proto ipv6-icmp accept
# 允许来自允许列表的 IP
ip saddr @allowed_ips accept
# 允许 SSH
tcp dport 22 accept
# 允许 HTTP/HTTPS
tcp dport { 80, 443 } accept
# 阻止危险端口
tcp dport @blocked_ports drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
6.2 加载配置
# 从文件加载配置
nft -f /etc/nftables.conf
# 测试配置文件语法
nft -c -f /etc/nftables.conf
7. 实用命令
7.1 查看规则
# 查看所有规则
nft list ruleset
# 查看指定表的规则
nft list table inet filter
# 查看指定链的规则
nft list chain inet filter input
7.2 监控流量
# 跟踪特定规则
nft add rule inet filter input tcp dport 22 counter accept
# 查看计数器
nft list ruleset -a
7.3 规则管理
# 插入规则
nft insert rule inet filter input position 3 tcp dport 3306 drop
# 删除规则
nft delete rule inet filter input handle 3
# 清空链
nft flush chain inet filter input
# 删除表
nft delete table inet filter
8. 性能优化建议
8.1 规则组织
将最常匹配的规则放在前面
使用集合和映射优化匹配效率
合并相似规则减少规则数量
8.2 连接跟踪优化
# 调整连接跟踪表大小echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max
9. 故障排除
9.1 常用诊断命令
# 查看规则处理情况
nft monitor
# 查看规则统计
nft list ruleset -a
# 检查系统日志
journalctl -u nftables -f
9.2 常见问题
规则不生效:检查链的优先级和钩子类型是否正确
连接跟踪问题:确认 conntrack模块已加载
性能问题:使用 nft monitor查看规则匹配频率
10. 迁移指南
10.1 从 iptables 迁移
# 将 iptables 规则转换为 nftables
iptables-save > iptables.rules
iptables-restore-translate -f iptables.rules > nftables.rules
nft -f nftables.rules
11. 安全最佳实践
默认策略设置为 DROP
仅开放必要的端口和服务
使用有意义的链和规则名称
定期审查和清理旧规则
使用版本控制管理配置文件
12. 参考资料
官方文档:https://wiki.nftables.org
手册页:man nft、man nftables
Netfilter 项目:https://www.netfilter.org
注意:在生产环境中应用任何防火墙规则前,请先在测试环境中验证,并确保有恢复计划(如通过串行控制台访问)。
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP