近日,我尝试了下在公司内网屏蔽QQ,相信很多网管也会有碰到这方面的需求,以下过程可以参考下

我们公司内部是用了LINUX服务器作为网关路由,因此我主要是采用iptables来做屏蔽。
QQ的登陆主要是解析登陆服务器域名,得到IP列表,然后再根据这些列表逐一尝试登陆的,由于现在QQ不单用到UDP协议,还可以通过TCP协议,不单有8000端口,还有80,443端口,所以我们需要把所有的能解析到的IP都过滤屏蔽掉,我的思路是解析,然后根据解析出来的IP列表屏蔽到IPTABLE里去,最后再屏蔽一些额外的不是通过域名解析得到的登陆服务器IP。

首先是把QQ禁用列表加到FORWARD里
iptables -N QQ-FILTER
iptables -I FORWARD -j QQ-FILTER
以下为自动加IP程序:

#! /bin/bash
iptables -F QQ-FILTER
host=("tcpconn.tencent.com" "tcpconn2.tencent.com" "tcpconn3.tencent.com" \
tcpconn4.tencent.com tcpconn5.tencent.com sz.tencent.com sz2.tencent.com \
sz3.tencent.com sz4.tencent.com sz5.tencent.com sz6.tencent.com \
sz7.tencent.com sz8.tencent.com sz9.tencent.com tm.tencent.com \
tm2.tencent.com tm3.tencent.com tcptm.tencent.com tcptm2.tencent.com tcptm3.tencent.com )
now=`date`
for outer in ${host[*]}
do
nslookup $outer|grep Address|grep -v 127.0.0.1|awk -F ' ' '{ print $2 }'>temphost
i=0
cat temphost| while read line
do
cmd="iptables -I QQ-FILTER -p all -d $line -i eth1 -j DROP"
$cmd
i=`echo $i+1 | bc`
done
echo "$now host:$outer " >>banip.txt
done

allip=("121.14.101.169" "119.147.14.145" "121.14.98.0/24" "219.133.49.0/24");
for outip in ${allip[*]}
do
cmd="iptables -I QQ-FILTER -p all -d $outip -i eth1 -j DROP"
$cmd
done
iptables -I QQ-FILTER -p udp -d 0/0 --dport 4000:9000 -i eth1 -j DROP
iptables -I QQ-FILTER -p all -d 0/0 --dport 2680 -i eth1 -j DROP