|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:1 o! X. \! w5 [1 d% {& V
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
: P6 _- Y5 N, @! T# w1.系统要求
; @* E$ K4 c6 N7 C+ j6 l- h. i! b7 f y( [8 V* s5 ^
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。8 a! C1 S* l: \+ v l+ s
1 a' T! V/ O) ]$ b3 U3 [' [$ Q5 K- Z
(2)iptables版本:1.3.74 H+ I5 W2 C& T9 q0 r
# @! I& F" i. d2 D- R, [# V2. 安装/ j' t4 F9 |2 d( `+ m/ L( ^. Q: [
( V& Y u& ?3 ^0 X4 e6 d: l% x安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
, w8 S4 ]& d3 H1 J* `2 g
$ _! a; Y; ?5 |7 @/ k6 k* G$ m3. 配置相应的iptables规则* U6 y& |9 X$ C Q
+ t& Q- e r/ M/ C
示例如下:
+ y; Z- F6 f2 s( u }) c& \
; O) h# g' u' f( Y, C5 i(1)控制单个IP的最大并发连接数
$ A" E. G2 d! \5 @' V# c6 ]
" H8 d+ w$ }9 u. Qiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
3 z9 M2 c3 G0 a7 D$ O5 T4 s(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数$ h0 g& {. O. H5 y; C' h
* b9 l/ d# [5 C# F) Q: U& diptables -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个连接
4 j* J' G0 h4 p! p5 X$ `4. 验证
! R, q0 `7 t, \+ p; r4 ?
, ?! a$ L" H X6 D, X(1)工具:flood_connect.c(用来模拟攻击): S' a( Q8 P6 m8 N) q* V
0 I; m- z# i% ]% U(2)查看效果:2 d# y! Q. ~6 Z& v" i; k
6 p; u. N6 A* @5 Z* _ q! u
使用
6 c3 z: e; |% A' s! t& ]0 N* X' F: I
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l': h9 K1 Z; w9 \- f5 `
实时查看模拟攻击客户机建立起来的连接数,
% L! Y: P& s2 y f0 ~
3 {+ ?/ g; F4 d3 P4 H使用2 C5 S; q, E$ ?0 B4 q |
; O; t9 |9 ^' G# Q) n. M% cwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
# \, G' K+ ` g- U" D. r* { g, U/ n查看模拟攻击客户机被 DROP 的数据包数。 |
|