找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18196|回复: 1

利用iptables防攻击的简单例子!dns如何被利用的?

[复制链接]
发表于 2013-3-25 18:14:52 | 显示全部楼层 |阅读模式
目前对DNS服务器的攻击基本都是假冒IP的潮水攻击。普通情况下,DNS查询是UDP协议,无需像TCP那样的三次握手过程,因此DNS服务器无法识别请求包里的源IP是否真实有效。如果大量的假冒IP进行攻击,就造成名字服务器要么计算资源耗尽,要么带宽耗尽,从而拒绝服务。; U! k7 G9 s: Q* h# D/ B: J
由于客户端是假冒IP,因此DNS服务器端的安全策略,例如DNS RRL、或者iptables,都作用不大。唯一有效的方式是从源头制止这种攻击,即各ISP、IDC都要严格执行BCP 38,拒绝非本网络的源IP对外发起请求。
% X! s( T, W7 z" }  r
/ C/ h4 ?5 }! H$ d6 h- R除了直接攻击DNS服务器外,还有一种情况是DNS服务器被利用来攻击别人。如果攻击者想攻击某个站点,他假冒这个站点的IP,对互联网上开放的DNS服务器发起查询,DNS服务器会将查询应答包返回给站点IP。由于开放的DNS服务器数量众多(比如运营商的递归服务器、各个公司自己的权威服务器),假如攻击者同时往1000台DNS服务器发起查询,那么1000个服务器的返回包到达后,巨大的流量直接把目标站点干掉。示意图请见:
' }& Q7 s) G, d4 F; W  m8 W! W7 c% d! w) @4 n
这种情况下,可以利用RRL、iptables来保护自己的名字服务器免被攻击者利用来攻击别人。
0 B! A6 |& e: `5 i7 S1 }一个简单的iptables规则可以如下:
" p6 }& i; Y; O% f$ Uiptables -I INPUT -p udp –dport 53 -m state –state NEW  -m recent –set5 W8 q7 B( o# |5 S) v, N0 \( ]
iptables -I INPUT -p udp –dport 53 -m state –state NEW  -m recent –update –seconds 60 –hitcount 1000 -j DROP# `7 U) k$ G2 [! g
上述规则的作用是,如果在1分钟内对DNS的查询频率超过1000次,就拦截掉该源IP。
3 t5 ~4 U1 s3 q
* M" l% k8 ^- E$ q6 P% z原文:http://www.nsbeta.info/archives/389

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2013-3-25 19:09:04 | 显示全部楼层
上面的脚本貌似有问题:看这里解决:& N# P7 W5 ^) J; F9 Y
    当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。% l" Q: L5 c7 `* n4 q% |+ s
1.系统要求5 p* r( }0 o3 N# Z
# I; d- @! V2 k8 z  m
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。) K8 I: U8 r' ?- T! @
; m3 D! ~  y3 |3 i
(2)iptables版本:1.3.7  g: o! D) K( Z, j! f
4 c8 U+ O* v8 a: k
2. 安装* |5 ^8 Q4 u/ u
! x3 B3 ~0 h& o. }  Z) s/ y
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
* C1 ]- ^, Q. r( M+ U- T3 _9 x( H. d3 H+ r+ B
3. 配置相应的iptables规则) m; f8 H5 L7 r9 o3 }. o& L- G

# r4 }; ]; W/ ?( w3 w" z示例如下:
% q( e9 A: d( O6 e" y, k# C5 B% e5 M& Y
(1)控制单个IP的最大并发连接数# A) q& F7 L0 H( ~1 U! i

5 k# W5 h' x1 g5 u) `5 wiptables -I INPUT -p tcp --dport 80 -m connlimit \ --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30  D$ a7 {9 s* z; q4 j9 i
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数# ~' @# a. X) c- I4 v6 F2 E$ s6 o
/ |3 ~  @3 S* R6 h
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个连接! F, i# w, O8 w$ U) e
4. 验证
" X0 g+ e$ j- U; R* K. Q  y% j: E+ j1 O, W
(1)工具:flood_connect.c(用来模拟攻击)! U( z: P" Z3 B
# l# g3 }7 ^& j
(2)查看效果:
# y  m: E  P7 n, j0 g' ^5 m) p
: v! r* m( M/ a4 }6 f使用
: F" f* B2 m, F1 j1 D- v, \- m
. m  c- n. \9 G* }/ F3 _watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'2 X- a( d* |2 H0 h  x
实时查看模拟攻击客户机建立起来的连接数,+ E% z+ B; d1 N' f8 ]
+ L/ k. j) X* m
使用0 i3 C8 X7 x$ B+ U
1 [" i) v7 B2 M
watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'
  g6 t- P. g9 p9 ]. H. N查看模拟攻击客户机被 DROP 的数据包数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2026-3-8 15:25 , Processed in 0.065500 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表