|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
; P0 r: z! Z/ `0 y) b% X2 @1 ] 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。7 R; M4 z V2 r- V( g" @
1.系统要求; d: _+ t2 W* }: P& |# ?
4 H- d" G, H, |3 w1 Z1 \) F
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
) R; F: _5 L2 E7 n0 p; s& F5 R! t; `/ G" m* b
(2)iptables版本:1.3.7
4 y- c$ G, {; ^% W* t/ R# T
4 Z1 y% z3 \& h1 J+ w2. 安装6 G7 x1 N, ]; F0 [* u
+ e) [+ i* T7 Q1 u# N" u
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
8 m& J+ [1 Q ^2 f1 s7 A8 r5 [3 Z, a
, k8 G* x* e5 H/ Z! D& B3. 配置相应的iptables规则
- ^! Y1 W j% p8 b
* n* S, F ~# q% s& l& v; p示例如下:' B! r* N- l* K( q
v/ x, Q, ~& k2 a, y; n
(1)控制单个IP的最大并发连接数: o) d- x! v! P' u) ]
+ q1 M# C+ X" J/ L% z# @iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
U B/ S( g3 ~* O! ?(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
* X- |& Y2 ^) h; G" s1 ~# Y6 k3 y: s
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个连接+ f; `3 P/ z9 N5 g
4. 验证
+ R" Q6 D' j/ j s
1 N* c; w+ {+ @' R5 b) A) D(1)工具:flood_connect.c(用来模拟攻击)
# k9 }, N+ T/ z( X$ Q
' _: c7 @/ x1 A) a6 Q' y(2)查看效果:9 _( N- N. _5 e0 f$ ^
% S" ?& s' r8 E/ z/ j" X/ Q* [; m使用1 F' T6 s: Y$ i9 F) e4 @
$ U2 J$ w; _( j1 Xwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'# V' j$ n( J+ }6 V4 {) J
实时查看模拟攻击客户机建立起来的连接数,$ K: v% o: G4 m+ W: Z1 T7 [& Y
. S6 l9 N( t2 c$ @
使用
) C o) k9 d( ]3 v4 t# ]6 u7 {4 _% X; U9 e( Y8 ^
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
* u2 W# G) {( V1 O查看模拟攻击客户机被 DROP 的数据包数。 |
|