DNS高防方案

article/2025/10/15 3:13:39

1 DNS高防需求

很多年前的需求,仅供参考

DNS作为网络服务的入口,面临攻击的风险越来越大,传统的DNS服务基本不具备DDOS之类的防御能力,同时互联网上持续发生的DDOS攻击事件在不断的刷新着最大流量攻击纪录。所以提供可靠有效的DNS高防服务,其市场前景非常好。

整体上,DNS高防必需满足几个硬需求:

  1. 对于同一个用户提供联通、电信两条线路的高防节点;
  2. 支持大流量攻击下的防御,目标防御50G+
  3. 实现较低误拦截率,减少正常请求被拦截的比例,目标1%;
  4. 实现较低的透过率,减少回源站请求的比例,避免源站被打跨,支持设定源站QPS阈值;
  5. 支持缓存响应,减少回源服务器的QPS;
  6. 支持对域名服务商提供域名防护,这类用户拥有几万甚至几十万的主域名,源服务器众多,需要提供独立的高防IP;
  7. 支持对大企业的权威DNS防护,可选独立IP或共享IP模式。

2 当前的DNS防御基础

现有环境下,自建的DNS权威服务器集群具备一定的DDOS防御能力,基本上10G是个瓶颈。同时针对希望被保护的而且暂不具备为其他的DNS权威直接提供服务,除非用户采用NS切入的方式

2.1 安全宝DNS防御

建设有多组NS服务器,同时在抗D机房有一组NS,当其它的优质线路上的NS因被攻击无法提供服务时,抗D机房内的NS自动提供服务,总体情况下通过该机房的防御主要是为进一步防御提供处理时间。
目前的防御手段是暂停对被攻击域名的解析,或协助114dns进行防御。

2.2 云加速2.0 DNS防御

2.0的DNS服务器放置在系统部管理的一个机房内,该机房支持10G带宽,主要的防御手段是统计ip和dns query的频率,超过一定的阈值后,启用ipfilter来拦截该IP的请求,该组服务的性能处理能力在200wqps。
存在的问题也是明显的,即带宽有限,仅10Gbps;同时清洗方案漏过率高,直接影响DNS服务的处理性能。

2.3 云加速3.0 DNS防御方案

云加速3.0系统采用CF解决方案,CF提供近千个NS,可以把域名分散到不同的NS服务器上,减小因攻击带来的影响范围。对于NS本身启用了缓存加清洗功能,也会针对ip来拦截,使用bfp进行高效拦截。
由于启用了国外的NS服务器,解析延迟增大了,同时还存在很大的风险,即当攻击的目标是国外IP时,电信等运营商会从跨国境的流量中封堵存在超大流量的IP,这种情况会严重影响对其它域名的解析。

3 114DNS高防方案

114DNS具备现成的DNS缓存+清洗的方案,通过ECMP集群的方式来扩展防御性能,能够比较快的搭建起防御平台。

3.1 方案概述

本方案要求在电信和联通两个机房分别部署防御集群,在每个集群上为用户提供独立的IP用于NS解析。
在114DNS防御技术支撑下,部署模式如下图:

在这里插入图片描述
用户提供其ns列表和相应的服务器IP,由防御集群清洗后,转交到DNS代理分发上,DNS代理会根据请求域名和ns的映射关系找到真实的服务器IP去请求解析数据。
114DNS防御集群如下部署:
在这里插入图片描述
由防御集群清洗后,需要回源请求的数据交给DNS代理分发集群,这个集群两台即可,主要用于冗余负载,到这里的请求基本上要转发到源站的,所以要求防御集群的透过率要较低。
在这里插入图片描述

3.2 方案实施

本方案依托114DNS的防御系统进行部署,外加DNS代理分发程序的开发和部署,同时需要114DNS提供攻击数据输出,协助收集攻击报表数据。

3.2.1 防御集群部署

目前据114DNS提供的数据,其单机的处理能力大概在200万QPS,按每请求包80字节、响应包140字节计算,单机处理带宽在上行1.2G下行2G的数量级,需要114DNS提供清洗比例的数据指标,以便于计算下行带宽的使用情况。

预估50G的DNS流量防御,需要ECMP64的集群,即需要部署64台设备建立集群,这样的集群处理的效果应该达到上行70G和下行130G的防御能力。

所需设备:

  1. 万兆48口交换机2台,带ECMP功能
  2. 64台服务器,2台同类型备用
  3. 电信、联通机房各一套

上述系统由114DNS协助安装。
114DNS提供技术支持相关未尽事宜:
1) 拦截率指标,即200万的接收QPS,最多只响应多少QPS?
2) 透过率指标,即防御系统上没有缓存的请求,最多发出多少比例或是阈值的QPS到源NS(DNS代理)?

3.2.2 代理集群部署

所需设备:

  1. 与防御服务器同类型3台(2台为一个集群,1台备用,交换机可以共用)
  2. 电信、联通机房各一套

3.2.3 DNS代理分发程序开发

1. 后台处理程序
支持用户在界面上配置NS名称与源站IP的对应关系,实时更新到redis中心,通过redis的同步功能实时同步到代理分发各server上;
2. 代理分发程序

  1. 接收防御集群过来的请求,获取请求域名的ns名称,并做缓存,定时从redis中获取该ns名称对应的IP,把请求转发到该IP上
  2. 源站回应没有查到的结果不要返回给防御集群
  3. 支持缓存功能,启用缓存延迟失效模式,即被缓存的结果在缓存失效时没有获取有效响应时不失效

3.2.4 报表数据收集

114DNS支持按各IP每秒输出数据,统计秒周期内的相关数据:
1) 上行包数和字节
2) 下行包数和字节
3) 请求次数
4) 响应次数

DNS代理程序支持按用户每秒统计回源情况:
1) 请求次数
2) 响应次数
3) 响应结果中为未找到的次数
4) 发送流量
5) 接收流量

3.3 稳定性设计

在这里插入图片描述
**通过稳定性分析,发现还存在两个方面的未知信息:

  1. DNS防御系统的稳定性建设方案
  2. 如前我们设计了联通、电信两个DNS高防接入的方案,以此实现分区解析,如果某个机房因攻击超大而停止服务的情况下,会影响所有服务的分区解析问题,这类稳定性是否需要考虑?**

4 自建DNS高防方案

高防建设的总体框架方案是分层防御,构建的防御集群支持在网络层防御掉协议栈上的非正常流量,具体到应用层上的攻击则需要具体的应用清洗模块来进一步清洗,所以DNS的高防方案也可以融入到自建的高防方案中来,这种情况下,在同一个机房内防御时可以充分利用同一个集群的硬件资源,节约防御成本。
集群的构建模式相同,都是在ECMP模式下堆叠机器来扩展处理性能,这种情况下就是需要不断的完善我们的server防御能力,在这里只是简单阐述。
Server的清洗模块组成图如下:
在这里插入图片描述
网络层清洗

  1. 维护自动白名单,通过观察正常连接,确定真实存在的IP,并维护好该IP的指纹(TTL特征)
  2. 定位非国内IP进行丢弃
  3. 丢弃与白名单IP特征严重不匹配的数据包
  4. 非DNS的流量还可以通过确定首包丢弃和一定间隔内只允许通过单包的机制进行丢包
  5. 非DNS的流量还可以限制上行到协议栈的个数
  6. Syn代理等
    DNS清洗
  7. 建立分区(电信、联通)缓存
  8. 追踪IP同时查询的域名个数,查询较多的为常规IP多一些
  9. 追踪常规IP及其查询主域的hash分组,统计查询频率,对于非正常频率下的请求丢弃没有缓存结果的查询
  10. 对于非常规IP限制速率
  11. 提高单台设备的清洗及吞吐能力,清洗比例达50%
    HTTP清洗
    完成代理连接,具体做CC方面的清洗
    其它TCP清洗
    完成代理连接,视具体的应用做进一步的开发

http://chatgpt.dhexx.cn/article/9U7HtWcV.shtml

相关文章

IPv6公共DNS现在提供加密DNS查询

支持DoT/DoH DoT:dns.ipv6dns.comDoH:https://dns.ipv6dns.com/dns-query为什么需要加密DNS 配置: Windows 10/8/7 1 右键网络进入属性或者右键右下角的Inernet进入网络共享中心,如下图: 2 点击网络和共享中心左侧的"更改适配器设置"链接,如下图: 3 选中正…

dns服务器哪个稳定,几个非常好用的DNS服务器(解决电信DNS此劫问题) - 电脑技术,dns,ricky,...

有时候我们会遇到这样的问题,使用域名不能访问,而输入IP地址可以访问,这就是DNS服务器出了问题,而这种情况是人为有意干扰的,我们就说这是域名劫持。不幸的是,国内的域名经常遇到大规模的DNS劫持,有一个很简…

[DAX] BLANK函数 | ISBLANK函数

1.BLANK函数 BLANK函数用于返回空白 语法格式 BLANK() 提示Tips:检查一个值是否为BLANK的正确方法是使用运算符 或ISBLANK函数,不要使用运算符 表达式结果BLANK()空值BLANK() 0TrueBLANK() 0FalseBLANK() BLANK()TrueBLANK() && TRUEFalseBLANK(…

DAX基础 -- ISBLANK VS BLANK

28 满脑子的智慧&#xff0c;硬生生地撑大了我的脸 好久没更新了&#xff0c;今天来分享下两个很简单却很容易犯错的函数&#xff0c;ISBLANK和BLANK。 先来看语法 函数语法返回值ISBLANKISBLANK ( <Value> )值为空则返回True,反之FalseBLANKBLANK ( )任何类型的值 …

StringUtils里面的 isEmpty方法和isBlank方法的区别

写在前面&#xff1a; 我是「扬帆向海」&#xff0c;这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录&#xff0c;如果您对 Java、算法 感兴趣&#xff0c;可以关注我的动态&…

isEmpty 和 isBlank 区别?

来源 | jianshu.com/p/98e7593ca0e2 org.apache.commons.lang.StringUtils 类提供了 String 的常用操作,最为常用的判空有如下两种 isEmpty(String str) 和 isBlank(String str)。 分析 我们通过源码来分析区别&#xff1a; public static boolean isEmpty(String str) {return…

isEmpty 和 isBlank 请别乱用了,小心把服务器搞崩!

大家好&#xff0c;我是老赵&#xff01; 大家好&#xff0c;我是程序汪&#xff0c;开发中经常有些小细节容易忽略&#xff0c;这些小细节往往容易导致代码缺陷&#xff0c;今天分享一波工具类的小细节 也许你两个都不知道,也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外…

java中isblank 方法_StringUtils中的isEmpty、isNotEmpty、isBlank和isNotBlank的区别详解

一、StringUtils中的isEmpty方法 1、StringUtils中的isEmpty方法中的源码如下: 注:由源码可知(判断某字符串是否为空,为空的标准是str==null或str.length()==0) 2、StringUtils中的isEmpty方法示例,如下代码 package com.rf.designPatterns.singleton; import org.apache.c…

isEmpty和isBlank的区别

isEmpty和isBlank的区别在于 isEmpty仅仅是判断空和长度为0字符串 isBlank判断的是空&#xff0c;长度为0&#xff0c;空白字符&#xff08;包括空格&#xff0c;制表符\t&#xff0c;换行符\n&#xff0c;换页符\f&#xff0c;回车\r&#xff09;组成的字符串。 比如&#…

Android studio模拟短信支付功能

需求&#xff1a; 模拟短信支付功能。创建两个Activity&#xff0c;功能分别为支付首页和短信验证Activity。用户在支付首页点击支付按钮&#xff0c;使用startActivityForResult()方法打开一个新的Activity&#xff0c;在短信验证Activity中模拟输入短信验证码&#xff0c;并…

沙箱-简单实现支付宝网页支付功能

1.在实现前我们得先了解支付宝支付功能-他是需要一个真实的软件 但我们没有真实的应用软件&#xff0c;所以支付宝给我们提供了一个沙箱的功能。沙箱就是一个虚拟的假的应用软件。了解沙箱可以看支付宝文档中心。----沙箱环境 &#xff5c; 开放平台 2.我们创建自己的沙箱账号…

uniapp实现支付功能

uniapp实现支付功能 详细参考&#xff1a; https://gitee.com/copperpeas/uniapp-payment uniapp-payment 介绍 uniapp支付 微信支付流程 测试接入的是uniapp官方预下单接口 APP应用首先去微信等开发平台申请开通支付&#xff0c;部分支付渠道需要配置支付目录&#xff0c;授…

微信小程序支付功能的实现

前言 最近需要在微信小程序中用到在线支付功能&#xff0c;于是看了一下官方的文档&#xff0c;发现要在小程序里实现微信支付还是很方便的&#xff0c;如果你以前开发过服务号下的微信支付&#xff0c;那么你会发现其实小程序里的微信支付和服务号里的开发过程如出一辙&#…

微信小程序前端微信支付功能 支付流程

小程序支付&#xff08;纯前端&#xff09; 前提&#xff08;实现微信小程序支付功能需要appid主体为企业&#xff0c;以及开通了微信商家服务的小程序才能实现&#xff0c;个人小程序是无法实现这个功能的&#xff09; 前期准备&#xff1a; 1.开通了微信支付&#xff0c;并…

微信小程序接入支付功能并实现支付

随着微信小程序越来越广泛的应用,现在小程序几乎无所不能(绝对啦,哈哈),那么就会有很多微信小程序需要有支付的需求,那么该文章将带领大家走一遍如何实现微信小程序的支付功能. 第一步,微信小程序管理后台 -> 微信支付->接入微信支付 及关联(设置)商户信息 如果是第一次…

软件测试之“支付功能”测试

测试思维 要分析测试点之前&#xff0c;我们先来梳理一下测试思维。总结来说&#xff0c;任何事物的测试思路都可以总结如下&#xff1a; 第一步&#xff1a;梳理产品的核心业务流程&#xff1a;明白这是个什么项目&#xff0c;实现了什么业务&#xff0c;以及是怎么实现的&a…

一步步教你如何在SpringBoot项目中引入支付功能

听说微信搜索《Java鱼仔》会变更强哦&#xff01; 本文收录于JavaStarter &#xff0c;里面有我完整的Java系列文章&#xff0c;学习或面试都可以看看哦 &#xff08;一&#xff09;引言 支付功能如今已经成为一个需要盈利的网站的基本功能了&#xff0c;如今的网站如果想要做…

支付功能怎么测试?

跳槽高峰期&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中&#xff1a; “说说你项目中的 xx 模块你是如何测试的&#xff1f;” “给你一个购物车&#xff0c;你要怎么测试&#xff1f;”…

面试题:支付功能怎么测试?如何回答?

文章末尾给大家准备了大量福利 前言 九月了&#xff0c;有很多的小伙伴已经全面武装好准备找工作了&#xff0c;九月和十月是黄金期——俗称”金九银十“。那么&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就…

支付功能测试用例(参考微信平台)

支付功能测试用例xmind&#xff0c;功能点以支付方式&#xff0c;支付手段&#xff0c;支付金额划分的 支付方式&#xff1a; 1.余额&#xff08;零钱&#xff09;支付 2.储蓄卡支付 3.第三方支付微信&#xff0c;支付宝&#xff0c;京东、百度、&#xff09; 4.信用卡支付…