当前位置: 首页 > news >正文

linux内核 Netfilter

Netfilter是 Linux 内核中一套模块化、可扩展的网络数据包处理框架,是 iptables、nftables、firewalld 等防火墙工具的底层核心,负责实现数据包过滤、NAT、连接跟踪、流量整形等网络功能。

Netfilter 是 Linux 内核内置的网络数据包处理框架,通过5 个钩子点拦截网络流量,配合5 张表实现过滤、NAT、修改、跟踪、安全控制,是所有 Linux 防火墙的底层核心。

核心定位与历史

  • 本质:内核态的钩子(Hook)系统,在 TCP/IP 协议栈关键路径上埋点,允许内核模块注册回调函数,介入数据包处理。
  • 起源:由 Rusty Russell 主导开发,Linux 2.4(2000 年)正式引入,替代早期的 ipchains/ipfwadm。
  • 设计理念模块化、分层、无侵入,将规则配置(用户态)与数据包处理(内核态)分离。

核心架构:五钩子 + 表 / 链模型

Netfilter 在 IPv4/IPv6 协议栈中定义了5 个标准钩子点(Hook Points),数据包按路径依次经过:

钩子点触发时机主要用途
NF_INET_PRE_ROUTING数据包刚进入内核、路由决策前DNAT、流量标记、raw 表处理
NF_INET_LOCAL_IN路由后,发往本机进程入站过滤(filter)、本地 NAT
NF_INET_FORWARD路由后,需要转发的数据包转发过滤、流量控制
NF_INET_LOCAL_OUT本机进程发出、路由前出站过滤、SNAT 前处理
NF_INET_POST_ROUTING数据包即将离开网卡、路由后SNAT、MASQUERADE、流量整形

表(Tables)与链(Chains)

规则按功能分组到,每个表包含对应钩子点的(规则列表):

  • filter 表(默认):负责过滤,含 INPUT、FORWARD、OUTPUT 链。
  • nat 表:负责地址 / 端口转换,含 PREROUTING、POSTROUTING、OUTPUT 链。
  • mangle 表:修改数据包头部(TOS/TTL/Mark),覆盖所有 5 个钩子。
  • raw 表:最早介入,用于关闭连接跟踪(NOTRACK)。
  • security 表:用于强制访问控制(MAC),如 SELinux 标签。

5 张表 + 作用 + 执行顺序

执行优先级:从上到下

表名优先级核心功能一句话记住
raw1关闭连接跟踪不跟踪、高性能
mangle2修改数据包属性打标记、改 TTL/QoS
nat3地址 / 端口转换SNAT/DNAT、共享上网
filter4防火墙过滤允许 / 拒绝 / 丢弃
security5SELinux 安全标记强制访问控制

Netfilter 5 张表的执行顺序

执行顺序:raw → mangle → nat → filter → security

作用:

  • raw:优先级最高,关闭连接跟踪(NOTRACK)
  • mangle:修改数据包头部、打 MARK、QoS
  • nat:地址 / 端口转换(SNAT/DNAT)
  • filter:防火墙过滤,ACCEPT/DROP/REJECT
  • security:SELinux 安全标记,强制访问控制

一个数据包从外网进入 Linux 路由器,经过转发到另一台内网机器,经过的所有 Netfilter 钩子点和表:

  1. 网卡收包
  2. PREROUTING:raw → mangle → nat(DNAT)
  3. 路由决策
  4. FORWARD:mangle → filter → security
  5. POSTROUTING:mangle → nat(SNAT)
  6. 从网卡发出

filter 表(最常用、默认表)

作用:对数据包进行过滤控制,决定是否放行。

优先级:三张表里最后执行。

包含链

  • INPUT:发往本机的包
  • FORWARD:经过本机转发的包(路由器功能)
  • OUTPUT:本机发出的包

典型动作

  • ACCEPT:允许
  • DROP:丢弃
  • REJECT:拒绝并返回错误

典型用途

  • 开放 / 关闭端口(80、22 等)
  • 限制某个 IP 访问
  • 防火墙规则

nat 表(网络地址转换)

作用:修改数据包的源 IP / 端口(SNAT)目标 IP / 端口(DNAT)

特点:仅对连接首包生效,后续包自动沿用转换结果。

包含链

  • PREROUTING:刚进网卡时 →DNAT
  • OUTPUT:本地进程发出的包 → 本地 DNAT
  • POSTROUTING:即将出网卡时 →SNAT/MASQUERADE

典型用途

  • SNAT/MASQUERADE:内网共享一个公网 IP 上网
  • DNAT:端口映射、内网服务器对外暴露
  • 负载均衡前置转发

mangle 表(数据包修改)

作用修改数据包本身的属性,不做过滤、不做 NAT。特点:可以作用在所有 5 个钩子点

包含链

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTROUTING

典型用途

  • 设置MARK标记(用于策略路由、tc 流量控制)
  • 修改 TOS/DSCP(优化 QoS)
  • 修改 TTL(防追踪、穿透)
  • 数据包整形、分类

raw 表

raw 表是 iptables 中优先级最高的表(高于 mangle/nat/filter),自 iptables 1.2.9 版本引入,对应的内核模块是iptable_raw;其唯一核心目标是控制 nf_conntrack 连接跟踪,通过NOTRACK动作让指定数据包彻底跳过连接跟踪(不再进入 conntrack 哈希表、无状态记录),从而降低内核开销、提升大流量场景性能。

支持的链与动作

  1. 仅两条链(没有 INPUT/FORWARD/POSTROUTING)
    • PREROUTING:网卡收包刚进入 Netfilter,路由决策前
    • OUTPUT:本机进程发出的包,路由决策前
  2. 核心动作
    • NOTRACK:禁用该数据包 / 连接的跟踪;对应的状态是UNTRACKED(可在 filter 表中匹配)
    • 额外支持TRACE(内核数据包跟踪调试),仅在 raw 表有效
  3. 规则特性:一旦匹配 NOTRACK,后续 conntrack 流程不触发;但仍会走 mangle/filter 等表的常规处理(只是无状态信息可用)

执行顺序与位置

在 Netfilter 流程中的顺序是:raw表(PREROUTING/OUTPUT) → mangle → nat → filter

  • 入站:网卡 →raw PREROUTING→ 路由决策 → ...
  • 出站:应用 →raw OUTPUT→ 路由决策 → POSTROUTING → 网卡
  • 转发:PREROUTING raw → 路由 → FORWARD(无 raw 链)

典型适用场景

  1. 高并发 UDP / 流媒体:DNS、视频会议、CDN 转发,避免 conntrack 表溢出、锁竞争
  2. 大流量 Web 服务器:80/443 端口不做 NAT / 状态过滤时,禁用跟踪减少 CPU / 内存消耗
  3. DDoS 防护前置:过滤海量短连接包,不触发 conntrack 资源耗尽
  4. 内核调试:用TRACE动作跟踪数据包在 Netfilter 各表的流转路径

security 表

security 表是 Netfilter 中用于强制访问控制(MAC)的表,专门配合SELinux等安全模块,对数据包打上 / 检查安全上下文标签,做更细粒度的网络访问控制。

  • 位置:在filter 表之后执行
  • 作用:不是普通防火墙,而是安全标签控制
  • 依赖:一般只有开启 SELinux 时才真正发挥作用

完整的 Netfilter 表执行优先级:raw → mangle → nat → filter → security

包含的链

security 表的链和 filter 表完全一样:

  • INPUT
  • FORWARD
  • OUTPUT

不包含 PREROUTING、POSTROUTING。

主要用途

  1. SELinux 网络标签给数据包打上 SELinux 安全上下文,控制:

    • 哪个进程能发包
    • 哪个域能接收包
    • 转发包的安全策略
  2. 强制网络访问控制比普通防火墙更严格:

    • 即使 iptables filter 允许了
    • security 表 + SELinux 依然可以拒绝
  3. 多级别安全(MLS)用于高安全场景(涉密、政务、军工系统),按安全级别隔离网络流量

核心工作流程(以 IPv4 为例)

  1. 数据包进入网卡,经链路层处理后到达PRE_ROUTING钩子。
  2. 内核执行路由决策:判断是发往本机还是转发
  3. 发往本机 → 经过LOCAL_IN→ 交付上层协议栈。
  4. 需要转发 → 经过FORWARD→ 再到POST_ROUTING→ 发送。
  5. 本机发出 → 经过LOCAL_OUT→ 路由 →POST_ROUTING→ 发送。

关键能力与应用

  • 数据包过滤:基于 IP、端口、协议、MAC、TCP 标志位等规则,允许 / 拒绝 / 丢弃数据包。
  • NAT
    • SNAT:修改源地址(如内网共享公网 IP)。
    • DNAT:修改目标地址(如端口映射、反向代理)。
    • MASQUERADE:动态 SNAT(适配动态公网 IP)。
  • 连接跟踪(conntrack):记录连接状态(NEW/ESTABLISHED/RELATED),实现状态防火墙。
  • 流量标记与整形:结合 tc 实现 QoS、带宽限制、策略路由。
  • 日志与审计:记录匹配规则的数据包,用于安全分析。

用户态工具生态

  • iptables:传统工具,基于 Netfilter,配置复杂但成熟稳定。
  • nftables:下一代工具,统一 IPv4/IPv6/ARP/ 桥接,语法更简洁、性能更好,逐步替代 iptables。
  • firewalld:动态防火墙管理工具,底层调用 iptables/nftables,支持区域(zone)管理。

与内核网络栈的关系

Netfilter 是内核网络子系统的一部分,直接嵌入 IP 层处理流程,不依赖用户态,处理效率高。它通过nf_register_hook()/nf_unregister_hook()注册 / 注销钩子函数,回调返回值决定数据包命运:

  • NF_ACCEPT:继续处理。
  • NF_DROP:丢弃。
  • NF_STOLEN:模块接管,不再继续。
  • NF_QUEUE:送入用户态队列(如 nfqueue)。
  • NF_REPEAT:重新调用钩子。

典型应用场景

  1. 服务器防火墙:限制入站端口(如仅开放 80/443)。
  2. 网关 NAT:家庭 / 企业路由器共享公网 IP。
  3. 端口转发:公网 IP 端口映射到内网服务。
  4. 流量控制:限制 P2P 下载带宽,保障关键业务。
  5. 安全审计:记录所有进出数据包,用于入侵检测。

Netfilter 数据包流转总图(IPv4)

┌───────────────┐ │ 网卡收包 │ └───────┬───────┘ │ ▼ ┌─────────────────────────────────────┐ │ NF_INET_PRE_ROUTING │ │ - raw 表: PREROUTING │ │ - mangle 表: PREROUTING │ │ - nat 表: PREROUTING(DNAT) │ └───────────────┬─────────────────────┘ │ ▼ ╔═════════════════╗ ║ 路由决策点 ║ ║ (判断去向) ║ ╚═══════╦═════════╝ │ ┌──────────┴──────────┐ ▼ ▼ ┌────────────────┐ ┌─────────────────────────┐ │ 发往本机 │ │ 需要转发(路由器场景) │ └────┬───────────┘ └───────┬─────────────────┘ │ │ ▼ ▼ ┌─────────────────────────┐ ┌─────────────────────────────┐ │ NF_INET_LOCAL_IN │ │ NF_INET_FORWARD │ │ - mangle 表: INPUT │ │ - mangle 表: FORWARD │ │ - filter 表: INPUT │ │ - filter 表: FORWARD │ │ - security 表: INPUT │ │ - security 表: FORWARD │ └──────────┬──────────────┘ └──────────────┬──────────────┘ │ │ ▼ ▼ 交付上层协议栈 ┌─────────────────────────────┐ │ NF_INET_POST_ROUTING │ │ - mangle 表: POSTROUTING │ │ - nat 表: POSTROUTING(SNAT)│ └──────────────┬──────────────┘ │ ▼ 从网卡发出

本机发包流程(补充)

┌────────────────┐ │ 应用层发包 │ └───────┬────────┘ │ ▼ ┌─────────────────────────────────────┐ │ NF_INET_LOCAL_OUT │ │ - raw 表: OUTPUT │ │ - mangle 表: OUTPUT │ │ - nat 表: OUTPUT(本地进程DNAT) │ │ - filter 表: OUTPUT │ │ - security 表: OUTPUT │ └───────────────┬──────────────────────┘ │ ▼ ╔═════════════════╗ ║ 路由决策点 ║ ╚═══════╦═════════╝ │ ▼ ┌─────────────────────────────────────┐ │ NF_INET_POST_ROUTING │ │ - mangle 表: POSTROUTING │ │ - nat 表: POSTROUTING(SNAT) │ └───────────────┬─────────────────────┘ │ ▼ 从网卡发出
http://www.jsqmd.com/news/500322/

相关文章:

  • 程序员必看:大模型参数高效微调(PEFT)全攻略,建议收藏
  • ESP-IDF 简介
  • 学生3类课堂行为(举手、阅读、书写)识别目标检测数据集(近 4200 张图片已标注)| YOLO训练数据集 AI视觉检测
  • 四轮转向汽车稳定性控制策略:从理论到实践
  • 东华OJ-进阶题-19-排队打水问题(C++)
  • OpenClaw部署 + 多agent智能体协作
  • 无刷直流电机自抗扰控制策略:转速转矩双闭环系统的高效调节机制
  • 三相静止无功发生器SVG并网仿真模型说明报告
  • OpenClaw 全网板块公开的数据自动收集(2026 版)
  • 2026年比较好的二通电动球阀厂家推荐:水处理电动球阀生产厂家推荐几家 - 行业平台推荐
  • OpenClaw 和 Claude Code、Cursor、Copilot 有什么区别
  • 网络医疗解决方案:Windows/Linux平台优化指南
  • 2026年热门的模拟量执行器品牌推荐:断电复位执行器实力品牌厂家推荐 - 行业平台推荐
  • SpeedAI科研小助手:多语言降AI降重专业工具
  • 老品牌第二曲线方法拆解:从判断到落地的完整框架
  • 解析 6 款客户管理系统:2026全场景客户服务管理能力核心差异与适用场景
  • C++变量的作用域
  • STM32常用变量类型位数及取值范围
  • 2026年口碑好的云南咖啡豆公司推荐:意式咖啡豆/西安工厂咖啡豆正规生产厂家推荐 - 行业平台推荐
  • 深入探讨Matlab Simulink变压器饱和模型与励磁涌流模型:仿真剩磁、饱和磁通等特性...
  • 2026年评价高的舟山三维动画制作公司推荐:工程施工三维动画源头工厂推荐 - 行业平台推荐
  • 2026年评价高的生物刺激素品牌推荐:陕西生物刺激素厂家热销推荐 - 行业平台推荐
  • 面对open claw的安全问题:我开源一个 MCP 安全检测项目
  • 【Day27】LeetCode:56. 合并区间,738. 单调递增的数字
  • 2026年口碑好的商用咖啡机工厂推荐:意式咖啡机/磨豆一体咖啡机/西安全自动咖啡机实力工厂怎么选 - 行业平台推荐
  • 20252909 2025-2026-2 《网络攻防实践》第2周作业
  • 传统能量回馈只能“省”,安科瑞全链路方案还能“管”和“智”
  • LabVIEW调用TensorFlow深度学习教程
  • 防汛减灾新利器:一体化水雨情监测站实时预警系统
  • Maxwell电机多目标尺寸优化案例:使用Ansys Maxwell与OptiSlang的永磁...