温馨提示:
一、前言:
为了解决上述问题,可以为netfilter打上补丁,由于netfilter是基于Linux内核的,所以要重新编译,而后也要为iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能。通过独立的l7-protocols协议包提供对各种应用层协议的特征识别与定义,从而达到限定应用程序的目的。
二、具体实现过程
注:
1、 目前,官网的layer7只支持到内核版本较低,如要使用,只有两个办法,第一种方法将内核降级,另一个是修改layer7中的源代码,使之适用于当前内核的版本。
2、这里所说的内核版本是指redhat再编译整合后的发布的内核版本,并不是kernel.org中的内核版本。所以要使用请到redhat的ftp站点去下载。
=========================================================================================
1、实验所需要的相关包
2、安装过程
⑴、 获取并编译内核
# useradd mockbuild
添加安装src格式的软件包需要的用户
<a href="http://s3.51cto.com/wyfs02/M00/23/9C/wKiom1M76N_hU_v1AAGfVId5MMA773.jpg" target="_blank"></a>
解压缩到指定的目录中
<a href="http://s3.51cto.com/wyfs02/M00/23/9E/wKioL1M76SnjH7t0AAFooA8pUiU169.jpg" target="_blank"></a>
制作软链接,便于以后使用
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M77dGSTTOpAADeh8a4YLU376.jpg" target="_blank"></a>
⑵、为内核打上netfilter-layer7-v2.23补丁
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M77tOjdikYAAXiW55lm8E282.jpg" target="_blank"></a>
⑶、基于本地系统中的内核配置文件编译此内核
1
2
<code># cp /boot/config-2.6.32-431.el6.x86_64 .config</code>
<code># make menuconfig</code>
①、网络支持
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M78c3BkVEBAALRyyV3N0o174.jpg" target="_blank"></a>
②、参数设定子项
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M78gKgvvjaAAMBC5RGUCw887.jpg" target="_blank"></a>
③、设定过滤模板
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M78lzgXpSRAANjhtJxSeE645.jpg" target="_blank"></a>
④、核心过滤配置
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M78nXw_3ccAALw046ePh8420.jpg" target="_blank"></a>
⑤、支持layer7匹配器
<a href="http://s3.51cto.com/wyfs02/M01/23/9D/wKiom1M78sqDiWG3AAK9IS_f900232.jpg" target="_blank"></a>
⑥、确保支持连接追踪
<a href="http://s3.51cto.com/wyfs02/M00/23/9E/wKioL1M78tfS9G9zAAOPwEiNAMo288.jpg" target="_blank"></a>
⑦、基于IP过滤配置
<a href="http://s3.51cto.com/wyfs02/M02/23/9D/wKiom1M78zTyXQDmAAMWi1EbwFs555.jpg" target="_blank"></a>
⑧、ipv4的nat连接追踪功能
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M788Hh7YlhAAM8ICpluaw360.jpg" target="_blank"></a>
⑨、取消编译验证
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M79BzA7suoAAJ_sJxKnKc119.jpg" target="_blank"></a>
⑩、取消模块签名认证
<a href="http://s3.51cto.com/wyfs02/M01/23/9D/wKiom1M79ImQFMbdAAJlxrAfhtY853.jpg" target="_blank"></a>
进入API接口
<a href="http://s3.51cto.com/wyfs02/M02/23/9D/wKiom1M79eqAvglsAAJawrcGwSI536.jpg" target="_blank"></a>
取消签名检查
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M79fmCcG50AANPtLN_unE874.jpg" target="_blank"></a>
退出并保存
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M79eORfAXNAAC86vq7Hwo217.jpg" target="_blank"></a>
⑷、编译并安装内核
3
<code># make</code>
<code># make modules_install</code>
<code># make install</code>
这样就会在/boot/grub/grub.conf文件中有一个新的内核版本,将default设置到此内核版本次序上,就可以启动新的内核了。
(5)、重启系统,启用新内核
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M794jDvLwAAADzbwpakXs853.jpg" target="_blank"></a>
3、编译iptables
<code>#cd /download</code>
<code># tar xf iptables-1.4.20.tar.bz2</code>
<code># cp /download/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/</code>
说明:之前己经将nerfilter编译到内核中了,在此将netfilter新的功能支持到kernel2.6.20之后的版本复制到iptabels扩展功能中。
<a href="http://s3.51cto.com/wyfs02/M00/23/9E/wKioL1M7-pPQ1kmmAASEkbfrLoE276.jpg" target="_blank"></a>
备份启动脚本与配置文件
<code># cp /etc/rc.d/init.d/iptables /download</code>
<code># cp /etc/sysconfig/iptables-config /download</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M7-wjQ3NrjAAFvYtgkjQ0887.jpg" target="_blank"></a>
<code># make && make install</code>
注:在此处出现如下警告,提示netfilter_conntrack没有找到,这个可以忽略,在安装完成后使用 modprobe加载即可。
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M7-1vCkc8bAABp34ZoU5Y134.jpg" target="_blank"></a>
还原启动脚本与配置文件
<a href="http://s3.51cto.com/wyfs02/M01/23/9D/wKiom1M7_NLw5dZzAAEEla9B_4s368.jpg" target="_blank"></a>
4、为layer7模块提供其所识别的协议的特征码
<code># tar zxvf l7-protocols-2009-05-28.tar.gz</code>
<code># cd l7-protocols-2009-05-28</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/9E/wKioL1M7_Syw71QDAAEQIR0fpak618.jpg" target="_blank"></a>
5、如何使用layer7模块
⑴、安装完成后,查看iptabels的版本。
<a href="http://s3.51cto.com/wyfs02/M02/23/9E/wKioL1M7_ZPSVetLAADzbPA8NVk184.jpg" target="_blank"></a>
⑵、修改脚本
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M7_c7CwT1DAAC2okgyMbU634.jpg" target="_blank"></a>
⑶、ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效
<a href="http://s3.51cto.com/wyfs02/M00/23/9E/wKioL1M7_hThjPWKAAEESLPqPxI766.jpg" target="_blank"></a>
⑷、加载nf_conntrack模块(之前警告处提示的那个)
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M7_oyi4Vg4AADacQYBecA401.jpg" target="_blank"></a>
6、测试layer7应用层程序限定
注:更新后iptables在原有基础上新增了应用层的扩展语法,支持更多的扩展功能。
其格式如:
# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action]
三、测试环境
系统 :windows xp 安装软件QQ
系统 :linux 基于iptables 的防火墙。
1、网络属性:
windows xp
<a href="http://s3.51cto.com/wyfs02/M02/23/9D/wKiom1M7_1TTLHWKAAL9jt0Krqo380.jpg" target="_blank"></a>
linux网络属性
<a href="http://s3.51cto.com/wyfs02/M01/23/9E/wKioL1M7_1aTP-_1AAWPY0aZoyA386.jpg" target="_blank"></a>
2、配置完成后,测试windows xp与linux的连通性
但无法ping通物理机所在的192.168.1.0网段中的网关(192.168.1.253)
3、linux开启包转发与地址伪装
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M7_7ygld7fAACNy7TDqNc346.jpg" target="_blank"></a>
4、xp上网测试
<a href="http://s3.51cto.com/wyfs02/M01/23/9D/wKiom1M8AAKyWXfQAAHJGy8s1Yw818.jpg" target="_blank"></a>
5、限定某一网络内的主机不可以上QQ
#iptables -I FORWARD -m layer7 --l7proto qq -j REJECT
<a href="http://s3.51cto.com/wyfs02/M00/23/9D/wKiom1M8ADCRasGkAAKf-8zddio325.jpg" target="_blank"></a>
6、查看效果
<a href="http://s3.51cto.com/wyfs02/M02/23/9D/wKiom1M8AG6R6NiKAAE2X6Ox_B4004.jpg" target="_blank"></a>
注:如果想了解更多的l7-protocols支持对那些应用程序限定,请移步官网
====================================完=============================================
本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1389297,如需转载请自行联系原作者