通过iptables 封QQ 各种bt软件的方法

来源:互联网 发布:中日翻译软件下载 编辑:程序博客网 时间:2024/04/27 10:46
1楼 发表于 2008-7-1 17:49 
最近老大要求封qq  而且是封部分人使用,本来打算封腾讯登陆服务器的,但是无法封bt工具,找了一下资料。
以下部分为转载:
流程:
打上layer-7补丁
升级内核至2.6.19.7
升级iptables至1.3.7
适用环境:透过NAT共享上网的方式
步骤:

一,下载所需要的软件包:

1,下载新内核linux-2.6.19.7

wget http://www.kernel.org/pub/linux/ ... ux-2.6.19.7.tar.bz2

2,下载iptables1.3.7

wget http://www.netfilter.org/project ... ables-1.3.7.tar.bz2

3,下载Layer-7补丁,模块协议:

http://sourceforge.net/project/showfiles.php?group_id=80085

l7-protocols-2007-01-14.tar.gz

netfilter-layer7-v2.9.tar.gz

二,配置好内核选项:

1.把源码都放在/usr/src下

tar -jvf linux-2.6.19.7.tar.bz2           #解压

cd linux-2.6.19.7              

2.配置内核源码:

make menuconfig

(内核配置参照2.6内核编译的说明文档,论坛很多的)

3.新内核加进了Proxy Server经常用到几个功能:

Core Netfilter configuration

(2.6.19.7内核netfilter的string,comment,quota,iprange等模块已集成了)

ppp (point-to-point protocol) support  

PPP MPPE compression (encryption)     #微软加密协议支持,做pptp vpn用得着哦

三,L7补丁:

1,安装l7协议:

tar -zxvf l7-protocols-2007-01-14.tar.gz

cd l7-protocols-2007-01-14

make install

2.L7内核支持补丁:

cd /usr/src/linux-2.6.19.7

patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch

3,make menuconfig进去

把Layer 7 match support选上


四,编译内核:

make

make modules_install

make install

reboot选2.6.19.7内核启动

五,升级iptables:

cd /usr/src/iptables-1.3.7

#打上iptables的Layer7补丁

patch -p1 < ../netfilter-layer7-v2.9/iptables-layer7-2.9.patch

chmod +x extensions/.layer7-test

export KERNEL_DIR=/usr/src/linux-2.6.20

export IPTABLES_DIR=/usr/src/iptables-1.3.7

make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install

六,测试

iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

1,用string模块封QQ的DNS:

#封tencent

iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP

#封.qq.com,717103636F6D这段数据包特征可用嗅探器获取,

#如果直接用string封.qq.com,但是String模块不支持(估计是字符串匹配的问题)

#封qq的话很多wqq,qqxx这样的域名都不能用了所以封.qq.com是最佳做法

iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|717103636F6D|" --algo bm -j DROP

此方法可以使用hosts文件和代理的方式绕过。

2,彻底封杀QQ,分四步分别从udp,tcp,http代理,socks代理方式:

#用L7自带的QQ协议封杀通过TCP出去的QQ通信

iptables -I FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto qq -j DROP

#封QQ的UDP 8000端口的通信

iptables -I FORWARD -p udp --dport 8000 -j DROP

#封Socks代理

iptables -I FORWARD -p tcp -m layer7 --l7proto socks -j DROP

#封QQ通过Http代理出去(网页代理功能正常):

#新增一个过滤CONNECT模式的L7协议:

cd /etc/l7-protocols/protocols

#新建一文件httpagent.pat,内容如下:

# The HttpAgent Connect Action

httpagent

^/x43/x4F/x4E/x4E.+/x0D/x0A$


iptables -I FORWARD -p tcp -m layer7 --l7proto httpagent -j DROP


3,用L7封Msn:

#封MSN

iptables -I FORWARD -m layer7 --l7proto msnmessenger -j DROP


参考文章:

http://www.chinaunix.net/jh/4/853647.html

http://bbs.chinaunix.net/viewthread.php?tid=505370

http://bbs.chinaunix.net/viewthread.php?tid=484867

http://linux.chinaunix.net/bbs/viewthread.php?tid=885123本文出自 51CTO.COM技术博客





###########################下面是公司的示例###################

#!/bin/sh
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
iptables -t nat -Z
iptables -Z

echo "1">/proc/sys/net/ipv4/ip_forward

# DHZG port 5555 8888
# MSN Port 1863
# QQ port 8000
# patrix port 7612 7619-7622 20000 20001
# feng ling huo san test port 15000-15002  --->to 2008.8.13
# Rohan 22100
# TianYuChuanShuo port 30002
# tianlongbabu 1231   ---> end 2008.7.5
# Manager port 9196 6495
# ffmpeg update port 3690
# monster trail Port 8036:8359 9203  --->end 2008.7.30
#QQ domain sz.tencent.com sz2-sz9.tencent.com
##         tcpconn.tencent.com tcpconn2-tcpconn6.tencent.com
##         http.tencent.com  http2.tencent.com
##         allow ip_file connect QQ /etc/rc.d/QQ_allow.txt

allow_ports="53 80 443 22 5555 8888 22100 1863 8000 7612:7622 20000 20001 30002 9196 9612 6495 15000:15002 1231 3690 8036:8359 9203"
forward_ports="53 80 443"

#ChinaJoy FTP 219.238.254.7
allow_d="219.238.254.7 222.73.27.0/25 61.152.183.135 61.152.183.136 61.152.183.137"
#officeip=

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT  -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -p udp --dport 161 -j ACCEPT
#for Port in $allow_ports;do
#iptables -A INPUT -i eth0 -p tcp --dport $Port -j ACCEPT
#iptables -A INPUT -i eth0 -p udp --dport $Port -j ACCEPT
#done

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth1 -j MASQUERADE

#################
### BT & p2p ####
#################
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP
iptables -A FORWARD -m layer7 --l7proto 100bao -j DROP
iptables -A FORWARD -m layer7 --l7proto applejuice -j DROP
iptables -A FORWARD -m layer7 --l7proto ares -j DROP
#iptables -A FORWARD -m layer7 --l7proto ciscovpn -j DROP
iptables -A FORWARD -m layer7 --l7proto directconnect -j DROP
iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP
iptables -A FORWARD -m layer7 --l7proto fasttrack -j DROP
iptables -A FORWARD -m layer7 --l7proto freenet -j DROP
#iptables -A FORWARD -m layer7 --l7proto ftp -j DROP
iptables -A FORWARD -m layer7 --l7proto gnucleuslan -j DROP
iptables -A FORWARD -m layer7 --l7proto gnutella -j DROP
iptables -A FORWARD -m layer7 --l7proto goboogy -j DROP
iptables -A FORWARD -m layer7 --l7proto hotline -j DROP
iptables -A FORWARD -m layer7 --l7proto imesh -j DROP
iptables -A FORWARD -m layer7 --l7proto kugoo -j DROP
iptables -A FORWARD -m layer7 --l7proto mute -j DROP
iptables -A FORWARD -m layer7 --l7proto napster -j DROP
iptables -A FORWARD -m layer7 --l7proto openft -j DROP
iptables -A FORWARD -m layer7 --l7proto poco -j DROP
iptables -A FORWARD -m layer7 --l7proto socks -j DROP
iptables -A FORWARD -m layer7 --l7proto soribada -j DROP
iptables -A FORWARD -m layer7 --l7proto soulseek -j DROP
iptables -A FORWARD -m layer7 --l7proto tesla -j DROP
iptables -A FORWARD -m layer7 --l7proto thecircle -j DROP
iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
##QQ bind ip##
iptables -A FORWARD -m layer7 --l7proto httpagent -j DROP
##chedn hong quan##
iptables -A FORWARD -s 172.16.1.57 -m layer7 --l7proto qq -j DROP
##shi yuadn kai##
iptables -A FORWARD -s 172.16.1.192 -m layer7 --l7proto qq -j DROP
##xu bddin###
iptables -A FORWARD -s 172.16.1.128 -m layer7 --l7proto qq -j DROP
###################################################################
iptables -A FORWARD -p udp -s 172.16.1.128 --dport 8000 -j DROP
iptables -A FORWARD -p udp -s 172.16.1.57 --dport 8000 -j DROP
iptables -A FORWARD -p udp -s 172.16.1.192 --dport 8000 -j DROP
##################################################################
for Port in $allow_ports;do
iptables -A FORWARD -p tcp --dport $Port  -j ACCEPT
iptables -A FORWARD -p udp --dport $Port  -j ACCEPT
done

for Ds in $allow_d;do
iptables -A FORWARD -d $Ds  -j ACCEPT
done

iptables -A FORWARD -s 172.16.33.0/24 -j ACCEPT
iptables -A FORWARD -s 172.16.4.0/24 -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT

#iptables -A FORWARD  -j ACCEPT
#iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT


web讯龙是通过squid 屏蔽了my.xunlei.com 这个域名。希望能给大家带来帮助,上面的规则有些乱,还有部分有待精简!!

[ 本帖最后由 leohuangfu 于 2008-7-1 17:52 编辑 ]

 

5楼 发表于 2008-7-1 18:14 
这台机器上 跑了squid +sarg +bandwidthd  2块1.5k高速硬盘做的raid 3G内存 用top看了一下 cpu利用率很低!
内存用的有点多,我查了一下 主要是squid 占用的多,毕竟200多人办公。跑一段时间看看吧!



 

7楼 发表于 2008-7-2 10:11 


QUOTE:
原帖由 leohuangfu 于 2008-7-1 17:49 发表
1,用string模块封QQ的DNS:

#封tencent

iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP

#封.qq.com,717103636F6D这段数据包特征可用嗅探器获取,

#如果直接用string封.qq.com,但是String模块不支持(估计是字符串匹配的问题)

不是 string 模块不支持,而是 DNS 数据包的具体内容和表面上我们看到的数据实际是不一样的
请参考我的这篇文章,在 libipt_domain.c 的代码中有对 "www.tencent.com" 这样的域名进行转换的具体实例

http://linux.chinaunix.net/bbs/viewthread.php?tid=791863


 

8楼 发表于 2008-7-2 10:43 
测试发现 有人可以通过http代理 正常登陆qq     由于这台linxu服务器上还装有squid
凡是访问80端口的 重定向到8080端口出去,这样的话 哪些表达式如: ^/x43/x4F/x4E/x4E.+/x0D/x0A$  都不生效了。不知道问题出在什么地方,我查了网上不少网友的资料,换了好几个类似的表达式,都不行。另外这个表达式是如何得到的!!难道随着QQ版本的改变,这个表达式也会随着变 ???



 

10楼 发表于 2008-7-2 18:02 
我搞了一个下午,发现我错了,,,, 我的那个示例只能封正常方式的QQ登陆。
通过http代理的依然可以登陆,,, 我抓包发现^/x43.+/x0A$ 是有效的,不过范围可能有点大,精确点应该是:
^/x43/x4F/x4E/x4E.+/x0D/x0A$     
由于我有squid代理做了端口重定向,80端口出去的包重定向到8080  把规则加在FORWARD链,是不行的。
我在INPUT链的最前面写了一行:
                   iptables -A INPUT -m layer7 --l7proto httpagent -j DROP
               封掉了通过代理上QQ,为什么要加载INPUT里面?  

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
这个规则和squid惹的。
不知道我说的对不,感觉上就是重定向到8080后,数据包再次INPUT了!!



 

12楼 发表于 2008-7-6 13:47 


QUOTE:
原帖由 leohuangfu 于 2008-7-2 18:02 发表
我搞了一个下午,发现我错了,,,, 我的那个示例只能封正常方式的QQ登陆。
通过http代理的依然可以登陆,,, 我抓包发现^/x43.+/x0A$ 是有效的,不过范围可能有点大,精确点应该是:
^/x43/x4F/x4E/x4E.+/ ...

http://linux.chinaunix.net/bbs/viewthread.php?tid=506345



 

15楼 发表于 2008-8-29 20:36 
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP

那个 bm指的是什么?


 

 

16楼 发表于 2008-8-29 21:27 
bm 指的是 bm 匹配算法,内核还支持 kmp 匹配算法,bm 的效率略高于 kmp



 

 

 

 

 

 

 

原创粉丝点击