|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:" z; n2 ~5 p3 E7 A" C1 {" x% O. B6 ~
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。9 F1 D' U, }: A+ T* P* z3 P: x
1.系统要求
8 Q" B7 q3 V( p% Y
h. J$ P: ]9 ](1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。3 Z4 A% P8 s, h4 L4 o1 [
4 \% ?* A" s) H& B9 ~4 u/ x
(2)iptables版本:1.3.7
$ C% a+ E3 o9 F& \$ U
" Z& M: U; \% u) R5 T5 U# ?7 Q2. 安装
+ N' L9 _. V& j r
$ N! r" s( ?# v ^安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit3 J m( c6 ?- I1 h
( B1 d' D' s/ U' h2 K6 y+ i1 Y3. 配置相应的iptables规则
+ x! \' N0 h3 E( w; E3 o' F
8 R' i1 \: A* M2 ]8 z; z5 {2 [示例如下:
, P% c6 a" t6 {7 M9 n# q$ H
- Q- ?. ]- U' u7 m! r1 F(1)控制单个IP的最大并发连接数
3 c1 p- {! C( N+ I" y6 |4 C, V- W
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30" B( j6 H, }* u6 X
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数# P7 q; _9 o, b8 D' U% x
$ s+ }4 G7 v" ^6 z1 `iptables -A INPUT -p tcp --dport 80 -m recent \ --name BAD_HTTP_ACCESS --update --seconds 60 \ --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent \ --name BAD_HTTP_ACCESS --set -j ACCEPT #单个IP在60秒内只允许最多新建30个连接
& K9 L! B n4 V; X7 ^4. 验证( K, D2 B7 f& n+ d% I/ k9 S: e' N5 |, }
& ^8 E% U' h% p& q6 _# Z; S(1)工具:flood_connect.c(用来模拟攻击), v$ i- e, m" l# o- s9 u3 L1 t4 W, s
- H& l2 c( E0 g2 A& ]' s8 ]; X F
(2)查看效果:
4 {' s3 d0 ~9 ?* @( v' o+ O/ c$ M* @" I- C5 t6 e3 w
使用
" G1 g4 U4 Z7 P5 f4 B5 o
4 p" X% K9 y4 a! @% F3 wwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
$ O4 p" _8 M* L8 H/ f8 P) U实时查看模拟攻击客户机建立起来的连接数,
4 z) K4 w% a) U; D2 P4 h- l7 M
' q& J9 n/ c" i- ]: ]使用) P3 |5 T* I6 m$ k: r/ W9 E& j
0 n7 b% W) g4 Q
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
: b* {* K i1 J }查看模拟攻击客户机被 DROP 的数据包数。 |
|