|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
: f( v4 H- Y/ L1 K" n2 O2 T 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
' [- T( q% D+ S9 A( D2 @1.系统要求# H3 R7 \# Y. {9 Y6 U! o' R
1 x" }! i/ x' ?9 o) k- H4 Z$ k& \3 G(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
. x9 x1 X8 u6 C6 P/ L/ d9 J. f# y0 k- k6 L# m- F
(2)iptables版本:1.3.7
& T# r0 _" M D" ?+ T1 X: ]5 e0 u, [, _
2. 安装, e# V/ N4 G& f7 W: j) V' _' L6 n
: O" m# C. M7 n) ]. O1 z安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
5 P# e$ f# H2 M" O* c- k0 z' M$ m9 Y% I4 M' o& H
3. 配置相应的iptables规则
) x& D% v7 _7 i. d, }
0 o9 N) ?6 b# P2 a0 X, l示例如下:
: @4 j* P! |) F9 C2 r: U( }2 F0 I1 J8 @9 ]% H& }
(1)控制单个IP的最大并发连接数
! }/ R, C. [- F! G2 Z% l; G# d+ t% }( S+ I5 n
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
2 B& f- \8 q+ S: V(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数, X2 R( D: T* i8 W. M) k& Q1 X+ e( u; Q
0 w7 a! \3 s+ i4 ]
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个连接
& f5 L h k1 j* @" z4. 验证
) t# }4 J% J. ] @, g$ F" K- M$ p5 p; Y0 R
(1)工具:flood_connect.c(用来模拟攻击)2 \ u) a' k z* H+ ?$ y2 u
, v* `; M& h9 \+ K5 T1 T$ Y4 r(2)查看效果: `- g% v0 M- J& b
1 P v7 [6 A# c8 y! B; i. r, D- K0 V
使用
3 a0 R# Z& x& W! X
. o0 _( S; Q3 V; A8 Cwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
" J& M% R1 y8 C$ K# x: l6 \; }8 |实时查看模拟攻击客户机建立起来的连接数,
1 S; r% V, t+ I7 M% Z! Y$ b: l; R# @& P! V9 x8 h
使用
6 m u1 L8 c: H9 z; q2 \, G# @, H2 ~( z
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'% b3 F! W& Y% I. i6 F9 K
查看模拟攻击客户机被 DROP 的数据包数。 |
|