Linux Netfilter介绍

netfilter 框架由Rusty Russell 于 1998 年创立,作为对内核中 ipchains(Linux 2.2.x)和 ipfwadm(Linux 2.0.x)的旧实现的改进。它是linux内核的一个子系统,在2000年3月合并进了 linux 2.3.x 版本的 linux 内核,Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架,你可以在网络堆栈中的数据包遍历过程中的各个点(netfilter hooks)注册回调并对数据包执行各种操作,比如它允许你对数据报进行过滤、地址或端口转换、丢弃数据包、日志记录等。这些 netfilter 钩子为 netfilter 内核模块提供基础结构,这些模块注册回调以执行 netfilter 子系统的各种任务。

下面这张图来自Wikipedia,包含了netfilter的所有组件:

①最底层是netfilter框架在内核层提供的hook相关的api接口,可以供其它内核模块使用,来实现网络数据包的相关操作。

②往上是netfilter针对不同网络协议实现的内核模块:

  • ebtables,
  • arptables,
  • iptables,
  • ip6tables,
  • nf_tables,
  • nat相关模块,
  • 连接追踪模块,
  • 日志、排队等其它模块。

③最上层是应用层,提供的用户工具,可以设置针对各个协议的规则,比如ebtables,arptables,iptables,ip6tables,nft,conntrack等。

Netfilter/iptables 有三部分组成,分别是Netfilter 框架/Iptables(内核空间)/Iptables 命令行工具(用户空间)。

我们上面说过Netfilter 是一个由Linux 内核提供的网络数据包过滤框架,可以进行多种网络相关的自定义操作,比如:

  • 无状态的报过滤(IPv4 and IPv6)
  • 有状态的报过滤(IPv4 and IPv6)
  • 网络地址转换(NAT/NAPT)

Netfilter 在 Linux 内核中表现为一系列的hook点, 并允许Linux 内核模块在这些hook点上注册回调函数,Linux内核模块通过回调函数对网络数据包进行相关操作。

关于Linux Netfilter及网络层的iptables详细分析可以看我下面几遍文章:

Linux netfilter hook源码分析

linux Netfilter在网络层的实现详细分析(iptables)

Linux下使用Netfilter框架编写内核模块

下图来自Wikipedia,详细展示了网络数据包在网络协议栈中流转图,及netfilter协议栈中安装的所有hook点信息:

图片来源:https://en.wikipedia.org/wiki/Netfilter

图片来源:https://people.netfilter.org/pablo/nf-hooks.svg

这张图很好的总结了netfilter的在网络协议各层的各个hook点。

下面这张图从硬件层、内核态、应用层详细展示了网络数据包的流程,netfilter在其中的位置,值得细细品味:

图片来源:https://www.facebook.com/pages/category/Internet-Company/Netfilter-TaiwanWorkshop-139380146453712/

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值