|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:4 K3 [- C( E: u
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。0 Y" B! R& X: l7 w7 W
1.系统要求
# t3 X+ V: s/ \, A5 Z; W/ D' X9 B$ O
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。! v5 e+ K6 p- J5 @# P- V9 g" a- C% O
" v, k8 T+ j+ w3 V(2)iptables版本:1.3.73 E# X8 ]$ Y# @. g) G* M# E( m7 H7 d
0 L& h& P2 o3 c8 W9 i2 }+ n d9 x
2. 安装1 D' p; g$ J1 w2 W2 P. u6 F" u
2 ?4 n7 s: ^3 j7 g安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit7 o- k4 Q) c) u$ @( [6 h# X$ v" x
0 w; z0 z0 y4 E' |2 D
3. 配置相应的iptables规则+ N9 E3 t% S3 B2 Q# m; W
4 w9 y% P5 K) G: o8 p
示例如下:! n. c8 s7 q4 x$ S3 x+ [3 [
; @, }1 ?7 c7 \- `6 e(1)控制单个IP的最大并发连接数
% q, ^) D5 H0 H* @( @0 Y1 C8 U& o0 ], W; R6 n
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30( P: G) k) D- g/ |, n* R p
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
^4 W, ]( W v) k$ k! b
/ Z* U6 i7 G& Qiptables -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个连接6 `0 P q7 @1 m. D4 z% S% a
4. 验证0 X& i; O' U, S0 y6 e8 z
& Y& d9 b" |- s(1)工具:flood_connect.c(用来模拟攻击)2 ]% Q+ _8 K# S& D: {4 s3 U x( u
3 d% F! U a, P" A1 X! N
(2)查看效果:: y$ r1 `0 P4 D& p
, H# e, n2 e- [2 i
使用" x( c t k+ P% ]
7 _8 s/ Z* M2 B( m
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'3 C. Q+ I$ r. S" I- z' U
实时查看模拟攻击客户机建立起来的连接数,
( |8 p x" U4 }' s: h1 M# b5 M, K" J. N; R2 z! j4 ~+ W3 b. d
使用
4 u2 o- n. \6 u1 N# R6 @5 }
# v9 A: w, O8 ~: t. lwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
+ g) h4 e, o0 b% `7 p查看模拟攻击客户机被 DROP 的数据包数。 |
|