Fork me on GitHub
Maxie's Notes

layer7实现禁止登陆QQ,迅雷

作为网络管理员,对p2p,QQ,迅雷等软件是又爱又恨
大多数公司,为了提高工作效率禁止公司员工上QQ,用迅雷下载高清无码视频,在市场上买专门的上网行为管理设备,动辄就是上万。
但是,如果使用Linux来做网关,一样可以禁止这些软件,成本才不到万把块钱。

在使用 layer7 之前,我们需要知道,layer7是第三方的软件,而非 Liunx内核或者其他发行版自带的功能。所以我们要想使用其提供的功能,就要先把它编译到kernel中。

一听到编译内核 ,大多数人都会有好麻烦会不会出错还是算了吧这样的心态或者想法;但是,对于Linux来说,只有永无止境的折腾才能学好并精通Linux

废话不多说,下面让我们开始第一步:编译Linux内核


实验环境:
1
2
3
虚拟机操作系统(OS):CentOS Linux release 7.2.1511 (Core)
内核版本(Kernel):3.10.0-327.el7.x86_64
虚拟机环境:VMware Fusion 专业版 8.5.3 (4696910)

这里因为要编译内核,所以尽可能增加一下虚拟机的配置

/usr目录如果是单独分区,分区大小必须大于20G,以免编译时空间不足

客户端环境:


编译Linux内核并打layer7补丁

1、安装基本开发库及相关依赖软件

1
$ yum -y groupinstall "Development Libraries" "Development Tools" "Server Platform Development"

2、下载内核源码以及layer7补丁

1
2
$ wget ftp://172.16.0.1/pub/Sources/sources/iptables/* ./
$ wget ftp://172.16.0.1/pub/Sources/sources/kernel/linux-2.6.32.61.tar.xz ./
下载好了之后将其复制到/usr/src
1
2
3
4
5
6
7
8
9
10
$ cp /root/linux-2.6.32.61.tar.xz /usr/src
$ cp /root/netfilter-layer7-v2.23.tar.bz2 /usr/src
$ cd /usr/src
$ tar xf linux-2.6.32.61.tar.xz
$ tar xf netfilter-layer7-v2.23.tar.bz2
$ ln -s linux-2.6.32.61 linux
$ cd /usr/src/linux
$ patch -p1 < ../netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
$ cp /root/config-2.6.32-el6 /usr/src/linux/.config
$ make menuconfig #执行之后会出现一个让用户选择内核模块的界面,进入相应的菜单,将下面的模块选上
Networking support → Networking Options →Network packet filtering framework →Core Netfilter Configuration
1
2
3
4
5
6
7
8
9
10
<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
1
2
3
4
5
<M> IPv4 connection tracking support (required for NAT)
<M> Full NAT
<M> MASQUERADE target support
<M> NETMAP target support
<M> REDIRECT target support
编译内核
1
2
3
4
5
$ yum install screen
$ screen
$ make
$ make modules_install
$ make install

编译完成后记得要重启服务器,启动时选择新的内核


编译安装iptables

1、卸载系统上自带的iptables

卸载之前要先把iptables的启动脚本以及配置文件备份

1
2
$ cp /etc/init.d/iptables /root
$ cp /etc/sysconfig/iptables-config /root

卸载iptables:

1
$ rpm -e --nodeps iptables iptables-ipv6 iptstate

2、编译安装iptables

先下载iptables-1.4.20.tar.bz2包到系统的 /usr/src目录下,然后开始编译安装

1
2
3
4
5
6
7
8
$ wget ftp://172.16.0.1/pub/Sources/sources/iptables/iptables-1.4.20.tar.bz2 /usr/src
$ cd /usr/src
$ tar xf iptables-1.4.20.tar.bz2
$ cd iptables-1.4.20
$ cp ../netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/
$ ./configure --prefix=/usr --with-ksource=/usr/src/linux
$ make
$ make install

安装l7-protocols

l7protocols 是layer7所能够支持的协议包

下载l7-protocols-2009-05-28.tar.gz到/usr/src目录,然后开始编译安装

1
2
3
4
5
$ wget ftp://172.16.0.1/pub/Sources/sources/iptables/l7-protocols-2009-05-28.tar.gz /usr/src
$ cd /usr/src
$ tar xf l7-protocols-2009-05-28.tar.gz
$ cd l7-protocols-2009-05-28
$ make install

修改iptables启动脚本

就是之前我们做的关于iptables的启动脚本与配置文件的备份

修改iptables启动脚本

1
2
3
4
5
6
$ cp /root/iptables-config /etc/sysconfig/
$ cp /root/iptables /etc/init.d/
$ chmod +x /etc/init.d/iptables
$ vim /etc/init.d/iptables #注意,这里要把所有 /sbin/$IPTABLES 替换为 /usr/sbin/$IPTABLES
在vim的命令模式下输入:
%s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g 回车执行后,保存退出

启动iptables

1
$ service iptables restar

封QQ,迅雷

使本机作为一个局域网的网关,并具有上网功能的情况下:

封QQ

1
$ iptables -A FORWARD -s 192.168.1.0/24 -m layer7 --l7proto qq -j REJECT

封迅雷

1
$ iptables -A FORWARD -s 192.168.1.0/24 -m layer7 --l7proto xunlei -j REJECT

layer7支持百种协议

如果你想封其他程序,只需要查看程序是否在 /etc/l7-protocols/protocols/ 目录下,如果有则照猫画虎似的按照上面的例子进行封杀即可。


本文出自Maxie’s Notes博客,转载请务必保留此出处。

-------------本文结束感谢您的阅读-------------

本文标题:layer7实现禁止登陆QQ,迅雷

文章作者:阿蓝

发布时间:2017年06月12日 - 20:06

最后更新:2017年06月12日 - 21:06

原始链接:http://maxiecloud.com/2017/06/12/iptables-of-layer7/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。