Linux内核软件框架-Netfilter概述

一、简述

Netfilter是Linux内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。利用运作于用户空间的应用软件,如iptables等,来控制Netfilter,系统管理者可以管理通过Linux操作系统的各种网络数据包。1990年代,Netfilter在Linux 2.3.15版时进入Linux内核,正式应用于Linux 2.4版。

现今许多市面上许多的IP分享器或无线网络路由器(Wireless router),多是嵌入式Linux平台,并利用Netfilter的数据包处理能力,提供NAT以及防火墙的功能。此外,Netfilter平台的模块化设计使得功能具可扩展性,以及Linux核心本身属于开放的源代码,能够免费获取源代码进行修改与扩展。Netfilter平台中制定了五个数据包的挂载点(Hook),分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD与POST_ROUTING。

二、原理

Linux网络内核中存在5条内置chain,针对于每条chain,Netfilter都有与之对应的hook,他们的对应关系如下所示(左为chain,右为hook):

  • PREROUTING:由NF_IP_PRE_ROUTING触发;
  • INPUT:由NF_IP_LOCAL_IN触发;
  • FORWARD:由NF_IP_FORWARD触发;
  • OUTPUT:由NF_IP_LOCAL_OUT触发;
  • POSTROUTING:由NF_IP_POST_ROUTING触发;

Netfilter通过在内核中嵌入的这五个NF_HOOK函数的位置上注册相关函数,截断数据包的流动,从而完成对数据包的过滤和转换。

Packet flow in Netfilter and General Networking

Author: bugwz
Link: https://bugwz.com/2019/01/03/netfilter/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.