|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:4 l. g0 d. h" I! S5 l2 m$ d1 x% h
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
# T9 Z2 Q+ N( I" K6 k1.系统要求
: |# N5 t6 @# C1 M( h) m- ?" {9 M& [" U; g) x( i3 O1 } x0 s
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。2 g! }# k) [6 d% a+ y8 }
; F& y- ^6 X: A7 g B; W(2)iptables版本:1.3.7
% {3 s7 _1 W2 |* I: _& i ?( a1 s' \9 O0 v( e6 v! U4 n7 O
2. 安装3 A$ a6 |7 y% v* s
/ U1 r- g. _+ F* u& m0 R7 g6 b+ a安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
/ ]) M! M8 r R% q. E; M: [8 k' u4 q4 X! |; Z i
3. 配置相应的iptables规则
% f) G$ q0 @- E1 ^6 k
$ t" C, C2 S4 [0 b. A7 |1 H示例如下:( a: M, m" n. A9 G1 J
2 X* g; p9 C1 e3 q# k3 O3 Q
(1)控制单个IP的最大并发连接数
2 a% o4 ^" z8 u2 w3 ]
8 P( G4 E( u& v% n B5 |iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
. Q$ @5 N/ V8 b' S# P. E0 p( d- t(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
* J" C; u f8 e! c) E" P" m* _+ L2 p4 r3 A g: O- \
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个连接% |! T5 d, v* y( A6 D+ P
4. 验证% C# u }$ F5 K: I* [& w7 K5 d! `
; J) Y. H, @9 Q# o/ b(1)工具:flood_connect.c(用来模拟攻击)* M6 T7 [; ^; m9 v
/ ~- [8 q# K- Q; K' s2 M# c
(2)查看效果:& [4 E" L9 _6 t8 [
$ w/ [! I, s* u1 z( e& k使用
7 W, V* R) x$ y! H- N
% _( @4 A/ H. U0 q' i% |. Lwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
, E# b4 R) t3 O实时查看模拟攻击客户机建立起来的连接数,4 {6 W5 u2 T4 F* I2 J
' Z, q% X* Q" ~$ ?! J3 s. u l8 `# v7 }# q0 B
使用
$ c( w2 f% l; O e
4 Z2 s1 b7 Y: D9 R+ v' P8 a' ~$ E: Hwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
8 F. U6 T0 x A! z" e查看模拟攻击客户机被 DROP 的数据包数。 |
|