linux netfilter 实现机制和扩展技术,Linux Netfilter实现机制和扩展技术

要想理解Netfilter的工作原理,必须从对Linux IP报文处理流程的分析开始,Netfilter正是将自己紧密地构建在这一流程之中的。

1. IP Packet Flowing

IP协议栈是Linux操作系统的主要组成部分,也是Linux的特色之一,素以高效稳定著称。Netfilter与IP协议栈是密切结合在一起的,要想理解Netfilter的工作方式,必须理解IP协议栈是如何对报文进行处理的。下面将通过一个经由IP Tunnel传输的TCP报文的流动路径,简要介绍一下IPv4协议栈(IP层)的结构和报文处理过程。

IP Tunnel是2.0.x内核就已经提供了的虚拟局域网技术,它在内核中建立一个虚拟的网络设备,将正常的报文(第二层)封装在IP报文中,再通过TCP/IP网络进行传送。如果在网关之间建立IP Tunnel,并配合ARP报文的解析,就可以实现虚拟局域网。

我们从报文进入IP Tunnel设备准备发送开始。

1.1报文发送

ipip模块创建tunnel设备(设备名为tunl0~tunlx)时,设置报文发送接口(hard_start_xmit)为ipip_tunnel_xmit(),流程见下图:

图1 报文发送流程

1.2 报文接收

报文接收从网卡驱动程序开始,当网卡收到一个报文时,会产生一个中断,其驱动程序中的中断服务程序将调用确定的接收函数来处理。以下仍以IP Tunnel报文为例,网卡驱动程序为de4x5。流程分成两个阶段:驱动程序中断服务程序阶段和IP协议栈处理阶段,见下图:

图2 报文接收流程之驱动程序阶段

图3 报文接收流程之协议栈阶段

如果报文需要转发,则在上图红箭头所指处调用ip_forward():

图4 报文转发流程

从上面的流程可以看出,Netfilter以NF_HOOK()的形式出现在报文处理的过程之中。

回页首

2. Netfilter Frame

Netfilter是2.4.x内核引入的,尽管它提供了对2.0.x内核中的ipfw以及2.2.x内核中的ipchains的兼容,但实际上它的工作和意义远不止于此。从上面对IP报文的流程分析中可以看出,Netfilter和IP报文的处理是完全结合在一起的,同时由于其结构相对独立,又是可以完全剥离的。这种机制也是Netfilter-iptables既高效又灵活的保证之一。

在剖析Netfilter机制之前,我们还是由浅入深的从Netfilter的使用开始。

2.1 编译

在Networking Options中选定Network packet filtering项,并将其下的IP:Netfilter Configurations小节的所有选项设为Module模式。编译并安装新内核,然后重启,系统的核内

Netfilter就配置好了。以下对相关的内核配置选项稍作解释,也可以参阅编译系统自带的Help:

【Kernel/User netlink socket】建立一类PF_NETLINK套接字族,用于核心与用户进程通信。当Netfilter需要使用用户队列来管理某些报文时就要使用这

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值