一、Netfilter简介

4050阅读 0评论2014-07-15 mildrengong
分类:LINUX

前言
研究Netfilte已经有一段时间了,Netfilter的内核源码也大致看了一遍。这里打算写出来和大家一起分享一下,欢迎大家和我一起探讨。

本系列博文采用的linux内核版本是2.6.32。


Natfilter 是集成到linux内核协议栈中的一套防火墙系统,用户可通过运行在用户空间的工具来把相关配置下发给Netfilter 

 

Netfilter 提供了整个防火墙的框架,各个协议基于Netfilter 框架来自己实现自己的防火墙功能。每个协议都有自己独立的表来存储自己的配置信息,他们之间完全独立的进行配置和运行。

一、在内核中包括的防火墙子模块

1、链路层的防火墙模块,对应协议栈是在软桥(bridge)中对报文进行处理。对应用户空间的配置工具是ebtables。

 

2、网络层中ipv4的防火墙模块,对应协议栈是在Ipv4协议栈中对报文进行处理,对应用户空间的配置工具是iptables

 

3、网络层中ipv6的防火墙模块,对应协议栈是在Ipv6协议栈中对报文进行处理,对应用户空间的配置工具是ip6tables

 

4、对ARP处理的防火墙模块,该处理是在协议栈的IPv4部分,但是自己有独立的表来存放自己的配置,对应用户空间的配置工具是arptables。

二、数据的包含关系:



一个可爱的机器人。上图说明了各个数据的包含关系。

1、Netfilter 中有包含一些表(table),不同的表用来存储不同功能的配置信息。
2、每个table 里有多个chain,chain表示对报文的拦截处理点。
3、每个chain 包含一些用户配置的rule,一条rule包含了一个或多个匹配规则(match)和一个执行动作(target)。如果报文符合匹配规则后,需要根据该执行动作(target)来处理报文。

三、IPv4模块防火墙的简介
本系列博文主要讲解Netfilter 整体实现和ipv4 协议的防火墙系统。结合其配置工具iptables 的使用来讲解防火墙内部的具体实现。在内核源码级上进行详细分析。

Ipv4防火墙有四大功能:
1、对报文的过滤(对应filter表)
2、对报文的修改(对应mangle表)
3、对会话的连接跟踪(connection track)
4、网络地址转换(NAT)


首先我们先来看看在linux协议栈中网络层IPv4对报文的出来流程。如图


















Ipv4 Netfilter在五个点来拦截报文,每个拦截点对应与iptable的一个chain。
1、PREROUTING: 在报文路由前进行对报文的拦截
2、INPUT:对到本机的报文进行拦截
3、FORWARD:对需要本机进行三层转发的报文进行拦截
4、OUTPUT:对本机生成的报文进行拦截
5、POSTROUTIN:路由后对报文进行拦截

在Ipv4 Netfilter中,报文有三条处理流程:
发往本机的报文:


经过本机三层转发的报文


本机产生往外发送的报文

table :

Iptalbes 默认创建了四张表,还可以由用户自己来创建自己的表。

1、filter :该表用来存储对报文过滤的配置信息,并且该表是iptables 默认的表,如果命令没有指定表的话,就默认使用该表来存储配置信息。

该表里包含了三个chain,,分别为IPUT,OUTPUT,FORWARD

2、mangle ,该表用来存储那些对报文修改的配置信息,该表包含了上面所说的五个chain

3、raw,直译为原始的意思,该表主要是来在协议栈入口处对原始报文进行跟踪和处理的,该表包含了2chain,分别为OUTPUT(本机生成的报文进入Ipv4协议栈的入口),PREROUTING(目的ip是到本机的报文进入Ipv4协议栈的入口)。

4、nat,该表用来存储网络地址转换的相关配置信息。NAT功能分SNAT(源地址转换)和DNAT(目的地址转换),SNAT是在协议栈出口进行转换,DNAT是在协议栈入口进行转换。该表包含了三个chain,分别为 DNATPREROUNGINOUTPUTSNATPOSTROUTIN

 

Match :

Match 代表了对报文的匹配规则,根据用户设置的匹配元素值来对报文进行匹配。具体匹配元素由用户根据自身需要来自由组合。在iptables中有标准的匹配元素,还有一些扩展的匹配元素。标准的匹配元素包括 源/.目的IP地址, 接收/发送设备  传输层协议 这五个元素,扩展的匹配元素分两类,一类是由不同的传输层协议自己定义,比如tcp/udp/icmp协议自己定义的一些匹配元素。还有一些根据特性来定义的匹配元素,比如IP地址的类型,跟连接跟踪结合的一些匹配元素等。

 

Target :

Target ,执行动作,如果报文被匹配后,就根据该匹配规则后定义的target 来对报文进行处理,

标准的target  有如下几种 ACCEPT,DROP,QUEUE,RETURN。还有一些扩展的target,详见下章内容。


(未完待续)



上一篇:linux 内核网络,数据接收流程图
下一篇:ksplice 理解执行过程