linux(Centos5.1)升级2.6.19内核+L7实现string,字符过滤

上一篇 / 下一篇  2008-01-09 00:02:05

查看( 419 ) / 评论( 2 )
       我从网上找了这篇文章,实际此做了一些。并改动了一些步骤的内容,但大体还是保持了原貌,同时也截图说明了一些。
4g~(m,C3L(Q~T3Y0       虽然原文,个人认为不严谨,但是整体还是正确的,可能是作者也和偶一样,有点懒,有些就没有详细说明吧。
(vj~6`8}5W%d3N R*F0      在些感谢原作者的奉献。尤其是对偶的帮助IXPUB技术博客B(u!w'W1a({Jk
IXPUB技术博客j/z&FHh+p
      其中@@是偶的注明及改动的地方。

k6q_*|J_ ^%]s0
#i'\6Zxy^p0 原文链接:http://blog.xok.cn/article.asp?id=44IXPUB技术博客 B2N;S)\I(^mR%j
IXPUB技术博客#_i h$Fy*m2M*{u
前言:
N"RHz@0      IXPUB技术博客&N)j6I4|h~`B$_3i
主要目的彻底封锁QQ,MSN通信;字符过滤(支持中文),避免服务器上出现非法字眼.
J$jF#L.[o$u.F-O0 注意:如果apache开启了Gzip或mod_deflate,output策略的字符过滤将失效.
4s0B9R/}}!X0n0
6W C8u$t V5y5g(^0 流程:
@nG'v y%^p.w0 打上layer-7补丁 IXPUB技术博客/|d5q#n#j3S&b$O6JW
升级内核至2.6.19.7 IXPUB技术博客o:k g]/N@Y
升级iptables至1.3.7 IXPUB技术博客 \ Q1w"t2{*R Rug;] P
IXPUB技术博客 f,f(Ydfz+jQV+{`
适用环境:透过NAT共享上网的方式 IXPUB技术博客!]x:gx&~#k3DD:a

-b0t"s,h b)L:?(j,u0 IXPUB技术博客V gYF~F@M-D
步骤: IXPUB技术博客Q(]GJ\/{%|

0`Lm`7{0 一,下载所需要的软件包: IXPUB技术博客!H&xj+A0jA:qB
IXPUB技术博客 g.i ne8T
1,下载新内核linux-2.6.19.7
gG.Vw"p?"j0 wget http://www.kernel.org/pub/linux/ ... ux-2.6.19.7.tar.bz2 IXPUB技术博客,I0sK5v-p9ED fP
@@建议使用2.6.20以上的版本,当然之后一些编译的过程要改变下。IXPUB技术博客5M1b^4yyizK%H&K

OS*k;Sg K&IU0 2,下载iptables1.3.7
9k!p:ZcLG'y*p~0 wget http://www.netfilter.org/project ... ables-1.3.7.tar.bz2
bPAj3RF0
.l]D3f)I:C%Y3Gm0 3,下载Layer-7补丁,模块协议: IXPUB技术博客k5c!Aro(J-}@'j
http://sourceforge.net/project/showfiles.php?group_id=80085 IXPUB技术博客#cF)~@xlD7y
l7-protocols-2007-01-14.tar.gz IXPUB技术博客 lv P RM-MZ
@@l7-protocols-2007-11-22IXPUB技术博客&YSqS+Uk#\p
IXPUB技术博客KS,L\z,V:A-Nk
netfilter-layer7-v2.9.tar.gz IXPUB技术博客 A;PqmC'Gt2V6N5a
@@我采有的是netfilter-layer7-v2.17,因为手头上有,又懒不想去更新。
do-[rb9k^)l0
$n)FgpJ(Y1e y0 二,配置好内核选项:
VYYHe E|qT @0 IXPUB技术博客2ed}+BkQ
1.把源码都放在/usr/src下 IXPUB技术博客 g X3tpQ3Y[
tar -jvf linux-2.6.19.7.tar.bz2           #解压
V2? S.CZ3|9z#qz3m0 cd linux-2.6.19.7     
(R],y lf,}(V K0 @@mv linux-2.6.19.7 linux    改名为linux
C+F1j SQ0?0 IXPUB技术博客&i/P&tPs/Q\:~ q K&_
2.配置内核源码: IXPUB技术博客%D+HG8~'R:P
make menuconfig IXPUB技术博客:vax:T)sgM%[A ~
(内核配置参照2.6内核编译的说明文档,论坛很多的)
2c3p8A0a6a9?0 IXPUB技术博客'_InQb$NQ$_+s"C o
3.新内核加进了Proxy Server经常用到几个功能:
DP&p1~F`@F2K0 Core Netfilter configuration IXPUB技术博客t;Ze$VE
(2.6.19.7内核netfilter的string,comment,quota,iprange等模块已集成了) IXPUB技术博客y%S.IX Qn(d*y Y8J
IXPUB技术博客1LtZ)u1|5V
@@在我使用的CentOs 5.1上。iptables的版本是1.3.5,也有这些模块.IXPUB技术博客'ynq6aM#p"u
@@ /usr/src/linux/make menuconfig   Networking--Networking options--Network packet filtering (replaces ipchains)--Core Netfilter Configuration
IXPUB技术博客p g+~CZ*v1u

8ut2hQ:e9PR0
P.`\ZrG%M*H0 IXPUB技术博客|)R,D9VWF$[|
ppp (point-to-point protocol) support  IXPUB技术博客6CF QB*j v5B
PPP MPPE compression (encryption)     #微软加密协议支持,做pptp vpn用得着哦
9V/p'Z X Rs!U0 IXPUB技术博客4yBd8G1Z.ns-Is.\
三,L7补丁:
E3I+Zhf)p$k \0
;t0^3J.crPWv0 1,安装l7协议:
9XDu]cO9M0 tar -zxvf l7-protocols-2007-01-14.tar.gz IXPUB技术博客7v Xd"G/@(zG
cd l7-protocols-2007-01-14
F x.sW"xMR0 IXPUB技术博客nd YJ/|
@@ tar zxvf l7-protocols-2007-11-22.tar.gzIXPUB技术博客7GEE+UnZ"G
@@ cd l7-protocols-2007-11-22

nE,cD$o^8L0G0 IXPUB技术博客z+C&EW.E2KR&oT
make install IXPUB技术博客1UqP}.OK'`A
IXPUB技术博客\9r2L-x2LY'a
2.L7内核支持补丁:
YSS7j6`n$Mm0 cd /usr/src/linux-2.6.19.7
:_:r/qYe0 IXPUB技术博客3FaoM2d"l7s _9C
@@cd /usr/src/linux
'HT8g;yp%{A0
1j c,[&r3nM EX_u0 patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch
a&bF5zx/I;u0
+B Uglx f7F \0 @@patch -p1 </usr/src/netfilter-layer7-v2.17/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch 有所改变。呵呵我觉得楼主上写的路径有点问题。个人观点。
jV6Fi&e/t0 IXPUB技术博客6sG"g0S7}O~ H
3,make menuconfig进去
@*Trm&`:@$vt0 把Layer 7 match support选上
x V&Y'^6d#?$x)K0 IXPUB技术博客:N*qsb(r2oR
@@把L7加入到内核编译中,其它的,同志们看着做。
1qH1X;n|q;`;X!JX@0 @@/usr/src/linux/make menuconfig   Networking--Networking options--Network packet filtering (replaces ipchains)--Core Netfilter Configuration

;\#h y8Lx([P \0 IXPUB技术博客E#\?9f_ t
IXPUB技术博客2Y W G q"A"X r
IXPUB技术博客0l EY7t kJ$n/_m
四,编译内核: IXPUB技术博客n4_V@o:c'i$[%[1T4t

;zBqr Yn(EG+O$R0 make
Z!?)?/N3A8| d0 make modules_install IXPUB技术博客? G&m`s[d
make install
M8Q ]G$NhD0 reboot选2.6.19.7内核启动 IXPUB技术博客e)S0Y,Z-l S SY

,ov` CIa4z0 @@可以改变GRUB.CONF吧,偶懒。也没有改。IXPUB技术博客xp"A0a4e*U"B/r]
IXPUB技术博客a1O0c{ Su0\?N
五,升级iptables:
g9[ ]g8} {:Xa3ba0
^G_t%F0 cd /usr/src/iptables-1.3.7
x;G Vg5{,Kw^0 #打上iptables的Layer7补丁 IXPUB技术博客RdnIe+Aa6b4]'F)N:K
patch -p1 < ../netfilter-layer7-v2.9/iptables-layer7-2.9.patch
IZ%]vM,x+r0
_E/C(QU2v"[*P X0 @@patch -p1 <../netfilter-layer7-v2.17/iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch
+d)]1}X7sMbZ0 @@我没有找到iptables-layer7-2.9.patch,呵呵,后经证明,我做的也是对的。这个地方也是我建议各位使用2.6.20后内核的一个原因啦。呵呵。
IXPUB技术博客y\S,l3|-u

S/Vs'DB0 chmod +x extensions/.layer7-test
m \1SVq-{0 export KERNEL_DIR=/usr/src/linux-2.6.20
4YF4j"I)W]0
eIL)g%y0 @@这里为何是linux-2.6.20呢,按照上文应是linux-2.6.19IXPUB技术博客K;y|0yPa
@@export KERNEL_DIR=/usr/src/linux

L~ w{q[0n0
7va3w%A$D/F9u0 export IPTABLES_DIR=/usr/src/iptables-1.3.7
T)M)wOD.o-UW0
*d#^!F x6?6HX B.e0 make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
S4O!X'Q7hH[M B0
D&l-vpq7EW1b0 六,测试
DA7KY2cYp6Dx0 IXPUB技术博客%NU&OQA z1J(p{e
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
"Zp1SWtk"?0
B2N"ZXu f%\R%h!C0 1,用string模块封QQ的DNS: IXPUB技术博客WM)y$X1y`0x'L6x

~ jM[i0 #封tencent
yv!~*W+@@Z2d8_,e"k0 iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j Drop
"m1`N$|m6@0 IXPUB技术博客l#KFbY#t
@@这个在1.3.5版本上不能编译也能成功通过命令的。注意下图中的:
!nYnoOw^L0 @@-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH 这个是我用了fail2ban来限制那些SSH扫描登陆的。呵呵
o9a}SL}0 @@-A FORWARD -p tcp -m tcp --dport 80 -m string --string "tencent" --algo bm --to 65535 -j Drop  这个就是我运行了同样的命令后的结果。

gI9E1m2P2g(tM3A0
'fjb `m0 IXPUB技术博客7Q4g g Rb*r:b)StaE
IXPUB技术博客D4kv7[w'sm
#封.qq.com,717103636F6D这段数据包特征可用嗅探器获取,
8T0R3Kkp#a&R0 #如果直接用string封.qq.com,但是String模块不支持(估计是字符串匹配的问题)
.n&a ^D$ID0 #封qq的话很多wqq,qqxx这样的域名都不能用了所以封.qq.com是最佳做法 IXPUB技术博客9oVV1^a ? f
iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|717103636F6D|" --algo bm -j Drop IXPUB技术博客$i._4cNd6M ?#a9i
IXPUB技术博客 O+J7@0]7~%{(S5KIZk
此方法可以使用hosts文件和代理的方式绕过。 IXPUB技术博客CS,XO h*qR
IXPUB技术博客"SC2S$r[
2,彻底封杀QQ,分四步分别从udp,tcp,http代理,socks代理方式: IXPUB技术博客$ed8g3I3g*@E^
IXPUB技术博客_r7r MTt+[C
#用L7自带的QQ协议封杀通过TCP出去的QQ通信 IXPUB技术博客'}#f N"zk-d\{e~
iptables -I FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto qq -j Drop
@0?LEOH3mS0
v3a5x g@9\P0 #封QQ的UDP 8000端口的通信 IXPUB技术博客K0_6FV1Z9}a,o
iptables -I FORWARD -p udp --dport 8000 -j Drop
5P&SP!J Tw^:|0 IXPUB技术博客3HQPRQ6Dw`#{'D
#封Socks代理
D dwg2iv0lA/R){ L0 iptables -I FORWARD -p tcp -m layer7 --l7proto socks -j Drop
h DV\MGP0
hk&urlr0 #封QQ通过Http代理出去(网页代理功能正常): IXPUB技术博客.aU} ^L u2E#]2WJ
#新增一个过滤CONNECT模式的L7协议:
l!U%F t)f+L8n0
3\yj\T5QIq(|6f0 cd /etc/l7-protocols/protocols
F$|0WYbN/Zz0 #新建一文件httpagent.pat,内容如下:
KEy+mG jX0 # The HttpAgent Connect Action IXPUB技术博客N C'q-^fc;RTBT
httpagent
(V6Sx"q*Sz0 ^\x43\x4F\x4E\x4E.+\x0D\x0A$
S"eZ)ArIl0
P^-SV+Z(E9Ah3}0 iptables -I FORWARD -p tcp -m layer7 --l7proto httpagent -j Drop
N9[ w^ }0
;m p$[W4Y4\5}~J0
3jo;U,kRy0 3,用L7封Msn: IXPUB技术博客?5t7I'G,H:Lm`
#封MSN
(_E l8_:La0 iptables -I FORWARD -m layer7 --l7proto msnmessenger -j Drop IXPUB技术博客b h7Q9N4m#KAC?

vW {Fd7JRD0 七,最后: IXPUB技术博客&s%vY2Xg8HLl

W!y"M$v4R;qW"U"m0 感谢CU版主及众高人的精彩文章,让小菜我可以完成这篇文档,也期望有人能得到什么
_^8x\6m9G0 并希望有人继续完善提出更好更高效的方法。 IXPUB技术博客*x1}'P5gJ"C8S K*q

{Y7rUXM*w$[0
m$? q\*Y }0 参考文章:
(mdO?ME1T1{.f0 http://www.chinaunix.net/jh/4/853647.html IXPUB技术博客y B Z6h']YmK
http://bbs.chinaunix.net/viewthread.php?tid=505370 IXPUB技术博客a$~-|,l/}O
http://bbs.chinaunix.net/viewthread.php?tid=484867
Xg+g ? H0 http://linux.chinaunix.net/bbs/viewthread.php?tid=885123IXPUB技术博客F WE0r]&`L

d9E0LS#u,^0 IXPUB技术博客Z U/e'qK y r#V
@@最后注明,我根据我的实测更改了部分,但此文的整体思路的确不错。而且参考起来,只要会变通,也能顺利完成全文所说的项目。IXPUB技术博客8V5x8}H&WbU^P
@@为了证明也能测试成功,截图说明:

it(Akl uSm0
5z#X8{%l?0[:wR0

TAG:

yudingchu的博客 yudingchu 发布于2008-01-09 10:44:28
谢谢楼主分享
yudingchu的博客 yudingchu 发布于2008-01-09 10:47:12
谢谢楼主分享
我来说两句

(可选)

Open Toolbar