Linux下利用l7filter封杀迅雷、
QQ、MSN |
|
摘自: 被
阅读次数: 186 |
由 于 2009-09-05 23:22:45 提供 |
-----------------------------------------------------
最稳定的
------------------------------------------2.6.19内核
--------------------------------------iptables
主程序
------------------------------l7filter
主程序
--------------------------l7filter
的封禁protocol脚本
与l7filter有关的网站:
注意查看netfilter-layer7-v2.21.tar.gz中的README文件,以便确定内核版本。
iptables-1.4-for-kernel-2.6.20forward-layer7-[l7-filter
version].patch
forward表示支持内核版本为2.6.20或更新的版本。
iptables-1.3-for-kernel-pre2.6.20-layer7-[l7-filter
version].patch
pre表示支持内核版本为2.6.20之前的内核老版本,包括2.4
我们选择
内核补丁为:kernel-2.6.25-2.6.28-layer7-2.21.patch
Iptables的补丁为:iptables-1.4.1.1-for-kernel-2.6.20forward
内核版本选择为:-2.6.27
Iptables选择为:iptables-1.4.1.1.tar
1. 为内核及iptables打l7filter补丁
1.1
安装gcc
安装CentOS5.2时采用自定义软件,然后选中“based”并取消其它全部选定,进行基本安装。安装完成进入系统,首先安装GCC。
# rpm -ivhU kernel-headers-2.6.18-92.el5.i386.rpm
# rpm -ivhU glibc-headers-2.5-24.i386.rpm
# rpm -ivhU glibc-devel-2.5-24.i386.rpm
# rpm -ivhU libgomp-4.1.2-42.el5.i386.rpm
# rpm -ivhU cpp-4.1.2-42.el5.i386.rpm
# rpm -ivhU gcc-4.1.2-42.el5.i386.rpm
查看一下GCC版本:
# gcc -v
gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)
再查看当前内核版本:
# uname -r
2.6.19-default
还需要安装如下RPM包,这个包是在#make menuconfig 时必需的,否则报错:
# rpm -ivhU ncurses-devel-5.5-24.20060715.i386.rpm
1.2 给内核打补丁
先将l7filter解压:
# tar zxvf netfilter-layer7-v2.21.tar.gz
再给内核打l7filter补丁:
# tar zxvf linux-2.6.27.tar.gz
# cd linux-2.6.27
# patch -p1 <
../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch
还需要修改如下文件,否则编译时出错:
# vi scripts/kconfig/mconf.c
将static struct menu *current_menu;这一行注释掉,
并添加struct menu *current_menu;如下:
//static struct menu *current_menu;
struct menu *current_menu;
把以前的配置文件拷贝到当前内核目录,以继承原有配置:
# cp /boot/config-2.6.18-92.el5 ./.config
# make mrproper @@@删除不必要的文件和目录,初次编译内核不需要
# make clean @@@删除不必要的模块和文件
# make menuconfig @@@基于文本选单的配置界面,字符终端下推荐使用
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
Networking support --->Networking options--->Network packet
filtering framework (Netfilter) --->Core Netfilter Configuration
--->
选中如下两行:
"layer7" match support
[*] Layer 7 debugging output
如下图所示:
然后保存退出内核配置模式。
# make dep @@@链接程序代码和函数库
# make bzImage @@@开始编译系统内核,此步大约需要25分钟
# make modules @@@开始编译外挂模块,此步大约需要1个小时
# make modules_install @@@安装编译完成的模块
# make install @@@将刚才编译完成的内核安装到系统里面
编译内核完成后,用新内核启动,然后进入系统
看一下当前系统内核:
# uname -r
2.6.27
1.3 安装iptables
下面给iptables打l7filter补丁,并编译、安装:
# tar jxvf iptables-1.4.1.1.tar.bz2
# cd iptables-1.4.1.1
# ln -s /home/l7filter/linux-2.6.27 /usr/src/linux
#cp
netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/libxt_layer7.*
iptables-1.4.1.1/extensions/
# ./configure --with-ksource=/usr/src/linux/
#make
#make install
查看一下iptables的版本信息:
# iptables -v
iptables v1.4.1.1: no command specified
Try `iptables -h' or 'iptables --help' for more information.
好了,现在我们已经完成了内核和iptables对l7filter的支持工作,下面开始设置。
1.4安装l7-filter文
件:
# tar zxvf l7-protocols-2008-12-18.tar.gz
# cd l7-protocols-2008-12-18
# make install @@@进行安装,只是拷贝了一些文件到/etc目录
mkdir -p /etc/l7-protocols
cp -R * /etc/l7-protocols
2.利用l7filter来封禁迅雷、qq、msn….
首先我们查看一下l7filter支持的封禁列表:
# ls /etc/l7-protocols/protocols/
100bao.pat gkrellm.pat
ncp.pat ssdp.pat
aim.pat gnucleuslan.pat
netbios.pat ssh.pat
aimwebcontent.pat gnutella.pat
nntp.pat ssl.pat
applejuice.pat goboogy.pat
ntp.pat stun.pat
ares.pat
openft.pat subspace.pat
agetron.pat guildwars.pat
pcanywhere.pat subversion.pat
battlefield1942.pat h323.pat
poco.pat teamfortress2.pat
battlefield2142.pat halflife2-deathmatch.pat
pop3.pat teamspeak.pat
battlefield2.pat hddtemp.pat
pplive.pat telnet.pat
bgp.pat hotline.pat
qq.pat tesla.pat
biff.pat http.pat
quake1.pat tftp.pat
bittorrent.pat http-rtsp.pat
quake-halflife.pat thecircle.pat
chikka.pat ident.pat
radmin.pat tor.pat
cimd.pat imap.pat
rdp.pat tsp.pat
ciscovpn.pat imesh.pat
replaytv-ivs.pat unknown.pat
citrix.pat ipp.pat
rlogin.pat unset.pat
counterstrike-source.pat irc.pat
rtp.pat uucp.pat
cvs.pat jabber.pat
rtsp.pat validcertssl.pat
dayofdefeat-source.pat kugoo.pat
shoutcast.pat ventrilo.pat
dhcp.pat live365.pat
sip.pat vnc.pat
directconnect.pat liveforspeed.pat
skypeout.pat whois.pat
dns.pat lpd.pat
skypetoskype.pat worldofwarcraft.pat
doom3.pat mohaa.pat
smb.pat x11.pat
edonkey.pat msn-filetransfer.pat
smtp.pat xboxlive.pat
fasttrack.pat msnmessenger.pat
snmp.pat xunlei.pat
finger.pat mute.pat
socks.pat yahoo.pat
freenet.pat napster.pat
soribada.pat zmaap.pat
nbns.pat soulseek.pat
我们可以看到,l7filter支持的封禁相当
丰富,并且支持都很好。
# iptables -t mangle -I POSTROUTING -m layer7 --l7proto
msnmessenger -j DROP
# iptables -t mangle -I POSTROUTING -m layer7 --l7proto qq -j
DROP
# iptables -t mangle -I POSTROUTING -m layer7 --l7proto xunlei -j
DROP
#iptables -t mangle -I PREROUTING -m layer7 --l7proto edonkey -j
DROP
#iptables -t mangle -I PREROUTING -m layer7 --l7proto bittorrent
-j DROP
上面命令将msn、qq、迅雷、电驴、BT进行了封禁。
其中红色部分就在我们用命令# ls /etc/l7-protocols/protocols/所看到的列表中。
启动IP转发,使客户端可以通过pppoe访问外网
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -s 0/0
下面我们进行(l7filter服务器
作为企业网络的网关,这里IP为192.168.1.251):
查看当前封禁情况:
# iptables -t mangle -L POSTROUTING -v
Chain POSTROUTING (policy ACCEPT 386 packets, 41321 bytes)
pkts bytes target prot opt in out
source destination
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto aim
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto bittorrent
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto edonkey
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto xunlei
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto qq
0 0 DROP all -- any any
anywhere anywhere LAYER7 l7proto msnmessenger
Qq和msn的连接失败信息:
系统log信息
L7filter的处理图示:
其它的封禁情形不再一一演示,l7filter是个功能相当强大的七层网管,值得深入研究。
原文链接: