|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:* r5 f8 }, E+ g) \- N; I
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
; F& g7 \! q$ `& C1.系统要求
! B+ r1 Y* ]) n2 j M# E( D; T6 c0 t5 b! B8 f4 H* J3 x, h
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。7 c; o, c( c3 `3 R
* r( {6 s T, \ E(2)iptables版本:1.3.7( o1 p* E w$ L; J3 B
8 p/ _# @7 S j. L8 R1 o
2. 安装; i) W0 t4 \0 T
4 b, I/ _: y# k: l
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
" u; W7 H2 a4 ^- m( o4 ~9 J! \
. ?& Q# h; n6 i; {3. 配置相应的iptables规则
: Z& u% i. [$ y# h! C7 y2 y6 ^) @* G Z, j- J
示例如下:! a2 U" h) W: P/ A0 R' c3 Y, a) V; d
5 g( n R) K' L9 ^& F(1)控制单个IP的最大并发连接数- S* g0 |$ o! b1 W1 `$ `
+ f0 M- a$ N- Wiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
% Q: l( |8 ?1 k3 Q: C! R2 T2 Y(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数: [/ Y" E8 O4 D
1 R! \. y. n- |7 l6 x4 n% V" r) _
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个连接
9 t3 A) b) ?. k% `+ E; @8 E% K! X: r4. 验证& A! h- p! s$ O8 \& X7 X' A& B3 [) @
4 L+ }/ p$ _7 B1 P7 q' J* p
(1)工具:flood_connect.c(用来模拟攻击)8 T- U6 f8 M' R& D$ ]
7 K- s- \2 s( e/ f- F
(2)查看效果:* a& ]0 Z! H; `/ V" e4 y! z
# Q8 A. G2 z. \- z# N
使用& ~5 }4 c5 X* P9 k0 E! N
' x3 Q2 n3 F) i' J& ?watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
: W+ f: {* m, Q& m6 R( V实时查看模拟攻击客户机建立起来的连接数,' z" {# [2 K3 g! Y$ T7 Q
- V) y3 N2 H/ {6 v& r8 d7 d* s( ~使用
8 T- Z7 l o: z4 q) V6 k: x' q+ y |& R/ \4 ]1 _+ C. C) E
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
6 O5 g) U4 q! q4 @9 b% W; m, H查看模拟攻击客户机被 DROP 的数据包数。 |
|