|
|
楼主 |
发表于 2013-3-25 19:09:04
|
显示全部楼层
上面的脚本貌似有问题:看这里解决:. r, D# R9 P6 ~
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。! t# O( s% W) C5 X8 p& e
1.系统要求" l3 \# z7 I' C: P# n
/ b8 p( g' ]1 [1 o7 i& {( V( c(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
4 m& U( w5 p* _5 e% `5 S0 N& b- E v3 g" I1 W& H8 K0 M
(2)iptables版本:1.3.74 E$ c' Q8 L( u8 i) P) v$ R2 L# k
# |+ O( s& s% ]2. 安装/ q1 N$ h9 O) `
- s* T4 H9 a6 V' T- |+ `/ w
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
1 I1 P* P' d C4 ` @, i( U" {- {$ U" @$ z; o
3. 配置相应的iptables规则3 I! L) a/ j8 V! H
% @' |7 k8 u% d T0 h2 {: H
示例如下:
9 H2 N2 k6 j! _5 Z5 H3 t
5 h3 P* Y6 X* n( b) y! j0 z(1)控制单个IP的最大并发连接数: x* d. @3 J" i4 Q# b8 s6 y' _6 c$ D
* I: K6 @9 e% k! \* E
iptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30) ?% j$ `$ h8 w2 x1 M4 C
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
8 O/ c) ^$ m* ^
6 x5 H: E! b1 b3 piptables -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 W* D8 O* N: `3 e4 p1 v1 E4. 验证# O' F; {. q7 D8 h
1 |3 P5 v0 p C$ G% s) T5 h I- i(1)工具:flood_connect.c(用来模拟攻击)% ` a- [& |2 ~4 y" [8 J2 O
! ~" ^% Y z2 i; y4 X/ f% {, B- h4 O(2)查看效果:
7 ]3 H% n# D' f9 a
7 k; \2 O: Q; y {. m6 N. o使用
$ ~2 D' K7 e7 `
. {5 R2 D: U# \6 S' U8 pwatch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'
! h# ^! ]2 {8 ^$ A4 S: k实时查看模拟攻击客户机建立起来的连接数,/ L8 W1 W9 z8 g3 {
" M8 o- s4 H1 L' Q/ `使用7 b) s" E) N0 I9 t, V# g
( ^- u ^: r( L! p( ^watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'7 k* n+ [3 C, Z
查看模拟攻击客户机被 DROP 的数据包数。 |
|