iptables l7-filter扩展模块封QQ、MSN、迅雷等应用层协议

iptables是基于Linux内核模块的一款防火墙软件,能够针对网络层协议(tcp和udp)数据包过滤,从而加固系统的安全性,这里有两点需要注意:1.由于iptables是基于Linux Kernel工作的所以对系统的性能是有一定影响的,某些业务场景下建议关闭iptables;2.iptables虽然也被称为防火墙,但是毕竟软件级防火墙,不可当作硬件级防火墙(我以前使用过Juniper的SSG-550M-SH,当然价格也非常昂贵)的替代品,尤其防御DoS/DDoS攻击(如CC、SYN flood、DNS Query Flood、SYN Flood、UDP Flood等)iptables毫无作用,准确的说还是把iptables定义为包过滤工具。

默认的iptables是不支持7层(应用层)数据包过滤的,不过可以通过给内核打layer7 patch,使得iptables支持过滤应用层数据包,如腾讯QQ、MSN、迅雷等应用软件数据包的功能,从而能满足小型企业使用一台Linux作为网关并且利用iptables layer7模块限制公司员工工作期间使用QQ聊天,迅雷下载的目的,节约了小公司的运营成本。

下面介绍如何让iptables支持layer 7模块功能,我的系统是RHEL6.2,内核版本2.6.32.22

1.1 安装相关的软件包

#yum install -y ncurses-devel

1.2 下载相关源码包到/usr/src目录下

netfilter-layer7-v2.22.tar.gz

iptables-1.4.20.tar.bz2 //写此文时最新版本的iptables

linux-2.6.32.22.tar.gz //与系统自带kernel版本一致

l7-protocols_2007-11-22.tar.gz

1.3 编译kernel

#cd /usr/scr

#tar xzvf linux-2.6.32.22.tar.gz

#tar xavf netfilter-layer7-v2.22.tar.gz

#ln -s linux-2.6.32.22 linux 创建软连接

#cd /usr/src/linux

#patch -p1 <../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch (注:这里显示patch支持内核的版本范围是2.6.25-2.6.28,但测试用在2.6.32.22上也可以)

#cp /boot/config-2.6.32-220.el6.i686 /usr/src/linux/.config

#make menuconfig 执行之后出现选择内核模块的界面,通过相应的菜单,选择需要加载的模块

 
 

133501213.png

1.3 Networking support -->>Networking Options -->>Network packet filtering framework -->>Core Netfilter Configuration ,如图所示

133741126.png

选择完成后保存退出

#make

#make modules_install

#make install

编译完成后重启

#reboot

需要注意的是系统默认是启动原先的内核的,在开机的时候在grub界面选择启动新的内核,上面的是我自己编译过的内核,而下面的是RHEL系统默认启动的内核,我们选择上面的

134105287.png

2.重启进入系统后编译安装iptables
2.1卸载系统默认用rpm包安装的iptables

 
 

卸载前我们先把iptables的启动脚本及脚本配置文件备份到/tmp目录

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

#cp /etc/sysconfig/iptables-config /tmp

卸载iptables,在卸载时会存在包的依赖关系无法卸载

#rpm -e --nodeps iptables-ipv6 iptables iptstate

2.2编译安装iptables

 
 

#cd /usr/src

#tar jxvf iptables-1.4.20.tar.bz2

#cd iptables-1.4.20

#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

3.编译安装l7protocols
l7protocols 是layer7所能够支持的协议包

 
 

#cd /usr/src

#tar xzvf l7-protocols_2007-11-22.tar.gz

#cd l7-protocols_2007-11-22

#make install

4.修改iptables启动脚本,已经备份在/tmp目录下
4.1 修改iptables启动脚本

 
 

首先将脚本跟配置文件复制到相应的目录然后再做修改

#cp /tmp/iptables-config /etc/sysconfig/

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

#chmod a+x /etc/init.d/iptables

#vim /etc/init.d/iptables 把所有/sbin/$IPTABLES替换为/usr/sbin/$IPTABLES 在vim命令模式下:%s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g 然后保存退出

5.重新启动iptables

 
 

#service iptables restart

6.作为网关禁止QQ,MSN,迅雷等

 
 

禁止腾讯QQ

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

禁止酷狗

#iptables -A FORWARD -s 192.168.62.0/24 -m layer7 --l7proto msn -j DROP

禁止迅雷

#iptables -A FORWARD -s 192.168.62.0/24 -m layer7 --l7proto xunlei -j DROP

7.本机禁止登录QQ测试

7.1首先我没有增加layer7的iptables策略,登录QQ

143356421.png

可以看出网络是正常的,QQ也可以正常登录

7.2 增加iptables策略

#iptables -A OUTPUT -s 192.168.62.0/24 -m layer7 --l7proto qq -j DROP

#service iptables save

重新登录QQ

140651868.png

可以看出网络仍然是正常的,但无法登录QQ,提示连接服务器超时,从而达到我们要的效果

补充:有哪些可以被禁止的应用层协议呢?

 
 

#ls /etc/l7-protocols/protocols/ 只要里面有的都可以封杀,使用方法跟上面的一样,将其目录中对应文件的后缀名去掉

比如说,此目录里有个pplive.pat 的文件,那么实现网关上禁止pplive的方法则是

#iptables -A FORWARD -s 192.168.62.0/24 -m layer7 --l7proto pplive -j DROP


PS:关于朋友留言给我提问l7模块是否能限制web qq的使用呢?

104715588.jpg

答案是否定的,通过测试可以看到,客户端QQ软件无法登录,但webQQ可以登录。道理很简单,使用浏览器登录web QQ是用的http协议而不是qq的应用协议,所以可以使用web QQ。

本文出自 “老徐的私房菜” 博客,谢绝转载!

你可能感兴趣的:(应用软件,应用层,迅雷下载,腾讯QQ)