|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:- R6 T \+ B: Y. U
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。. U2 X7 [! ^8 \. f
1.系统要求 ^# C9 n a, ?+ }5 k
7 q# c4 U5 ^+ n4 V6 D(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。7 w3 w0 F( Z1 p
+ J8 ^2 T8 B* L) m(2)iptables版本:1.3.7
+ }- A/ h: {1 ^1 P6 k
) F2 d0 y7 a1 p& d, x4 C8 G7 P2. 安装$ i3 m2 Q# L2 I" b8 }
0 B' }) \+ @! T' [5 N. o& T, n安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
4 o: V* z- z* M5 h; z* P
; ?3 j+ W5 {7 |) t" ~! ?- x3. 配置相应的iptables规则
7 X) @, \5 K1 m) P
* q+ _7 e7 G3 g3 S) ^! F( m" c# Y示例如下:
5 I: W) b5 p& e+ o8 |+ e4 z2 d' T2 a, Q3 O) n4 ?
(1)控制单个IP的最大并发连接数; F5 L/ h$ F9 ^5 j
& u1 n+ j5 z J# b7 Hiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
; e- L. t: g4 o2 T, z, y& {+ I(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
( w* d6 S! B& A3 M! y6 u* z! [% p/ J% }5 k" V& l+ P
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个连接
* t/ ~0 s( {( s/ h4. 验证0 @8 D$ O. p1 t. O# R. P7 E
+ ]. ]* [5 ^% s4 J ? Y(1)工具:flood_connect.c(用来模拟攻击)9 E; L0 G |% U+ `+ f
3 ]7 @+ L$ ^: ^9 {- @4 _5 M* A g! o
(2)查看效果:$ c( q8 [, L0 `3 z) R* V1 Q# Z
. G4 Y- R# T- b0 o c
使用* x: x! [, k( c, q
! |7 D# w* _9 r- A+ W1 W, dwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
$ c# r+ H p. e' O0 t$ l" C实时查看模拟攻击客户机建立起来的连接数,
% S L+ c/ [( O1 H' w( c4 r5 A! v( b' J/ X X) }6 a Z# A
使用% @ V$ a; _% Y" s# B
* w6 x9 w7 m- ?( P* x- M
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'9 g% S; `+ R2 A0 r! c4 C
查看模拟攻击客户机被 DROP 的数据包数。 |
|