|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
, Z2 ]: u' v1 ?: d 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
5 G5 y8 T6 V/ Y, F! S1.系统要求2 F4 O( d3 ^; Y7 F# U# n3 {
$ D1 w1 K7 N9 ^4 K# K0 U" E
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
3 g' a6 m6 U: S" e8 q8 ]$ K5 D! W: e8 X
(2)iptables版本:1.3.7
6 A1 I' |1 _' U0 X) t v- h9 a8 b, X: r
2. 安装
3 A* y3 d, k0 ?7 Q7 [ z$ O9 q2 E* g' A% P
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit# I& m: ]* y x5 q
9 J2 z9 w. i& J0 L5 }8 o% {3. 配置相应的iptables规则/ |: k3 n" g. O/ x
7 ~6 B9 `% ^. _$ v4 q
示例如下:# A( ^8 `& k* z; U0 O+ @, r* \6 }
# H" t) s# c( u) G" O(1)控制单个IP的最大并发连接数
! H9 O0 I$ `" c( p5 p! c5 h5 H) I1 W- @% A+ `& W0 s& c; h
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30- ?( S" c# Q6 P& E
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
" g! B3 S1 H1 S) d6 ?& w9 Z: k: i( U7 P0 ^) ?, n& w
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个连接* J, c, D% Y) w0 ~4 ?
4. 验证) w) t) U! @) z& s1 m4 W
8 R( p# @* y& N# X" C% p(1)工具:flood_connect.c(用来模拟攻击)
Z/ |0 T" v% G# A" s5 w0 z; r, i& U! X% z3 D
(2)查看效果:
. z: d6 V. W4 V( g4 c
. r; v$ v2 j, S1 M使用
: I: r$ }6 {. Q0 z) e* a6 s, [, f8 {
: P' C& p! _* U. d) k& x) }5 lwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'0 @' Q" j) u0 P$ x6 d4 E, }0 x% ?
实时查看模拟攻击客户机建立起来的连接数, p, \. ^- ~. V L) W( m
9 Q/ t: n* ]. U4 L1 z8 ]; a使用
8 z: [% m7 L8 {
+ B, w/ L) A( \2 v; Hwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'# c" I/ Z2 C) z r5 O8 I
查看模拟攻击客户机被 DROP 的数据包数。 |
|