nftables精讲与例子(NAT、限速、限流量、禁ping等例子)

发布时间:2026/9/28 3:14:16

nftables精讲与例子(NAT、限速、限流量、禁ping等例子)
nftables精讲与例子NAT、限速、限流量、禁ping等例子为什么选择nftables在Linux网络管理领域iptables曾长期占据统治地位。但随着网络规模扩大和功能需求增加iptables的局限性日益显现规则集难以维护、性能瓶颈、语法不够直观。nftables作为新一代防火墙工具由Netfilter团队开发旨在解决这些问题。nftables最大的优势在于其简洁、高效和可扩展性。它使用单一的nft命令替代了iptables、ip6tables、arptables、ebtables等多个工具语法更像现代编程语言支持集合、映射、流量计量等高级功能。对于系统管理员、运维工程师或网络爱好者掌握nftables是提升技能的重要一步。## nftables核心概念在深入例子之前先理解几个关键概念-表table规则集的容器包含多个链。例如inet filter表用于IPv4和IPv6的通用过滤。-链chain规则的序列定义了数据包的处理路径。常见类型包括input入站、output出站、forward转发。-规则rule匹配条件 动作。匹配条件如源地址、端口动作如accept、drop、masquerade。-表达式expression规则中的匹配元素如ip saddr、tcp dport。nftables默认使用inet地址族同时处理IPv4和IPv6极大简化配置。—## 实战例子1配置NAT网络地址转换NAT是网络中最常用的功能之一比如让内网机器通过一台Linux服务器访问互联网。以下例子使用nftables实现源地址转换SNAT。### 场景描述- 内网网卡eth1IP段192.168.1.0/24- 外网网卡eth0IP为203.0.113.1- 目标内网机器访问外网时源IP被替换为外网IP。### 配置步骤bash# 1. 创建表地址族inet处理IPv4和IPv6nft add table inet nat# 2. 创建链postrouting用于数据包离开前的处理nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }# 3. 添加规则对来自eth1且目标不是本机局域网的数据包进行SNATnft add rule inet nat postrouting oif eth0 ip saddr 192.168.1.0/24 masquerade# 4. 查看当前规则集nft list ruleset解释-oif eth0数据包从eth0接口发出。-ip saddr 192.168.1.0/24源IP属于内网段。-masquerade动态SNAT自动使用eth0的IP作为源地址适合IP变化场景如PPPoE。### 完整脚本示例bash#!/bin/bash# 文件名setup_nat.sh# 功能配置NAT并使用nftables持久化# 清空旧规则谨慎操作nft flush ruleset# 创建表和链nft add table inet natnft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }# 添加NAT规则nft add rule inet nat postrouting oif eth0 ip saddr 192.168.1.0/24 masquerade# 保存当前规则到文件某些发行版需要nft list ruleset /etc/nftables.confecho NAT规则已配置并保存至 /etc/nftables.conf注意运行脚本前确保内核支持nftables和masquerade需加载nf_nat模块。—## 实战例子2限速与限流量Rate Limiting限速和限流量是防止网络滥用、保护带宽的重要手段。nftables通过limit表达式实现基于连接或数据包的速率控制。### 场景对SSH连接进行限速防止暴力破解假设我们想限制来自单个IP的SSH连接频率每秒最多5个新连接。bash# 创建过滤表nft add table inet filter# 创建输入链nft add chain inet filter input { type filter hook input priority 0 \; }# 添加限速规则对SSH端口22的TCP连接限制每秒5个nft add rule inet filter input tcp dport 22 \ ct state new limit rate 5/minute burst 10 packets accept# 超过限制的包将被丢弃默认动作是accept需显式dropnft add rule inet filter input tcp dport 22 ct state new drop解释-ct state new仅匹配新建连接。-limit rate 5/minute每分钟最多5个新连接。-burst 10 packets允许短时间内突发10个包。- 超过限制后第二条规则会丢弃这些包。### 场景对HTTP流量进行总带宽限制限制来自192.168.1.0/24的HTTP请求总速率为每秒100KB。bash# 创建流量计量器meternft add meter inet filter http_meter { ip saddr limit rate 100 kbytes/second }# 应用计量器到规则nft add rule inet filter input tcp dport 80 \ meter http_meter { ip saddr limit rate 100 kbytes/second } accept# 超出限制的包被默认丢弃注意meter是nftables的高级特性允许动态跟踪每个源IP的速率。但需要注意meter会消耗内存。—## 实战例子3禁pingICMP Echo Request禁ping是常见的网络策略用于减少网络探测或缓解攻击。以下例子禁止所有外部ping请求但允许内部网络。### 场景仅允许内网192.168.1.0/24ping服务器bash# 在filter表的input链中添加规则nft add rule inet filter input ip protocol icmp \ icmp type echo-request ip saddr 192.168.1.0/24 acceptnft add rule inet filter input ip protocol icmp \ icmp type echo-request drop解释-ip protocol icmp匹配ICMP协议。-icmp type echo-request匹配ping请求。- 第一条规则允许内网ping通过第二条规则丢弃所有其他ping请求。### 完整的防ping配置bashnft add table inet filternft add chain inet filter input { type filter hook input priority 0 \; }# 允许内网pingnft add rule inet filter input ip protocol icmp icmp type echo-request \ ip saddr 192.168.1.0/24 accept# 丢弃外部ping并记录日志nft add rule inet filter input ip protocol icmp icmp type echo-request \ log prefix PING BLOCKED: drop# 允许其他ICMP类型如目的不可达避免影响网络诊断nft add rule inet filter input ip protocol icmp accept提示完全禁止所有ICMP可能导致MTU发现等网络问题建议谨慎。—## 高级例子结合集合与映射nftables支持集合set和映射map使得规则管理更灵活。例如维护一个允许访问SSH的IP白名单。bash# 创建IP集合nft add set inet filter ssh_whitelist { type ipv4_addr \; }nft add element inet filter ssh_whitelist { 192.168.1.10, 203.0.113.50 }# 添加规则仅白名单IP可访问SSHnft add rule inet filter input tcp dport 22 ip saddr ssh_whitelist acceptnft add rule inet filter input tcp dport 22 drop优势动态添加或删除IP无需修改规则只需操作集合bashnft add element inet filter ssh_whitelist { 10.0.0.5 }nft delete element inet filter ssh_whitelist { 203.0.113.50 }—## 总结nftables作为iptables的继任者带来了更清晰的语法、更高的性能和更强的功能。本文通过NAT、限速、禁ping等实际例子展示了nftables的核心用法1.NAT使用masquerade轻松实现源地址转换适合家庭或企业路由场景。2.限速与限流量利用limit表达式和meter计量器精准控制连接频率和带宽。3.禁ping通过规则匹配ICMP类型灵活控制ping请求。4.集合与映射高级用法让规则管理更动态、更易于维护。最佳实践建议- 始终使用inet地址族统一处理IPv4和IPv6。- 规则顺序很重要更具体的规则放在前面默认策略放最后。- 使用nft list ruleset定期检查配置避免错误。- 生产环境建议将规则保存到/etc/nftables.conf并在开机时自动加载。网络的世界没有终点nftables的强大远不止于此。从简单的防火墙到复杂的流量整形掌握它你就拥有了Linux网络管理的瑞士军刀。现在打开终端开始你的nftables之旅吧

相关新闻

如何免费解锁九大网盘高速下载?这个开源工具让你告别限速烦恼

如何免费解锁九大网盘高速下载?这个开源工具让你告别限速烦恼

2026/9/8 7:15:51

如何免费解锁九大网盘高速下载?这个开源工具让你告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…

Go语言并发编程:从volatile原理到内存模型与职业发展思考

Go语言并发编程:从volatile原理到内存模型与职业发展思考

2026/9/26 17:24:27

1. 项目概述:从“volatile”到职业焦虑的跨界思考 最近在整理Go语言并发编程的笔记时,我又一次遇到了那个经典且容易引发困惑的问题: “在Go里,什么时候需要用到volatile?” 这个问题看似是纯技术细节,但…

7 月 AI CLI 工具开发总结:从 idea 到可用的 31 天全记录与关键决策

7 月 AI CLI 工具开发总结:从 idea 到可用的 31 天全记录与关键决策

2026/9/9 15:23:56

7 月 AI CLI 工具开发总结:从 idea 到可用的 31 天全记录与关键决策 一、31 天路线图:从混乱到有序的结构化复盘 7 月 1 号我打开 cargo new 的时候,脑子里只有一句话:"我要一个能在终端里直接问 AI 的东西"。31 天后&a…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…