|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:
" s+ A$ e7 o2 ? 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
4 W8 }" x& y. L$ Y, z3 s1.系统要求! {' d, Q' C9 T+ w8 H/ p
2 h- p6 s; t, b5 _" Y( j2 N
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
/ ]0 R1 q+ l* N/ \4 B
7 J2 \8 T# u) A; h1 B6 R/ }$ N8 ^/ x(2)iptables版本:1.3.7; H# \" h5 w: P( o/ c
( p( Q, @2 w( w3 J* {: }2. 安装. D, Z3 |: ?* K* `9 X3 m, p! q
& U- R3 U8 p3 k- P安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit7 M- W% M8 e4 V% K
. Q2 T( R- G8 r2 s' j! f
3. 配置相应的iptables规则" z- [# x& j0 P+ A, n! s
6 Y+ R. F; g, N) \+ u( w6 z! g
示例如下:# E& A' N: s& ^$ v4 V
. Y4 G9 Z: g, _$ c# s; M(1)控制单个IP的最大并发连接数1 i( O5 D7 a$ \8 m0 n# m( U
( F9 i" k/ W6 f Kiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
8 ^9 a+ I- i8 {% p4 f& R(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数: k" l6 P- k# ^( \6 k
5 m! e. h8 T9 n3 w6 Y
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个连接- B0 F: ]1 Y& {" N& H8 \
4. 验证5 N( J: r# x5 j4 ]" e
- g" }: S& v! s1 W9 t9 a9 p(1)工具:flood_connect.c(用来模拟攻击)
3 F# e) [* o5 U( m4 E
+ y& q* e" n; N1 g5 ]. ~(2)查看效果:: V- c8 y3 B# E& U6 P8 {& _
! ^: z G9 P0 x8 b
使用
2 a- ?2 O# \3 W7 V* t- l1 \5 R. j- ~- v* `2 t+ b8 q
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
/ L! |: i6 t# G6 |& ~3 j7 R. ~实时查看模拟攻击客户机建立起来的连接数,
* R+ A8 H5 p" n2 D% \% B5 Y
5 w$ ?# ~( q" _8 h9 ^( F* J1 h使用
* J0 t: }$ I# _
+ u1 L" |6 W0 p' h8 jwatch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'% m9 Y \" h# x# y% F8 k" W
查看模拟攻击客户机被 DROP 的数据包数。 |
|