Netfilter简介

  Linux下的包过滤防火墙,可以运行在2.4,2.6内核上;集成在内核中,不是系统的一个守护进程;对OSI模型中2,3,4层进行处理;只能对数据包头进行处理;可以用iptables命令来进行规则的配置;代替了ipchains;可以从http://www.netfilter.org查到更多资源。

基本的Netfilter编译选项

  为了运行iptables,需要在内核配置期间,选择以下一些选项,不管你用make config或其他命令。
在内核配置文件中要启用一些较重要的选项包括Netfilter连接跟踪、日志记录和包过滤。(请记住iptables通过用由Netfilter提供的内核中框架来建立一个策略)。
在Network Packet Filtering Framework(Netfilter)中还有两个额外的配置选项――Core Netfilter Configuration(核心Netfilter配置)和IP:Netfilter Configuration(IP:Netfilter配置)。

核心Netfilter配置

  核心Netfilter配置选项中包含的一些得要选项都应该被启用:
Comment match support(comment匹配支持);
FTP support(FTP协议支持);
Length match support(数据包长度匹配支持);
Limit match support(Limit匹配支持);
MAC address match support(MAC地址匹配支持);
MARK target support(MARK目标支持);
Netfilter connection tracking support(Netfilter连接跟踪支持);
Netfilter LOG over NFNETLINK interface(Netfilter通过NFNETLINK接口记录日志);
Netfilter netlink interface(Netfilter netlink接口);
Netfilter Xtables support(Netfilter Xtables支持);
State match support(state匹配支持);
String match support(string匹配支持);

IP:Netfilter配置

  ECN target support(ECN目标支持);
Full NAT(完整NAT支持);
IP address range match support(ip地址范围匹配支持);
IP tables support(IP tables支持,filtering/masq/NAT需要);
IPv4 connection tracking support(IPv4连接跟踪支持,NAT需要);
LOG target support(LOG目标支持);
MASQUERAD target support(MASQUERAD目标支持);
Owner match support(owner匹配支持);
Packet filtering(包过滤支持);
Packet mangling(包修改支持,常用于改变包的路由);
Raw table support(RAW表支持,NOTRACK/TRACE需要);
Recent match support(recent匹配支持);
REJECT target support(REJECT目标支持);
TOS match support(TOS匹配支持);
TOS target support(TOS目标支持);
TTL match support(TTL匹配支持);
TTL target support(TTL目标支持);
ULOG target support(ULOG目标支持);

Netfilter工作的位置

  Netfilter是以模块的方式存在于Linux中,每当Linux多一个Netfilter的模块就代表着Linux防火墙的功能多了一项,当然其功能也随之增加。其中/lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter目录下所存放的模块只能工作在IPv4的网络环境下;如下图所示:

Linux防火墙之Netfilter

  /lib/modules/2.6.18-164.el5/kernel/net/ipv6/netfilter目录下所存放的模块只能工作在IPv6的网络环境下,如下图所示:

Linux防火墙之Netfilter

  以上的两个目录的模块有个共同的特性, 都与“协议”有关, 因此,在使用这些模块时,必须特别留意哪些模块只能使用在哪个协议下。Linux自2.6.14版本开始, 其内含的Netfilter模块在设计上有了重大的改变,Netfilter组织希望模块与“协议”无关,所以就目前情况看来已有部份模块可以达到这样的要求其路径为/lib/modules/2.6.18-164.el5/kernel/net/netfilter如下图所示:

Linux防火墙之Netfilter

Netfilter的命令结构

  了解了Netfilter的结构后应该清楚以上的模块只是提供了某些过滤匹配的功能而已,如果我们希望Netfilter能为我们做些事,那我们就需给Netfilter执行“规则”,有了规则后,Netfilter才会知道哪些封包是可以被接受的,哪些封包是必须除掉的, 又有哪些封包是必须以特殊方式来处理的。而给予Netfilter规则的方式则是将规则填入到一块有结构性的内存中,这样,Netfilter就会依照防火墙管理人员所给的命令来执行。该内存就是俗称的表,表是防火墙的最大集合,包含链和规则;表包括filter table过滤表;nat用于地址转换;mangle俗称矫正表和RAW表。链则是规则的集合。
匹配:满足的条件,如源地址,端口等。
方法:对条件做出处理,accept,drop等。

Linux防火墙之Netfilter

  Filter表是Netfilter内最为重要的机制,其任务为执行数据包的过滤动作,也就是防火墙的功能;包含INPUT、OUTPUT和FORWARD链,用于处理输入、输出和转发包。filter表是缺省的表。
NAT(Network Address Translation)也是防火墙上一个不可或缺的重要机制,它的功能类似于IP分享器,只是相应功能更加强大。用于处理网络地址翻译。(包含与masquerading 相关的功能);包含PREROUTING(路由前);POSTROUTING(路由后)OUTPUT 输出(很少用到)共3个链。
Mangle表用于处理特殊包的矫正,包含两个链PREROUTING (路由前),POSTROUTING(路由后)。在流量控制和Qos应用中,经常会用到mangle表。
RAW表负责加快数据包穿越防火墙机制的速度,借此提高防火墙的性能。

Netfilter的Filter机制

  Filter作为Netfilter中的防火墙分类,首先需明确“数据包的分类”,以下图所示,假设在计算机上装有两片网卡,并且在计算机上分别执行Httpd及Firefox两个程序。

 Linux防火墙之Netfilter
INPUT类型:所谓INPUT类型是指网络上其它主机送给本机处理(Local Process)的数据包,例如当网络上的其它使用都来访问本的的HTTPD服务时就会产生这种类型的数据包。
OUTPUT类型:如果是本机Process所产生的数据包,即为OUTPUT类型的数据包。例如,当使用者在本机上启用Firefox去访问网络上的其它主机时就会产生这种类型的封包。
FORWARD类型:如果数据包对本机而言只是“路过”,那么这就属于FORWARD类型的数据包。当本机执行Router的角色就会有FORWARD类型的数据包。

Linux防火墙之Netfilter
INPUT链:当我们需要保护本机的HTTPD这个Process时,我们应该选择INPUT类型的数据包。例如,我们可以在INPUT链中描述:“如果进来的数据包是要到本机的TCP Port 80,而且数据包是由192.168.2.1主机送来的,就将该数据包丢弃掉”,这样就可以达到保护Httpd这个Process的目的。所以,INPUT链是用来存放过滤INPUT类型数据包的规则的,也就是说,INPUT链是用于“保护”本机的机制。

Linux防火墙之Netfilter
OUTPUT链:如果我们要限制使用者不得在“本机”上以Firefox来浏览www.163.com网站,那么需要限制OUTPUT类型的数据包。那么在OUTPUT链中的描述为:“如果数据包是本机Process所产生的,并且数据包是送往www.163.com的TCP Port 80时,就将该数据包丢弃掉。”所以,OUTPUT链是用来存放过滤OUTPUT类型数据包的规则的,也就是说,OUTPUT链是用于“限制”本机应用程序的连接机制。

Linux防火墙之Netfilter
FORWARD链:如下图所示,如果图中防火墙用来保护WEB Server,那么就应该限制FORWARD类型的数据包,因此可以在FORWARD链中这样描述:“如果数据包是由192.168.2.10主机送出,并且数据包是要送到WEB Server的TCP Port 80端口,那么就将该数据包丢弃掉。”所以FORWARD链是用来存放过滤FORWARD类型的数据包的规则,也就是说,FORWARD链是用来保护防火墙后面的主机。

Linux防火墙之Netfilter

规则的匹配

  规则按照顺序匹配;当第一个规则匹配后(DROP,ACCEPT,REJECT),通常会退出链。规则也可以多次匹配,比如LOG规则在前面,后面的ACCEPT也会匹配,如果检测不到匹配的规则,那么默认的链策略会生效。设置防火墙策略有两个基本原则:默认禁止一切,明确地允许被选择的数据包通过。(建议);默认开放一切,明确地禁止被选择的数据包通过。如下图所示:

 

 

 

 

 

 

 

 

 

 

Linux防火墙之Netfilter