域名服务器BIND的安全配置与DDoS防护
摘要:# 你的域名服务器,可能正在“裸奔” 前两天帮朋友看一个站,流量不大,但隔三差五就出问题,一查,好家伙,DNS服务器用的是默认配置的BIND,外面连个像样的防护都没有。问他为啥不配,他说:“不就解析个域名吗,能有啥风险?” 我当场就给他看了几个真实数据…
你的域名服务器,可能正在“裸奔”
前两天帮朋友看一个站,流量不大,但隔三差五就出问题,一查,好家伙,DNS服务器用的是默认配置的BIND,外面连个像样的防护都没有。问他为啥不配,他说:“不就解析个域名吗,能有啥风险?”
我当场就给他看了几个真实数据:去年某云服务商统计过,针对DNS服务器的DDoS攻击,平均峰值已经干到了每秒数百Gbps。这还只是平均数,真碰上“狠活儿”,你那台小服务器跟裸奔没啥区别。
说白了,很多人觉得BIND装好、能解析就完事了。其实吧,这玩意儿要是没配置好,它不光是你业务的“指路牌”,更可能成为别人搞垮你整个服务的“突破口”。
BIND的软肋,比你想象的多
BIND(Berkeley Internet Name Daemon)确实是行业老大哥,稳定、强大。但老大哥也有老毛病——默认配置太“友好”了,友好到几乎不设防。
我见过不少案例,问题根源就出在这几个地方:
- 递归查询大开方便之门:默认情况下,BIND允许任何人向它发起递归查询。这意味着,攻击者可以伪造海量的查询请求,把你的服务器当成“枪”使,去攻击别的目标(这就是反射放大攻击的经典玩法)。你的服务器累个半死,带宽打满,最后自己先挂了。
- 版本信息直接“报家门”:BIND默认会把自己的版本号在响应里告诉你。这就好比你家门口挂个牌子:“我家用的是XX牌锁,型号是YY”。黑客看了直乐,照着已知漏洞打就行了。
- 区域传输(AXFR)不设限:如果你的主从服务器之间同步数据(区域传输)没做IP限制,那攻击者可能直接把你的整个域名信息数据库拖走,分析你内网结构,找到更脆弱的攻击点。
- 缓存投毒:如果配置不当,攻击者可以往你的DNS缓存里塞错误的数据,把用户引到钓鱼网站去。到时候用户丢了密码,骂的可是你。
这些问题,很多所谓的企业级防护方案(PPT做得特猛那种)根本不管,它们只管流量进来以后的事。而BIND自身的这些“内伤”,真被打的时候,可能防护还没触发,你自己就先趴下了。
给BIND穿上“防弹衣”:几招实在的配置
别慌,调整几个关键配置,安全性就能提升一大截。咱们说点能落地的。
第一招,关掉“公共递归”
说白了,别让你的DNS服务器当“老好人”。在 named.conf 的 options 区块里,加上:
allow-recursion { 127.0.0.1; 你的可信客户端IP网段; };
recursion yes;
意思是,只允许本地和你指定的内部网络进行递归查询,其他外来请求,只提供你权威管辖的域名信息。一下子就把反射攻击的路给堵死一大半。
第二招,低调,别露富
把版本信息藏起来。还是在 options 里:
version "Not available";
或者更绝一点,直接不响应版本查询。让攻击者猜去吧。
第三招,给区域传输上把锁
主从同步必须限制IP。在 zone 定义里:
allow-transfer { 从服务器IP; };
也可以考虑使用TSIG(事务签名)来做认证,更保险。
第四招,控制查询速率 这招防CC攻击(针对应用层的慢速攻击)特别有用。限制每个源IP的查询频率:
rate-limit {
responses-per-second 10;
window 5;
};
意思是每秒每个客户端最多响应10次查询,观察窗口是5秒。超过就延迟响应或者直接丢弃。这能有效防止单个IP用脚本疯狂刷你。
当DDoS真的来了:光靠配置可顶不住
上面这些是“练内功”,能防住大部分小规模滋扰和漏洞扫描。但真遇上不讲道理的DDoS洪流,比如几百G的UDP Flood砸向你DNS服务的53端口,你单台服务器再优化配置也得跪。
这时候,就得靠“外功”了。
高防IP/高防DNS是首选 把你的权威DNS服务器(就是运行BIND的那台)的IP,换成高防服务商提供的IP。所有流量先经过他们的清洗中心,正常的查询放过来,攻击流量在那边就被过滤掉了。这是目前最主流、也最省事的办法。
我自己经手过的几个电商项目,大促前必做这个动作。不然活动页面刚上线,域名解析挂了,那乐子就大了。
源站隐藏是终极心法 最理想的状况是:攻击者根本不知道你真实的BIND服务器IP在哪。
- 用云厂商提供的权威DNS服务(它们本身抗D能力很强)。
- 或者,在你自己的BIND服务器前面,套上至少两层“壳”:先用高防IP,后面接一个反向代理/WAF,最后才到BIND。这样,真实IP被牢牢藏住。
监控与响应:别等挂了才知道 说个很多人会忽略的点:监控DNS服务的响应时间和正确率。光监控服务器死活是不够的。攻击者现在很“贼”,可能不会一下子打死你,而是用低速攻击让你解析变慢,用户体验急剧下降。所以,得有能监控到“解析变慢”这个维度的工具,设置好告警。
最后的大实话
DNS安全,是个典型的“木桶理论”。你BIND配置得再好,服务器系统有漏洞,白搭。你系统也加固了,机房网络没防,白搭。
所以,别指望一个方案通吃。我的建议是:
- 先把自己能做的做到位:把上面提到的BIND安全配置仔细过一遍,这是成本最低的防护。
- 认清自己业务的斤两:如果你的网站就几个访客,那可能没必要上高防。但但凡有点业务量,或者得罪过人(竞争同行可不少见),别硬撑,该上高防就上。这点钱比业务停摆的损失小多了。
- 定期“体检”:用
nmap、dig等工具,从外网扫描一下自己的DNS服务,看看哪些信息暴露了。也可以找一些在线的DNS安全检测服务扫一下,会有惊喜(或者惊吓)。
防护这件事,永远没有一劳永逸。攻击技术也在变,今天防住了UDP Flood,明天可能就来TCP SYN Flood了。保持警惕,定期更新知识和配置,才是正道。
行了,不废话了,赶紧去看看你的 named.conf 吧。

