我从网上找了这篇文章,实际此做了一些。并改动了一些步骤的内容,但大体还是保持了原貌,同时也截图说明了一些。
      虽然原文,个人认为不严谨,但是整体还是正确的,可能是作者也和偶一样,有点懒,有些就没有详细说明吧。
     在些感谢原作者的奉献。尤其是对偶的帮助

      其中@@是偶的注明及改动的地方。


原文链接:[url]http://blog.xok.cn/article.asp?id=44[/url]

前言:
    
主要目的彻底封锁QQ,MSN通信;字符过滤(支持中文),避免服务器上出现非法字眼.
注意:如果apache开启了Gzip或mod_deflate,output策略的字符过滤将失效.

流程:
打上layer-7补丁
升级内核至2.6.19.7
升级iptables至1.3.7

适用环境:透过NAT共享上网的方式


步骤:

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

1,下载新内核linux-2.6.19.7
wget [url]http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2[/url]
@@建议使用2.6.20以上的版本,当然之后一些编译的过程要改变下。

2,下载iptables1.3.7
wget [url]http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2[/url]

3,下载Layer-7补丁,模块协议:
[url]http://sourceforge.net/project/showfiles.php?group_id=80085[/url]
l7-protocols-2007-01-14.tar.gz
@@l7-protocols-2007-11-22

netfilter-layer7-v2.9.tar.gz
@@我采有的是netfilter-layer7-v2.17,因为手头上有,又懒不想去更新。

二,配置好内核选项:

1.把源码都放在/usr/src下
tar -jvf linux-2.6.19.7.tar.bz2           #解压
cd linux-2.6.19.7    
@@mv linux-2.6.19.7 linux    改名为linux

2.配置内核源码:
make menuconfig
(内核配置参照2.6内核编译的说明文档,论坛很多的)

3.新内核加进了Proxy Server经常用到几个功能:
Core Netfilter configuration
(2.6.19.7内核netfilter的string,comment,quota,iprange等模块已集成了)

@@在我使用的CentOs 5.1上。iptables的版本是1.3.5,也有这些模块.
@@ /usr/src/linux/make menuconfig   Networking--Networking options--Network packet filtering (replaces ipchains)--Core Netfilter Configuration




ppp (point-to-point protocol) support  
PPP MPPE compression (encryption)     #微软加密协议支持,做pptp ***用得着哦

三,L7补丁:

1,安装l7协议:
tar -zxvf l7-protocols-2007-01-14.tar.gz
cd l7-protocols-2007-01-14

@@ tar zxvf l7-protocols-2007-11-22.tar.gz
@@ cd l7-protocols-2007-11-22


make install

2.L7内核支持补丁:
cd /usr/src/linux-2.6.19.7

@@cd /usr/src/linux

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

@@patch -p1

3,make menuconfig进去
把Layer 7 match support选上

@@把L7加入到内核编译中,其它的,同志们看着做。
@@/usr/src/linux/make menuconfig   Networking--Networking options--Network packet filtering (replaces ipchains)--Core Netfilter Configuration




四,编译内核:

make
make modules_install
make install
reboot选2.6.19.7内核启动

@@可以改变GRUB.CONF吧,偶懒。也没有改。

五,升级iptables:

cd /usr/src/iptables-1.3.7
#打上iptables的Layer7补丁
patch -p1 < ../netfilter-layer7-v2.9/iptables-layer7-2.9.patch

@@patch -p1 <../netfilter-layer7-v2.17/iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch
@@我没有找到iptables-layer7-2.9.patch,呵呵,后经证明,我做的也是对的。这个地方也是我建议各位使用2.6.20后内核的一个原因啦。呵呵。


chmod +x extensions/.layer7-test
export KERNEL_DIR=/usr/src/linux-2.6.20

@@这里为何是linux-2.6.20呢,按照上文应是linux-2.6.19
@@export KERNEL_DIR=/usr/src/linux


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

@@这个在1.3.5版本上不能编译也能成功通过命令的。注意下图中的:
@@-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH 这个是我用了fail2ban来限制那些SSH扫描登陆的。呵呵
@@-A FORWARD -p tcp -m tcp --dport 80 -m string --string "tencent" --algo bm --to 65535 -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

七,最后:

感谢CU版主及众高人的精彩文章,让小菜我可以完成这篇文档,也期望有人能得到什么
并希望有人继续完善提出更好更高效的方法。


参考文章:
[url]http://www.chinaunix.net/jh/4/853647.html[/url]
[url]http://bbs.chinaunix.net/viewthread.php?tid=505370[/url]
[url]http://bbs.chinaunix.net/viewthread.php?tid=484867[/url]
[url]http://linux.chinaunix.net/bbs/viewthread.php?tid=885123[/url]


@@最后注明,我根据我的实测更改了部分,但此文的整体思路的确不错。而且参考起来,只要会变通,也能顺利完成全文所说的项目。
@@为了证明也能测试成功,截图说明: