一、Netfilter 简介
Natfilter 是集成到linux内核协议栈中的一套防火墙系统,其提供了整个防火墙的基本框架,各个协议基于Netfilter 框架来自己实现自己的防火墙子系统。每个子系统都有自己独立的表来存储自己的配置信息,他们之间完全独立的进行配置和运行。在用户空间不同的子系统有着各自独立的配置/管理工具。
在内核中包括如下一些防火墙子系统
1、链路层的防火墙子系统,对应协议栈是在桥(bridge)中对报文进行处理。对应用户空间的配置工具是ebtables。
2、网络层中ipv4的防火墙子系统,对应协议栈是在IPv4协议栈中对报文进行处理,对应用户空间的配置工具是iptables
3、网络层中ipv6的防火墙子系统,对应协议栈是在IPv6协议栈中对报文进行处理,对应用户空间的配置工具是ip6tables
4、对ARP处理的防火墙子系统,该处理是在协议栈的IPv4部分,但是自己有独立的表来存放自己的配置,对应用户空间的配置工具是arptables。
该系列博文主要讲解Netfilter 和ipv4 协议的防火墙子系统,结合其配置工具iptables 的使用来讲解防火墙内部的具体实现。在内核源码级上进行详细分析。
IPv4 防火墙主要有如下几种功能:
1、 对报文的过滤
2、 对报文的修改
3、 连接跟踪
4、 网络地址转换(NAT)
防火墙中数据的组织关系:
一个可爱的机器人,呵呵。上图说明了Nntfilter中各个数据的包含关系。
1、Netfilter 中包含一些表(table),不同的表用来存储不同功能的配置信息。
2、每个table 里有多个chain,chain表示对报文的拦截处理点。
3、每个chain 包含一些用户配置的匹配规则(match),一个或多个匹配规则后都必须有一个执行动作(target),如果报文符合匹配规则后,需要根据该执行动作(target)来处理报文。
IPv4防火墙中的定义如下:
一、chain 的定义
IPv4 子系统默认实现了五个chain,定义如下:
1、PREROUTING: 在报文路由前进行对报文的拦截
2、INPUT:对到本机的报文进行拦截
3、FORWARD:对需要本机进行三层转发的报文进行拦截
4、OUTPUT:对本机生成的报文进行拦截
5、POSTROUTIN:路由后对报文进行拦截
二、表(table)的定义:
Iptalbes 默认创建了四张表,还可以由用户自己来创建自己的表。
1、filter 表:该表用来存储对报文过滤的配置信息,并且该表是iptables 默认的表,如果命令没有指定表的话,就默认使用该表来存储配置信息。
该表里包含了三个chain,,分别为IPUT,OUTPUT,FORWARD
2、mangle 表,该表用来存储那些对报文修改的配置信息,该表包含了上面所说的五个chain。
3、raw 表,直译为原始的意思,该表主要是来在协议栈入口处对原始报文进行跟踪和处理的,该表包含了2个chain,分别为OUTPUT(本机生成的报文进入Ipv4协议栈的入口),PREROUTING(目的ip是到本机的报文进入Ipv4协议栈的入口)。
4、nat 表,该表用来存储网络地址转换的相关配置信息。NAT功能分SNAT(源地址转换)和DNAT(目的地址转换),SNAT是在协议栈出口进行转换,DNAT是在协议栈入口进行转换。该表包含了三个chain,分别为 DNAT的PREROUNGIN和OUTPUT,SNAT的POSTROUTIN。
三、Match :
Match 代表了对报文的匹配规则,根据用户设置的匹配元素值来对报文进行匹配。具体匹配元素由用户根据自身需要来自由组合。在iptables中有标准的匹配元素,还有一些扩展的匹配元素。标准的匹配元素包括 源/.目的IP地址, 接收/发送设备 传输层协议 这五个元素,扩展的匹配元素分两类,一类是由不同的传输层协议自己定义,比如tcp/udp/icmp协议自己定义的一些匹配元素。还有一些根据特性来定义的匹配元素,比如IP地址的类型,跟连接跟踪结合的一些匹配元素等。
四、Target :
Target ,执行动作,如果报文被匹配后,就根据该匹配规则后定义的target 来对报文进行处理,
标准的target 有如下几种 ACCEPT,DROP,QUEUE,RETURN。还有一些扩展的target,详见下节内容。
本文出自 “耀洋的博客” 博客,请务必保留此出处http://yaoyang.blog.51cto.com/7657153/1396722
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。