|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
/ Y! b6 q# h7 a) I" R0 j 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。9 G' y) K) q; b5 W
1.系统要求" K r# n, U+ r9 l- A9 b
4 G5 ?/ U3 q5 s/ G% q. d4 i# R- T( a(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。9 c" E9 {1 ] G+ M* O9 e7 U7 S
- o' F, r% u0 |0 m# L* n0 y h1 I
(2)iptables版本:1.3.7
( C9 N% O6 l* l% Y/ y7 b( R c) E4 K% Q9 U2 z. c) J" P' O/ U
2. 安装
; c7 q+ `& K9 w5 g5 w; w, {% W) E; i# H6 @# a( n( M0 G( j8 I
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
, W; T2 X2 }6 ^/ S. ]0 f9 k$ g8 q, ?, q; `; p( T
3. 配置相应的iptables规则) _6 v2 v7 g# ~ ^! H4 r
s- `( Q5 ?" l" W2 z示例如下:% k+ B* ]" Z" C8 [: [7 T9 n& t
4 q. `( B' I; i/ u7 Y( X3 m4 l
(1)控制单个IP的最大并发连接数
1 n2 I3 S( @: J/ |& g4 Y/ \& }/ l2 G0 L2 G/ ?+ L! d' `" _0 x
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30# ^0 J: b* H% Q8 j" j9 i; p
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数: J. T: \! h' J& R1 _
, k/ C) F; m' z; W. N
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个连接8 w& [- w$ ]! [) I) w$ k: F
4. 验证. v) G8 a* C' j, f7 x/ s
( [$ s7 e* m$ D7 }6 A
(1)工具:flood_connect.c(用来模拟攻击)
K2 W" W }+ v: r0 c( t2 c( o; E7 ]
(2)查看效果:
* M1 d- Y( y2 y: t0 K) e e1 i, w2 p1 A5 @( ?0 S6 m6 d5 g
使用6 T3 y' X. r. L. M& ?
- s4 h h1 ^ p; ?# i
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
: T, `4 W; [: _* @实时查看模拟攻击客户机建立起来的连接数,& p3 @: g$ x- |# x+ U) s
8 U: L: h% l: r9 D1 l使用7 \$ a3 Y/ F, t) K" ]5 H/ V! q
7 ?! x6 A) l2 Q2 N0 l0 Hwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
$ @ z0 X" q5 ~! H! p* b查看模拟攻击客户机被 DROP 的数据包数。 |
|