简介:在Linux的防火墙体系Netfilter下有一个独立的模块L7 filter 。从字面上看Netfilter是对网络数据的过滤,L7 filter是基于数据流应用层内容的过滤。不过实际上 L7 filter的本职工作不是对数据流进行过滤而是对数据流进行分类。它使用模式匹配算法把进入设备的数据包应用层内容与事先定义好的协议规则进行比对,如果匹配成功就说明这个数据包属于某种协议。
L7 filter是基于数据流工作的,建立在Netfilter connstrack功能之上。因为一个数据流或者说一个连接的所有数据都是属于同一个应用的,所以L7 filter没有必要对所有的数据包进行模式匹配,而只匹配一个流的前面几个数据包 (比如10个数据包)。当一个流的前面几个数据包包含了某种应用层协议的特征码时 (比如QQ,MSN,迅雷等),则这个数据流被L7 filter识别;当前面几个数据包的内容没有包含某种应用层协议的特征码时,则L7 filter放弃继续做模式匹配,这个数据流也就没有办法被识别。总体步骤:1、7层过滤首先需要内核支持,因此重新编译内核,给新内核加入Layer 7补丁;
2、卸载系统自带的iptables,先保存旧的的配置信息,新的可以引用;
3、安装Layer 7;
4、安装Layer 7协议;所需要的源码包和补丁包:linux-2.6.28.10.tar.gz 下载地址: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.10.tar.gz
netfilter-layer7-v2.22.tar.gz iptables-1.4.6.tar.bz2 l7-protocols-2009-05-28.tar.gz 以上的三个软件包,下载地址:
http://down.51cto.com/data/362187
步骤如下: - 为内核打上l7filter的补丁:
- #tar zxvf linux-2.6.28.10.tar.gz -C /usr/src
- 解压内核到/usr/src
-
- #tar zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src
- 解压l7filter到/usr/srcc
-
- #cd /usr/src
- #ln -sv linux-2.6.28.10 linux
- #cd /usr/src/linux/
- #patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
- 为内核打上l7filter的补丁
-
- #cp /boot/config-2.6.18-164.el5 /usr/src/linux/.config
- 为编译内核提供一个config模版
-
- #make menuconfig
进入图形化界面,配置内核参数,根据自身的需要进行适当的增删 但要让内核支持l7filter则以下选项必须选上: - Networking support → Networking Options →Network packet filtering framework →Core Netfilter Configuration
- <M> Netfilter connection tracking support
- <M> “layer7” match support
- <M> “string” match support
- <M> “time” match support
- <M> “iprange” match support
- <M> “connlimit” match support
- <M> “state” match support
- <M> “conntrack” connection match support
- <M> “mac” address match support
- <M> "multiport" Multiple port match support
-
-
- Networking support → Networking Options →Network packet filtering framework → IP: Netfilter Configuration
- <M> IPv4 connection tracking support (required for NAT)
- <M> Full NAT
- <M> MASQUERADE target support
- <M> NETMAP target support
- <M> REDIRECT target support
#make #make modules_install #make install
内核编译完成后,重新启动操作系统,使用新的内核启动。华丽的分割线 ---------------------------------------------------------------------------------------------
使用新内核启动系统后:
到此,内核对l7filter的支持已经具备,接下来只需要重新编译安装iptbales,由于编译安装iptables后,并不会提供SysV风格的启动脚本,因此我们在卸载之前安装的那个iptables时,对其进行一下备份,将其保存在家目录中:#cp /etc/init.d/iptables ~/iptables #cp /etc/sysconfig/iptables-config ~/#rpm -e iptables-ipv6 iptables iptstate --nodeps卸载之前安装的iptables,因为其具有依赖性,所以这里使用"--nodeps"#tar jxvf iptables-1.4.6.tar.bz2 –C /usr/src #cd /usr/src/iptables-1.4.6 #cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/ #./configure --prefix=/usr --with-ksource=/usr/src/linux #make #make install安装l7filter协议#tar zxvf l7-protocols-2009-05-28.tar.gz #cd l7-protocols-2009-05-28 #make install #mv ~/iptables /etc/rc.d/init.d/ 启动支持l7filter的iptables
#service iptables start 本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/826283,如需转载请自行联系原作者