首页 > 代码库 > 编译内核让netfilter支持过滤layer7应用层协议

编译内核让netfilter支持过滤layer7应用层协议

netfilter/layer7

默认情况下,netfilter只能过滤二、三、四层的数据,但是对于应用层的数据(比如qq,迅雷视频等等)是无法过滤掉的。我们又知道netfilter是工作在内核当中的,因此要让netfilter支持过滤layer7应用层协议的数据必须要重新编译内核。由于iptables是规则编辑工具,因此也要重新编译iptables让其能够支持对layer7应用层协议的编写。

 

整体步骤如下:

一、需要使用的软件

内核源码:linux-2.6.28.10.tar.gz

iptables版本:iptables-1.4.3.tar.bz2

netfilter的应用层补丁:netfilter-layer7-v2.22.tar.gz (要将某些功能编译进内核)

layer7版本:l7-protocols-2009-05-28.tar.gz  这个软件里面包含了各种协议(应用层)的匹配模式。他们存放在/root/l7-protocols-2009-05-28/protocols这个目录下,文件后缀以.pat结尾。

 

二、编译内核,并给内核打上netfilter-layer7这个补丁

# tar zxvf  linux-2.6.28.10.tar.gz  -C  /usr/src

# tar zxvf  netfilter-layer7-v2.22.tar.gz  -C  /usr/src

# cd /usr/src
# ln –s  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

 

为了提高编译的成功率,我们将当前内核的config文件,复制到/usr/src/linux/下并重命名为.config

# cp /boot/config-2.6.18-164.el5  /usr/src/linux/.config
# make  menuconfig

 

并将以下内容编译成内核模块或者编译进内核

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

三、编译安装iptables使其支持layer7应用层协议(例如QQ、迅雷等等)

在编译安装之前我们可以将之前的iptables的启动脚本复制在/tmp目录下,供以后使用

也可以将将/etc/sysconfig/iptables保存下来,供以后使用

# cp /etc/init.d/iptables    /tmp/iptables
# cp /etc/sysconfig/iptables    /tmp/iptables.rule

# rpm  -e  iptables-ipv6  iptables  iptstate  --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  (指定linux源码位置)
# make
# make install

 

 

四、安装layer7软件(里面包含了各种应用层协议及其匹配模式)

# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install

 

#mv /tmp/iptables  /etc/init.d/

#vim /etc/init.d/iptables

在这个脚本之中将之前使用到的iptables的二进制文件路径修改为/usr/sbin/iptables

 

#service  iptables  start

 

经过上述步骤就可以让netfilter和iptables支持过滤应用层协议了。

过滤layer7应用层协议的iptables的语法如下:

iptables [-t TABLES]  COMMAND  CHAIN  匹配条件  -m  layer7  --l7proto  应用层协议  -j  处理动作

 

例如:禁止192.168.10.0/24这个网段内的用户登入qq

#iptables  -A FORWARD -s  192.168.10.0/24  -m  layer7 --l7proto  qq  -j DROP

 

 

在这里补充一个基于时间的扩展,刚刚在编译内核的时候把这个功能编译成了模块。因此,在这里我们可以使用基于时间的扩展来限制某些应用

-m  time  --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

###这个是表示日期型的限制

-m  time   --timestart hh:mm[:ss]    --timestop hh:mm[:ss]

###这个是表示每天的某个阶段作出限制

 

例如:禁止192.168.10.0/24这个网段内的用户每天在08:00-20:00这个时间内上网。

#iptables  -A FORWARD  -s  192.168.10.0/24   -m time --timestart 08:00  --timestop  20:00 -j  DROP

 

 

 

 

 

 

 

 

本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1570947

编译内核让netfilter支持过滤layer7应用层协议