|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:& N# P7 W5 ^) J; F9 Y
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。% l" Q: L5 c7 `* n4 q% |+ s
1.系统要求5 p* r( }0 o3 N# Z
# I; d- @! V2 k8 z m
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。) K8 I: U8 r' ?- T! @
; m3 D! ~ y3 |3 i
(2)iptables版本:1.3.7 g: o! D) K( Z, j! f
4 c8 U+ O* v8 a: k
2. 安装* |5 ^8 Q4 u/ u
! x3 B3 ~0 h& o. } Z) s/ y
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
* C1 ]- ^, Q. r( M+ U- T3 _9 x( H. d3 H+ r+ B
3. 配置相应的iptables规则) m; f8 H5 L7 r9 o3 }. o& L- G
# r4 }; ]; W/ ?( w3 w" z示例如下:
% q( e9 A: d( O6 e" y, k# C5 B% e5 M& Y
(1)控制单个IP的最大并发连接数# A) q& F7 L0 H( ~1 U! i
5 k# W5 h' x1 g5 u) `5 wiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30 D$ a7 {9 s* z; q4 j9 i
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数# ~' @# a. X) c- I4 v6 F2 E$ s6 o
/ |3 ~ @3 S* R6 h
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, i# w, O8 w$ U) e
4. 验证
" X0 g+ e$ j- U; R* K. Q y% j: E+ j1 O, W
(1)工具:flood_connect.c(用来模拟攻击)! U( z: P" Z3 B
# l# g3 }7 ^& j
(2)查看效果:
# y m: E P7 n, j0 g' ^5 m) p
: v! r* m( M/ a4 }6 f使用
: F" f* B2 m, F1 j1 D- v, \- m
. m c- n. \9 G* }/ F3 _watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'2 X- a( d* |2 H0 h x
实时查看模拟攻击客户机建立起来的连接数,+ E% z+ B; d1 N' f8 ]
+ L/ k. j) X* m
使用0 i3 C8 X7 x$ B+ U
1 [" i) v7 B2 M
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
g6 t- P. g9 p9 ]. H. N查看模拟攻击客户机被 DROP 的数据包数。 |
|