|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:0 J R* [9 L$ @3 w9 b! y) l5 H9 M+ w
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
5 q9 W. m* o) N, T% s1.系统要求8 w. E7 J* I6 U/ ~- p) A& A
0 D. l: F0 C X* V# i- C) ?# d4 Q(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。2 v3 a4 c' u! h$ C5 q: w
* s3 T$ D+ w7 ^, Q8 T- h(2)iptables版本:1.3.7
i9 _4 j7 v* b8 G$ z8 W9 n& N Q
2. 安装. J- n: r( H3 F% j6 m
& r E2 n$ X! O0 `+ K$ [( ?
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit( {4 b1 u5 j3 Y4 _( ~
. z$ @. W+ W6 M* e' e4 a
3. 配置相应的iptables规则/ |9 [' T/ {, k" J! P1 B
5 e4 V/ J/ V! w
示例如下:
9 Q5 @( l% H( L5 h! t m7 t0 b; j* W
(1)控制单个IP的最大并发连接数; n1 Q! h& R8 u* @7 P5 m6 s$ C8 H% I
2 O: T9 K' F, r# x' ^9 g$ X& n8 D! Ziptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
7 e6 J1 b; H- w% Q, b! ^2 Q' Z0 q(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数' |& N: f. I9 P
7 Q. i; v9 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个连接7 S$ w- P( m; N
4. 验证
! C; U, g/ ? [9 Q( E' B* A' E( N* t T0 Y s
(1)工具:flood_connect.c(用来模拟攻击)4 _9 ~! H4 y) w: c& C
$ u6 T( t+ k; L* R
(2)查看效果:* b$ M# J& X# r2 g% @
' l4 O/ I; O/ S( R- Z! \* ]2 e+ X
使用
- N1 B" ]% c- g5 @& c3 H3 o. `. j5 k' e/ |) G
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
5 b$ V7 `' j" |5 |3 L' Y实时查看模拟攻击客户机建立起来的连接数,/ k8 d8 |) p/ K. u! \
4 R) s8 U3 Z/ ?" g' s使用
" W6 T5 | @, Y: [* u, u# Q+ e( {/ _0 K* h; l( O; x$ ^. }" _$ L
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'% A! `1 U0 G6 Z4 _
查看模拟攻击客户机被 DROP 的数据包数。 |
|