|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
7 B- T2 @; \, K( u x+ ~* ] 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。$ }' C+ P4 d& E2 k+ Z1 r! D
1.系统要求4 x7 V& n' T) [, k0 T5 b
8 v- _( x2 I) Z) Q- s, m% `& a(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
K. S4 P/ p/ c6 O3 b6 y0 T9 \& U
; z v+ g5 t, l1 B. b, i(2)iptables版本:1.3.7/ y4 B3 T, Y& _6 v( L1 ~0 p
- W# U" T2 D u9 m, Z: }. o6 Q. Y# }2. 安装) }7 I! U: q. W% C2 Q1 A3 a
) j; b, A$ R- c' @
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
# }$ [& ]$ w1 d* o b6 m
. {- V/ w/ S' ], A" l, F3. 配置相应的iptables规则
: Q# p3 h0 k! [6 ]9 j, G1 |4 {& O( o0 ?
示例如下:9 }& Q$ f( ~& g4 b
$ p; D/ L8 n5 q
(1)控制单个IP的最大并发连接数% _- x# m Q3 h6 X4 ~ w' a7 W
9 h$ M8 r2 K6 D$ J8 i4 ziptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
a4 L" n7 l( Y+ e1 t( t1 k(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数7 y( x5 p* A+ Q! N9 S9 C
3 B( g% e' v: X% w3 x1 T! J: ]5 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个连接
) \# Q9 {) W# X: x4 N' f% Z8 x$ {4. 验证9 F0 a1 L' `- E$ Z* `! a5 r
- ^ c7 M& Y# O0 ]+ y
(1)工具:flood_connect.c(用来模拟攻击)
/ p. u- D% V5 K1 g8 P% l1 Q$ x
# W1 Z; Y* q6 }8 K: Q(2)查看效果:
5 Y3 O* {6 M' f4 l8 t8 ~1 u& _! b8 h8 E
使用5 e2 _. M5 k" w! K' A$ h+ R
0 Q3 S6 W" H+ A$ `7 R
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
5 F# C& O" w+ F$ d- r' H4 z实时查看模拟攻击客户机建立起来的连接数,
4 W: x. o9 \# O: m! n5 n$ C' k% T3 X2 _
使用
% ~: ~6 E2 k- O7 Y9 ~- Z; e) q! k7 o) m4 P6 g
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>' x% f( _$ R6 g* V/ P6 }4 l
查看模拟攻击客户机被 DROP 的数据包数。 |
|