Linux防火墙iptables(三)
我们前面两篇已经把iptables介绍的比较充分了,今天来说一个iptables对layer 7的实践。我们说过iptables/netfilter工作在内核空间是不支持应用层协议的,但是诸如QQ、MSN、迅雷等应用我们是无法在传输层或者网络层完全封闭它们的,因为它们非常狡猾发现自己的端口被封掉之后会用其它打开的端口进行传输数据,所以只有在7层中封闭它们才行。所以有人就针对这种情况对iptables/netfilter进行了二次开发,写了一些补丁,我们打上这些补丁可以使iptables支持7层协议。
因为iptables-l7的作者在09年之后就没有在更新过这个补丁,所以它所依赖的内核版本和iptables程序包都比较老,所以我们需要自己编译内核,自己编译iptables才能使用。
我们需要用到以下几个包:

安装编译环境:

创建编译所需用户、解压内核文件:

向内核打layer 7的补丁:

配置并编译内核:

为了节省时间,我们用系统自带的config文件做模板在其基础上进行修改

选择网络功能:

选择网络选项:

选择netfilter模块:

选择netfilter核心配置:

添加支持layer7层模块:

关闭RedHat内核模块校验:

保存退出:

因为红帽为了防止其它人更改其内核模块进行二次发行,所以添加了模块签名机制,我们的模块没有红帽的签名,所以需要关闭这个功能才能编译成功。

#yum install screen -y
#screen
#make –j 4
#make modules_install
#make install
查看新内核是否安装成功:

使用新内核启动:

编译前的准备工作:

编译安装:

设置配套的脚本和配置文件:

安装layer7的补丁:

开启连接追踪功能:

构建实验拓扑:
NAT Server:192.168.1.0/24, 192.168.23.0/24
Client:192.168.23.0/24

创建NAT条目:

可以看到Client的确是通过NAT Server上网的:

现在QQ也可以登录:

设置layer7层条目拒绝QQ:

已经登录失败了:

匹配到的layer7的规则:

还是能够上网:

匹配到的NAT规则:

拒绝QQ连接的原理:

OK,我们的实验成功啦。可以有效的防止QQ登录,但是还可以上网。虽然我们可以完成这样甚至限制更多的7层服务的功能,但是我是不赞成公司使用的,因为只有自由开放的公司才有活力,靠权利去禁止某些东西归根结底治标不治本。如有错误敬请指出。

Linux防火墙iptables(三)_第1张图片