西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页 → 安全中心 → 网络安全 → 10字节查询换来50KB回包:DNS反射放大攻击原理

10字节查询换来50KB回包:DNS反射放大攻击原理

相关软件相关文章发表评论 来源:本站整理时间:2026/11/11 8:33:04字体大小:A-A+

DNS故障诊断工具dig工具v9.14 2026官方中文版
  • 类型:IP 工具大小:32.7M语言:中文 评分:0.0
  • 标签:
立即下载

凌晨两点多,一个做外贸站的朋友给我发消息,说网站打不开了,手机流量访问反而正常,服务器控制台一登录,网卡流量直接顶到端口上限。他一开始怀疑自己被 DDoS 了,让我帮忙看。我登上机器,第一件事是看入向流量入向其实很小,几十 KB/s;但出向流量是入向的三十多倍,全是 UDP,目的地集中在几十个完全不相干的 IP 上。再一翻系统日志,`named` 里密密麻麻全是 `query: ANY` 的记录,来源是世界各地的地址。

那一刻基本可以确定了:他这台跑着递归 DNS 的机器,不是被打的那一方,而是被当成了放大器。攻击者伪造受害者的 IP 地址向他开放递归的解析器发请求,几十字节的查询进去,几万字节的回包从他机器上发出去,全部砸向那个真正想被打倒的网站。这就是 DNS 反射放大攻击,也是我今天要拆开讲的东西它不是玄学,是一条很朴素的带宽账。

如果你自己也在做递归解析、域名解析服务,或者正打算换一台带宽和防护更靠谱的机器把 DNS 搬过去,可以先看看 md5host(VPS 与域名注册一站式) 这类把解析和主机放在一起做的方案;如果你的站点正被大流量顶着打、需要一台带防护和大带宽的机器扛住,等会儿文中也会提到可以关注 linkcli(海外高防服务器与抗 DDoS 云主机) 这类在防护和带宽上做过投入的厂商。

DNS反射放大攻击原理:机房机柜与数据流量

一、反射放大的完整链路,只有三步

很多人第一次听到这个攻击会有点懵:DNS 解析不是查个 IP 吗,怎么就变成攻击武器了?其实拆开看只有三步。

第一步,攻击者往一台开放递归的 DNS 服务器发一个查询,源地址直接填成受害者的公网 IP。这个查询本身很小,构造 ANY 记录(一次要 A、AAAA、MX、TXT 等全部记录)或者某些返回大段 TXT 的域名,几十字节足够。

第二步,这台 DNS 服务器毫不知情,它老老实实去权威服务器查询,然后按递归规则把完整答案组装好发回去发回那个被伪造的源地址,也就是受害者。

第三步,DNS 服务器是拿着自己的带宽去发这份回包,而攻击者只付出了一点点查询成本。带宽的不对称性就这么被利用起来了:查询 60 字节,回应 3KB,放大 50 倍左右;碰上 ANY 查询碰上带 DNSSEC 记录的域名,历史上实测过 54 倍甚至更高的放大比。

关键的点在于:攻击者从来不碰你的服务器,他只是在你的 DNS 服务器上"借用"了出向带宽。所以你的机器负载可能看起来还很轻松,监控上 CPU 才 20%,内存也富余,但网卡出向已经跑满。

DNS反射放大攻击:流量被异常放大冲击服务器

二、为什么受害者连日志里都看不到攻击者

我那位朋友后来问我:既然是攻击我的网站,为什么我防火墙日志里一条记录都没有?

因为攻击包根本不是发给他的。DNS 服务器把回包发给伪造地址,走的是 IP 层直接路由,源 IP 就是他自己。结果就是:受害者的服务器上只能看到一堆源地址五花八门、目标地址是自己、且长度都超过 MTU 的 UDP 包因为响应大到发生了 IP 分片。经典的 DDoS 防护规则里有一句"UDP 大包直接丢弃",很多机房默认就开着这条规则,算是被动躲过了一部分。

而真正的攻击者,藏在他从没用过、也永远不会去连的那些 DNS 服务器背后。你去查攻击源 IP,查到的只会是一堆被架在公网上的"开放递归解析器",它们同样是受害者,只不过丢人的是它们。

运维人员查看服务器流量监控排查DNS反射攻击

三、怎么判断自己的 DNS 是不是在给人当枪使

如果你手上有跑着 BIND、PowerDNS、Unbound 之类的机器,这几条一定要做。我朋友那次就是漏了递归访问控制。

第一查日志。BIND 默认写 `query: domain IN ANY + (N)` 这种格式,用关键词筛一下:grep 'ANY' /var/log/named.query.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20。如果某个来源 IP 一分钟问几千条 ANY 查询,八成就是被拿去放大用了。正常业务方极少会这么问。

第二查递归是不是对全世界开着。在自己机器上执行:dig @127.0.0.1 whoami.cloudflare TXT +norecurse,再换成随机不存在的子域名去问带随机前缀的域名,如果服务器给出了递归应答的痕迹(比如对不存在的域名也返回了权威服务器地址),说明递归开放过宽。

第三查响应量占比。看 dnsmasq/BIND 的统计或者直接看网卡,如果出向 UDP 流量长期是入向的十倍以上,而业务上你根本没有对外提供权威解析,那基本不用怀疑了。

开放递归DNS解析器工作原理示意图

四、关闭开放递归:几行配置的事

BIND 的 `named.conf` 里加一段访问控制,这是最直接的一刀:

acl "trusted" { 10.0.0.0/8; 192.168.0.0/16; 你的服务器IP; };
options { recursion yes; allow-recursion { trusted; }; allow-query-cache { trusted; }; };

关键就是把 allow-recursion 限定死,只允许你自己的网段和 IP 来递归查询,其余一律拒绝。改完 rndc reconfig 或者 reload 一下,别忘了用 dig 从外部机器验证递归确实被挡住了。

顺手可以再关掉 ANY 查询用 dnsmasq 的话加 --no-resolv 配合自己的上游,PowerDNS 里禁用 ANY 类型的响应;如果你的业务根本不需要对外解析,只是内部把域名转给上游,那更干脆,只做转发不做递归,把递归服务整个关掉,攻击面直接归零。

另外两点很实用:一是给 53 端口加请求频率限制,超过阈值的源直接限速或丢弃;二是把权威解析和递归解析拆到两台机器上,权威那台只应答固定域名的查询、不接受递归,这样即便递归那台被滥用,也打不出大流量。

大带宽防护服务器机柜:应对反射放大流量

五、真被打上了怎么办:先止血,再谈溯源

顺序别搞反,我见过不少人第一反应是去追查攻击源IP,结果带宽被打满,什么也查不到。正确做法是先让流量停下来。

第一步,联系你的机房或服务商,问清楚三个问题:这台机器的出向带宽是多少、有没有 DDoS 清洗或黑洞策略、能不能临时升带宽或者换 IP。DNS 场景下,很多机房对单台机器的 UDP 出向有硬上限,超了要么丢包要么直接断,这个上限往往比产品页上写的端口带宽小得多,一定要问实际值。

第二步,如果你的服务器只是被动提供递归,业务上可以临时关掉递归,用应急的本地 hosts 或静态解析顶住核心域名,等流量过去了再慢慢恢复。

第三步,换机器或换 IP 的时候记住:先把新机器的递归访问控制配好再上线,别把刚买回来的高防机器又变成下一个放大器。我朋友第二次迁移时,就是先在防火墙上只放行了自己办公网段的 53 端口,确认无误才把解析切过去。

六、选服务器时该看哪些指标

做 DNS 或者任何可能被反射利用的服务,选机器时我一般看这几点:大带宽是硬需求,出向端口至少要留出几十上百 Mbps 的余量,因为放大攻击一旦成型,几十兆出向就能制造几个 G 的入向压力;流量计费方式要看清楚是按端口带宽计费还是按月流量计费,前者抗突发强,后者抗持续压测强,最好是端口带宽够大同时流量包够用;有没有 DDoS 清洗能力,DNS 这种 UDP 流量恰恰是最难靠普通清洗识别的类型,真要有防护,最好是厂商在链路层就直接做异常流量识别;最后是网络线路,解析服务的用户分布在哪,你的上游和权威服务器在哪,这个得自己权衡。

说到底,DNS 反射放大攻击的核心不是技术有多玄,而是配置上的一个疏漏。你以为你开的是一个正常服务,别人拿来的是一个放大器。所以开递归这件事,永远只给该给的人开。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶顶
    • 1 难过难过
    • 5 囧囧
    • 3 围观围观
    • 2 无聊无聊

    发表评论

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲