尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

筑牢企业“东墙”:Linux防火墙从iptables到nftables的平滑迁移与实战

筑牢企业“东墙”:Linux防火墙从iptables到nftables的平滑迁移与实战
📅 发布时间:2026/7/2 1:41:47

一、 为什么要换掉 iptables?痛点直击

如果你管理过稍具规模的企业网络,你一定遇到过以下情况:

  1. 规则匹配慢:iptables 采用“链式匹配”,一条数据包要依次匹配规则直到命中。当规则成千上万条(如封禁大量恶意IP)时,性能呈线性下降。

  2. 管理割裂:IPv4 用iptables,IPv6 用ip6tables,ARP 用arptables,ebtables 管桥接。一套网络策略要写三遍,极易出错。

  3. 语法反人类:-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT,每次敲命令都像在考认证,稍微手抖一个符号就全盘皆输。

  4. 原子性缺失:更新规则时,iptables 是一条条刷入的。在规则刷入间隙,可能出现瞬间规则不一致导致的连接中断或安全漏洞。

nftables 的解决方案:

  • 单一框架:统一管理 IPv4、IPv6、ARP、桥接流量。

  • 内置集合(Sets):可以将多个IP、端口放入一个集合,规则只需一条,匹配效率极高(O(1))。

  • 原子更新:所有规则作为一个整体一次性提交,要么全成功,要么全失败。

  • 更易读的语法:接近自然语言,支持变量和包含文件。


二、 环境准备:检查与安装

大多数现代 Linux 发行版(CentOS 8+/RHEL 8+/Debian 10+/Ubuntu 20.04+)已经默认包含了 nftables。

1. 检查当前状态

# 检查 nftables 服务状态 systemctl status nftables # 查看现有 nftables 规则(如果刚装可能为空) nft list ruleset

2. 安装工具包

如果系统未安装,请执行:

# CentOS / RHEL yum install -y nftables # Debian / Ubuntu apt update && apt install -y nftables

3. 备份现有 iptables 规则(关键!)

迁移的第一步永远是备份。

# 备份 IPv4 规则 iptables-save > /root/iptables.rules.v4 # 备份 IPv6 规则 ip6tables-save > /root/iptables.rules.v6

三、 核心概念转换:从 iptables 到 nftables

不要试图直接翻译命令,要理解概念的转变。这是企业级迁移中最难的一步。

iptables 概念

nftables 对应

解释

Table

Table

表,容纳链的容器。nftables 表无预设(如 filter, nat),需自定义。

Chain

Chain

链,规则的集合。nftables 链分为基础链(挂载到钩子点)和常规链。

Rule

Rule

规则,匹配条件和处理动作。

Match (-p tcp)

Expression (meta l4proto tcp)

匹配条件,语法更统一。

Target (-j ACCEPT)

Statement (accept)

处理动作,关键字更简洁。

IP Set (ipset)

Set

核心亮点。nftables 内置集合,无需额外安装 ipset。

State Module

Conntrack

连接跟踪,集成度更高。

钩子点(Hooks):

nftables 使用钩子点与内核网络栈交互,对应关系如下:

  • prerouting= PREROUTING

  • input= INPUT

  • forward= FORWARD

  • output= OUTPUT

  • postrouting= POSTROUTING


四、 实战迁移:构建一个企业级 Web 防火墙

假设我们有一个典型的企业 Web 服务器,需求如下:

  1. 默认拒绝所有入站流量。

  2. 允许 SSH (22)、HTTP (80)、HTTPS (443)。

  3. 允许 Ping (ICMP)。

  4. 允许来自内网管理段(10.0.10.0/24)的所有访问。

  5. 封禁一个已知的恶意 IP 列表。

  6. 限制 SSH 连接频率,防暴力破解。

1. iptables 的传统写法(对比用)

# 默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许回环和已建立连接 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许管理网段 iptables -A INPUT -s 10.0.10.0/24 -j ACCEPT # 允许服务端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许 ICMP iptables -A INPUT -p icmp -j ACCEPT # SSH 限流 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

2. nftables 的现代写法(推荐)

nftables 支持配置文件模式,我们将规则写入/etc/nftables.conf。

#!/usr/sbin/nft -f # 清除现有规则集,确保干净的环境 flush ruleset # 定义表(table)。这里我们创建一个名为 'filter' 的 ipv4 表 table ip filter { # 定义一个名为 'blacklist' 的集合(Set),存放恶意 IPv4 地址 set blacklist { type ipv4_addr flags interval elements = { 192.168.1.100, 185.143.223.0/24 } } # 定义基础链(base chain)'input' chain input { type filter hook input priority 0; policy drop; # 1. 丢弃来自黑名单的流量(效率极高,O(1)查找) ip saddr @blacklist counter drop comment "Drop traffic from blacklisted IPs" # 2. 允许回环接口 iif "lo" accept comment "Accept loopback traffic" # 3. 允许已建立的连接和相关连接 ct state established,related accept comment "Accept established/related connections" # 4. 允许管理网段 ip saddr 10.0.10.0/24 accept comment "Allow internal management network" # 5. 允许 ICMP (Ping) ip protocol icmp accept comment "Accept ICMP" # 6. 允许服务端口 tcp dport { 22, 80, 443 } accept comment "Accept SSH, HTTP, HTTPS" # 7. SSH 连接限速(使用 limit 表达式) # 每分钟最多 5 个新连接,突发不超过 3 个 tcp dport 22 ct state new limit rate 5/minute burst 3 packets accept tcp dport 22 ct state new drop comment "Drop excessive SSH connection attempts" } # 定义 forward 链 chain forward { type filter hook forward priority 0; policy drop; } # 定义 output 链 chain output { type filter hook output priority 0; policy accept; } } # 如果你想同时管理 IPv6,可以再定义一个 table ip6 filter table ip6 filter { chain input { type filter hook input priority 0; policy drop; iif "lo" accept ct state established,related accept # IPv6 必须允许 ICMPv6,否则邻居发现协议会失效 ip6 nexthdr ipv6-icmp accept # 允许 SSH tcp dport 22 accept } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } }

代码解析:

  • flush ruleset:启动时的清理动作,保证原子性。

  • set blacklist:这就是 nftables 的灵魂。将 IP 放入集合,匹配速度极快。

  • { 22, 80, 443 }:匿名集合,一行代码搞定多端口匹配,告别繁琐的-p tcp --dport 22 -j ACCEPT。

  • limit rate 5/minute:原生支持限速,不再依赖recent模块。

  • comment:规则注释,运维人员的福音,几个月后看规则也能秒懂意图。


五、 管理与维护:企业级操作规范

1. 加载与生效

编辑完/etc/nftables.conf后,不要直接敲命令,而是加载配置文件:

# 检查语法(非常重要!) nft -c -f /etc/nftables.conf # 如果没有报错,加载规则 systemctl reload nftables # 或者 nft -f /etc/nftables.conf # 设置开机自启 systemctl enable nftables

2. 动态管理黑名单

企业中经常需要临时封禁 IP。使用 nftables 非常简单:

# 添加一个 IP 到黑名单 nft add element ip filter blacklist { 1.2.3.4 } # 删除一个 IP nft delete element ip filter blacklist { 1.2.3.4 } # 查看黑名单内容 nft list set ip filter blacklist

注意:这种方式添加的 IP 在reload后会丢失。如果需要永久生效,请编辑/etc/nftables.conf文件,将其加入elements列表中,然后reload。

3. 查看规则

# 查看所有规则(带行号,方便定位) nft list ruleset -a # 只查看 filter 表的规则 nft list table ip filter # 只查看 input 链 nft list chain ip filter input

六、 迁移工具:让机器干活

如果你不想手写规则,可以使用iptables-translate工具辅助迁移。

# 翻译一条 iptables 规则 iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT # 输出:nft add rule ip filter INPUT tcp dport 22 counter accept

警告:翻译工具生成的规则通常比较生硬,不会自动帮你优化成集合(Set)或利用新特性。它适合作为参考,最终的规则文件建议还是手工整理,以获得最佳的性能和可读性。


七、 排错与回滚

1. 规则不生效?

  • 检查钩子点是否正确挂载:nft list hooks ip。

  • 检查默认策略(policy):如果是 drop,确保有一条规则允许回包(established,related)。

  • 使用nft monitor trace追踪数据包的匹配路径(高级调试,非常强大)。

2. 紧急回滚

万一新规则把自己锁在门外(虽然 nftables 原子性降低了此风险,但仍需防范):

  1. 通过服务器控制台(IPMI/iDRAC/云控制台)登录。

  2. 停止 nftables:systemctl stop nftables。

  3. 恢复 iptables:iptables-restore < /root/iptables.rules.v4。

  4. 检查网络连通性。


八、 总结:拥抱变化,提升效能

从 iptables 迁移到 nftables,不仅仅是换了一个命令,更是运维思维的升级。

  • 性能上:内置集合和高效的匹配算法,让服务器在面对 DDoS 攻击或大流量时更加从容。

  • 管理上:统一的语法、配置文件化管理、原子更新,大大降低了人为错误的风险。

  • 扩展性:对 IPv6 的原生支持和更灵活的表达式,为未来的网络架构打下了坚实基础。

对于企业而言,现在正是迁移的最佳时机。不要等到 iptables 彻底成为历史包袱时才动手。从一台边缘服务器开始,尝试编写你的第一个 nftables 配置文件吧。


如果这篇干货帮你理清了思路,请点赞、收藏、关注!

相关新闻

  • 遗传算法实操调参与收敛性诊断实战指南
  • 卡梅德生物技术快报|酒酿酵母过表达工程化开发:tRNA 翻译调控抗逆菌株全流程量化方案
  • iSpaRo 2025|月球基地布线,机器人“胳膊不够长”怎么办?

最新新闻

  • TVBoxOSC终极指南:如何让电视盒子变身全能媒体中心
  • `Codex` 和 `Claude Code` 的官方能力都很强,真正麻烦的往往不是工具本身,而是国内这层接入。
  • 国产SSD定制化开发涉及哪些能力层次?固件调参和全链路自研有什么本质区别?
  • 5分钟搞定Windows和Office永久激活:KMS_VL_ALL_AIO终极指南
  • Python 3 各版本全面对比分析报告
  • GitHub 53K Star 爆款:不用 JS 逆向,7 大平台数据一把抓

日新闻

  • Python Playwright录制功能:从零到一构建自动化测试脚本
  • 如何用开源工具永久保存你心爱的小说:novel-downloader全攻略
  • In-Context Learning不是教知识,而是模式对齐:从5个示例到100个工业级样本的真相

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号