|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
8 P1 k1 G) Q1 H9 ]" j 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
4 O9 k' J7 a- b4 Z8 C1.系统要求; a" l% E+ O: Q \4 y0 z; c
" [: O4 T% d( N Y
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。( ?& W, G8 ^- g9 d( v2 T% q. r6 G8 u
R# I+ R) ~3 M6 G, \) b(2)iptables版本:1.3.7
# B4 x! l/ q. P1 a9 I- y- c
4 k+ E; s- l; l8 D& c- S0 G2. 安装
# l" A! w/ o) s6 n7 ~ e# e+ M- I
2 G9 S. _/ R: h$ O2 E安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
% N; G0 R5 ~- b7 y$ ~
Q" N$ ]' M3 ?4 g" U @$ ~3. 配置相应的iptables规则
, ?, ]4 v* q Z) s) j& C9 @8 N3 @- o1 \
示例如下:- P5 _* c! ]2 ?6 H2 g0 ]
) r" `4 _1 T4 E+ z4 M! q3 A1 r4 }4 T5 }(1)控制单个IP的最大并发连接数3 F5 V6 e) w; X; s0 a' j7 {) B& J/ E' r
- L" |( ?# d; ^& Giptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
! L4 n$ e* W; z1 J6 l0 d9 |(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
# B9 E) ?5 R- N) a& ?7 A' X) N& b" q1 d- ~! ~
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个连接: U: `' L/ P3 K0 X* e2 B8 D% p
4. 验证3 v+ D. H. T8 p. Z& c
# d) J* V" A* ^7 {/ I
(1)工具:flood_connect.c(用来模拟攻击); H; o) L# n6 J6 i7 i' e
' y; N* P- |+ x1 ?, k3 S(2)查看效果:' G- B7 W3 w4 K( w2 J j5 [7 b
; L o( U7 a" G: f8 t使用
9 m3 |! i7 ]( e# D9 d4 D$ w- J; g- z, g& d7 h
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
7 T: B. C. n' v5 _实时查看模拟攻击客户机建立起来的连接数,
7 g1 j# z2 j: u' m- `( q1 A* m
: V+ a; }# v6 J6 D: r使用7 S9 r" G; t; X4 w& r. X
; e3 j' L5 ^3 o; r8 ]$ awatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
2 r. P b g; S- i查看模拟攻击客户机被 DROP 的数据包数。 |
|