要让iptables实现应用层的过虑,首先要给内核和应用层的iptables定义工具分别打上layer7的补丁,使之能实现实现应用层不同应用数据包的特征匹配。
所以其一要重新给内核打补丁,并在重新编译内核的时候加载layer7相关的模块。
其二,卸载应用层的规则定义工具iptables,并下载iptables的源代码重新编译安装
这就实现了在内核层和用户层支持了layer7模块,而要实现实际应用中不同应用层协议的规则匹配,还需要下载安装规则定义包
总结以上,要想在iptables中添加layer7层过虑模块,需要以下的东东
1.layer7补丁
2.协议匹配包
3.iptables的源码
4.linux的内核源码
接下来,开始具体实现过程
先查看下我当前的内核版本(centos6.2的系统)
先去官网下载最和我版本号最接近的内核源码
我下载的是linux-2.6.32.59的包,各位具体可以按照自己实际情况下载对应的源码包
iptables源代码
ftp://ftp.netfilter.org/pub/iptables/
layer7补丁和匹配规则,注意补丁包
这几个包我打包成一个提供给大家下载(内核源码比较大,有需要的还是自行下载吧)
首先先给linux内核添加layer7补丁(layer7补丁有2个,一个是内核补丁,另一个是用户空间的iptables程序的补丁),重新编译内核
step1:打内核补丁,重新编译内核
解包内核源代码
[root@localhost ~]# tar -xf linux-2.6.32.59.tar.bz2 -C /usr/src/
cd过去
[root@localhost ~]# cd !$
创建软连接
[root@localhost src]# ln -sv linux-2.6.32.59/ linux
"linux" -> "linux-2.6.32.59/"
解压补丁包
[root@localhost ~]# tar -xf netfilter-layer7-v2.22.tar.gz -C /usr/src/
给内核源码打上补丁
[root@localhost src]# cd /usr/src/ linux
[root@localhost src]# patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
配置内核编译文件(我使用了原来安装系统的.config配置文件为蓝本进行修改)
[root@localhost linux]# cp /boot/config-2.6.32-220.el6.i686 .config
[root@localhost linux]# make menuconfig #确保已经安装开发环境
打开网络相关支持
网络选项
网络数据包过滤框架
核心配置
主要要勾选这一项,打开layer7模块支持
保存后开始编译内核
[root@localhost linux]# make #打开手机喝茶慢等。。。
安装模块
[root@localhost linux]# make modules_install
安装新内核
[root@localhost linux]# make install
重启选择新安装的内核
step2:打iptables补丁,重新编译iptables
先卸载原来的iptables
[root@localhost ~]# rpm -e iptables iptables-ipv6 –nodeps #注意iptables可能依赖于其它的包,不要把其它依赖关系的包给卸载了
解压iptables源码包
[root@localhost ~]# tar xf iptables-1.4.9.tar.bz2 -C /usr/src/
给源码包打上layer7模块的补丁,复制netfilter-layer7下关于iptables下的文件到iptables源码文件夹下的extensions下
[root@localhost ~]# cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* /usr/src/iptables-1.4.9/extensions/
配置编译配置文件
[root@localhost iptables-1.4.9]# ./configure --prefix=/usr --with-ksource=/usr/src/linux
编译安装
[root@localhost iptables-1.4.9]# make && make install
step3:安装layer7的规则定义包
[root@localhost ~]# tar xf l7-protocols-2009-05-28.tar.gz
[root@localhost l7-protocols-2009-05-28]# make install
它会在/etc下创建l7-protocols文件夹,里面放置了layer7的配置文件和规则定义文件,在用iptables定义layer7规则的时候,就会调用这里的配置文件
数据包规则定义文件在/etc/l7-protocols/protocols下,有实力也可以自己编写规则放在这里,然后用iptables直接调用就可以了
OK,至此就都完成了,其实也就重新编译一下内核,重新编译安装iptables,最后安装layer7规则定义
再安装layer7支持模块后,就可以根据已有的规则来定义
假设主机是网关,可以禁止QQ,迅雷等应用程序访问互联网
[root@localhost ~]# iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --l7proto qq -j DROP
(好吧,我承认禁止人家qq是很不道德的。。。不过搭配速率控制的模块,可以限制别人迅雷的下载速度,这个还是比较好用的)
本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/947909,如需转载请自行联系原作者