域名劫持——网易云信 IM SDK 服务高可用技术方案

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的 IP 地址从而实现用户无法访问目标网站的目的,或者蓄意/恶意要求用户访问指定 IP 地址(网站)的目的。”(以上内容引自「域名劫持」百度百科) 。网易云信 IM SDK 作为一款 ToB 产品,支撑着各种三方业务的开展。面对各种复杂的网络环境,DNS 劫持与 DNS 污染时有发生,那么在我们提供服务的过程中应该如何避免此类事故的发生呢?

作者:郝魁 网易云信资深客户端开发工程师

一、关于域名劫持

技术是一把双刃剑,在大侠手中定国安邦,在鼠辈手中祸国殃民

“域名劫持”虽然带了“劫持”二字,但在此环境中实属中性词汇。例如对于一些非法网站的访问,可以通过 DNS 服务把相应的域名解析到不可访问的 IP 地址,以阻止对于该非法网站的访问并给予警告等。在网易云信即时通信产品运维过程中,曾经发生过服务域名 “netease.im“被别有用心的人或组织恶意劫持的事件,导致接入网易云信 IM SDK 的应用无法正常登录,给客户以及客户的用户造成影响。

为了弄清楚这种事故是怎么发生的,我们来分析一下网易云信 IM SDK 的登录过程:

域名劫持——网易云信 IM SDK 服务高可用技术方案

从流程上来看,在“更新 LBS”的节点上,如果发生 DNS 劫持,在访问网易云信 LBS 服务时有可能超时或者拿到了错误的应答,导致 IM SDK 无法获取正常的 Link 服务器地址及端口,如何避免此类事故的发生呢?本文将围绕网易云信端侧服务高可用技术方案以及高可用组件实现方案进行具体分享。

二、如何预防 DNS 劫持

通常对于域名被劫持后,我们可以采用以下几种方式:

域名劫持——网易云信 IM SDK 服务高可用技术方案

上述几种方式,都是在发生劫持后采取的方案,无论是从服务提供侧还是服务使用侧来说都不够灵活,为了解决这些问题,提前预防事故的发生,我们主要采用以下两种方案:

IMG_256

其中接入了 HttpDNS 服务的方案降低了所有场景下域名被劫持的风险。

(一)LocalDNS 域名劫持

域名劫持一直是困扰许多开发者的问题之一,其表现为域名 A 应该返回的 DNS 解析结果 IP1 被恶意替换为了 IP2,导致 A 的访问失败或访问了一个不安全的站点,常见域名劫持方式有以下几种:

  • 黑客入侵宽带路由器,篡改终端用户 LocalDNS,并指向伪造 LocalDNS,通过控制 LocalDNS 的逻辑返回错误的 IP 信息进行域名劫持。
  • 监听终端用户域名解析请求,在 LocalDNS 返回正确结果之前将伪造的 DNS 解析响应传递给终端用户,进而控制终端用户的域名访问行为。
  • 缓存污染,LocalDNS 缓存了域名的解析结果,并对部分域名结果进行更改,导致用户访问被指向被更改的地址,示意图如下:

域名劫持——网易云信 IM SDK 服务高可用技术方案 (二)HttpDNS 实现原理

Step 1:客户端直接访问 HttpDNS 接口,获取业务在域名配置管理系统上配置的“正确的”、“访问速度优异的”IP 列表。

Step 2:客户端向获取到的 IP 后就向直接往此 IP 发送业务协议请求。以 HTTP 请求为例,通过在 header 中指定 Host 字段,向 HttpDNS 返回的 IP 发送标准的 HTTP 请求即可,如果是 Https 还要考虑 SNI 的问题。

域名劫持——网易云信 IM SDK 服务高可用技术方案

三、网易云信服务高可用策略

为了提高服务的高可用性,网易云信 SDK 接入了 HttpDNS 服务,高可用方案整体结构如下所示:

域名劫持——网易云信 IM SDK 服务高可用技术方案

IM SDK 接入 HttpDNS 服务实现服务高可用的一般流程:

IMG_262

(一)端侧 HttpDNS SDK 实现

IM SDK 高可用组件采用了跨平台开发方案,主要针对 Native SDK(Windows 、MacOS、iOS、Android)进行了支持,基本结构如下:

域名劫持——网易云信 IM SDK 服务高可用技术方案

高可用组件为了保证高可用性、响应的及时性、结果的正确性,在设计时需要完成以下几个功能:

  • HttpDNS 服务接口的更新及缓存维护
  • 域名查询结果更新及缓存维护
  • HTTP 请求的实现
  1. 阶梯式 HTTP 请求

某一域名通过 HttpDNS 的域名查询服务,可能会解析出多个 IP 地址,如果这些地址当中包含已下线或者访问速度不理想的节点,会使整个 HTTP 的访问时间变长,最坏的情况是所有的地址都进行了访问,且都超时,如下图所示:

IMG_264
域名劫持——网易云信 IM SDK 服务高可用技术方案

为了提高 HTTP 请求的访问效率,在网易云信高可用组件中引入了多地址阶梯式的 HTTP 请求机制,比如单一链接的 HTTP 请求超时时间指定为 30s,当开始名列前茅个链接访问时开启一个超时时间为 3 秒的定时器 Timer0,如果该请求在 3 秒内返回并且经过业务模块验证为正确应答,此时整个多地址阶梯式请求结束,否则在 Timer0 触发时,启动对下一链接的 HTTP 请求,并启动一个新的超时时间为 3 秒的定时器 Time1,以此类推,直到有正确的响应结果或者所有的链接都已访问完成,流程如下所示:

IMG_265

域名劫持——网易云信 IM SDK 服务高可用技术方案 2. HttpDNS 服务接口的更新及缓存维护

HttpDNS 也是一个 HTTP 服务也存在被劫持的可能,所以除了使用 HttpDNS 域名外,高可用组件还内置了多个固化的 IP,以解决 HttpDNS 域名被劫持后无法访问的问题,使用固化 IP 虽然可以解决域名被劫持的问题,但不一定是最新、优异的节点,为了解决这个问题,高可用组件在指定时间内会更新 HttpDNS 服务地址,拿到最新、优异的节点。为了减少对 HttpDNS 的访问量,引入了服务地址的 TTL(一般是 1 小时)机制,即在服务地址有效期内使用本地缓存,不再向 HttpDNS 请求服务地址。

HttpDNS 服务初始化流程如下:

IMG_266
  1. 域名查询结果更新及缓存维护

高可用组件为了保证域名查询的及时响应,以及减少对 HttpDNS 的访问量,引入了“查询结果缓存”,对已经查询过的域名结果进行了本地缓存,为了提高正确性同样也加入了 TTL 机制(一般是 5 分钟),超出指定时间后,会对结果进行再次更新,同时为了保证响应的及时性,在 TTL 的基础上加入了冗余时间(一般是 TTL*0.75),所以调用高可用组件查询域名会存在三种结果:

  • 缓存未到达冗余时间,返回缓存结果。
  • 缓存达到冗余时间,但尚未过期,返回缓存结果,同时发起更新请求。
  • 缓存已过期,发起更新请求,应答成功后,更新缓存,响应上层调用,如果应答失败,继续使用缓存数据。

调用高可用组件进行域名查询的流程如下:

IMG_267
  1. HTTP 访问流程设计
域名劫持——网易云信 IM SDK 服务高可用技术方案

(二) 疑似劫持事件上报

当调用高可用组件进行 HTTP 请求时,如果因非网络原因导致的请求失败,而且触发了 HttpDNS 查询域名操作,则判定此次访问的域名可能存在已被劫持的风险,高可用组件会收集与此域名相关的信息内容上报到网易云信数据大盘,数据大盘后台根据上报信息来定位是否存在域名劫持的情况,并根据实际情况来决定是否要重新配置 HttpDNS 解析结果还是配合安全部门对相应的 App 进行封禁处理。

域名劫持——网易云信 IM SDK 服务高可用技术方案

(三)SNI 处理

为了让多个域名复用一个 IP,在 HTTP 服务器上引入了虚拟主机的概念。多个虚拟主机共享 IP 的 HTTPS 服务器中,在握手建立之前服务器无法知道客户端请求的具体 Host,所以无法将请求交给特定的虚拟主机,从而导致服务器无法读取虚拟主机中配置的证书信息。SNI 就是用来解决这个问题的,SNI 是 SSL 和 TLS 的一个扩展协议。SNI 要求客户端在与服务器握手时就携带需要访问的域名的 Host 信息,具体实现方法是在客户端 “Client Hello” 报文的请求头中,增加了 Server Name 的扩展字段,因此服务器便会知道需要用哪个虚拟主机的证书与客户端握手并建立 TLS 连接。

以下是使用 libcurl 发送 HTTP 请求的代码片段:

域名劫持——网易云信 IM SDK 服务高可用技术方案

参考资料

  • DNS污染_百度百科 (baidu.com)
  • 域名劫持_百度百科 (baidu.com)
  • 域名服务器缓存污染 – 维基百科,自由的百科全书 (wikipedia.org)

以上就是网易云信端侧服务高可用技术方案以及高可用组件实现方案的分享,如有兴趣,欢迎你在公众号留言与我探讨。

作者介绍

郝魁,网易云信资深 C++ 开发工程师,主要负责网易云信 IM SDK 的开发、维护、重构等工作,拥有多年 C++ 客户端开发经验,现致力于跨平台 C++ 开发。

关于网易云信

网易云信:网易智企旗下融合通信云服务专家、通信与视频 PaaS 平台。集网易 24 年 IM 以及音视频技术打造的融合通信云服务专家,稳定易用的通信与视频 PaaS 平台。提供融合通信与视频的核心能力与组件,包含 IM 即时通讯、5G 消息平台、一键登录、信令、短信与号码隐私保护等通信服务,音视频通话、直播、点播、互动直播与互动白板等音视频服务,视频会议等组件服务,并联合网易易盾推出一站式安全通信方案「安全通」。目前,网易云信已经成功发送 1.6 万亿条消息,覆盖智能终端 SDK 数累计超过 186 亿,我们期待每个智能终端都有云信的融合通信能力。

文章标题:域名劫持——网易云信 IM SDK 服务高可用技术方案,发布者:网易智企,转载请注明出处:https://worktile.com/kb/p/5975

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
网易智企的头像网易智企认证作者
上一篇 2022年3月17日 上午12:30
下一篇 2022年3月17日 上午12:42

相关推荐

  • oa办公系统的好处

    好处有:一、提高工作效率;二、降低管理成本;三、提高管理水平;四、提升企业形象;五、提高员工满意度。OA办公系统可以实现信息快速传递、自动化处理,使得企业内部各部门之间的沟通更加方便快捷。 一、提高工作效率 OA办公系统可以实现信息快速传递、自动化处理,使得企业内部各部门之间的沟通更加方便快捷。同时…

    2023年5月28日
    93700
  • devops什么时候最忙

    DevOps团队通常在软件的提供周期关键阶段、重要功能部署、系统维护和升级时期、紧急故障修复以及产品上线前后遭受压力最大。其中,产品上线前后环节,工作量显著激增,需确保代码质量、环境稳定并及时响应可能发生的任何问题,可视为压力与忙碌的顶峰。 在产品上线前后阶段,谨慎实施不同版本间的代码合并、确保测试…

    2024年3月26日
    6400
  • 管理者融入团队的计划怎么写

    撰写管理者融入团队计划的步骤:1、确定管理团队的角色和职责;2、分析团队计划的需求;3、确立计划的目标;4、确认资源和预算;5、制定管理计划;6、操作管理计划;7、改进管理计划。确定管理团队的角色和职责是指把团队成员安排在合适的位置。 一、撰写管理者融入团队计划的步骤 1、确定管理团队的角色和职责 …

    2023年4月13日
    48100
  • oa办公系统那家好

    对于不同的企业需求和条件,推荐的OA(Office Automation)办公系统会有所不同。一般评估OA系统时会考虑系统稳定性、自定义灵活性、使用便捷性、安全性、成本效益、以及技术支持与服务等因素。某些企业可能更偏好针对大型企业设计的Microsoft Office 365,而小型企业或许会选择成…

    2024年1月15日
    30600
  • 国内oa办公系统排行榜

    国内OA办公系统排行榜主要包括钉钉、腾讯企业微信、用友NC、金蝶K3WISE、华泰金仕达金融终端等。钉钉,作为一套集成化的企业服务平台,在用户体验和智能化办公方面表现出色,具有强大的即时通讯能力,并且支持远程办公、智能考勤等多种办公模式。 一、市场领先品牌 钉钉被广大用户称誉为革命性的企业通讯和办公…

    2024年1月15日
    68400
  • 研发管理工具主要有哪些

    国内外的研发项目管理工具有:1、PingCode;2、Worktile;3、Jira;4、Clarizen;5、禅道;6、Monday。研发管理软件是专为从事产品研发工作而开发的一套过程管理工具,以管理部分甚至所有研发环节的日常管理工作。 1、PingCode PingCode 是近几年国内热门的一…

    2022年11月14日
    1.5K00
  • 如何描述项目的人才管理及建设

    项目的人才管理及建设涉及诸多方面,包括人才的识别与招聘、培训与发展、绩效管理以及激励与保留,这些组成部分共同确保项目能够拥有并维持一支高效、专业的团队。在此基础上,培训与发展环节尤为关键,因为它不仅提升了团队的技能和知识水平,还能有效提高团队成员的工作满意度与忠诚度,进而减少人才流失,为项目的成功提…

    2024年4月11日
    4600
  • 项目部管理方法有哪些优点

    项目部管理方法有以下优点:一、高度准确;二、节省时间;三、降低风险;四、提高成功率;五、提高生产力。规划项目的范围可能非常具有挑战性,因为它涉及估计项目的确切细节以及参与其执行的人员。 一、高度准确 规划项目的范围可能非常具有挑战性,因为它涉及估计项目的确切细节以及参与其执行的人员。自下而上的估算允…

    2023年4月30日
    29200
  • DevOps和传统IT运维的主要区别

    DevOps和传统IT运维的主要区别在于它们对组织结构、工作流程、工具使用、团队合作以及文化理念的不同处理方式。DevOps侧重于1、快速迭代发布,实现开发与运维团队的持续交付与集成;2、跨功能团队合作,通过消除部门间的障碍促进协作与沟通;3、自动化流程,利用自动化工具以减少人为错误并提高效率;4、…

    2023年12月13日
    31700
  • 数据加密是什么

    网络安全加密指将数据从可读格式转换为编码格式。经过加密的数据只能在解密后进行读取或者处理。加密是数据安全的基本构件。它是确保计算机系统的信息无法被想要将其用于恶意目的的人偷盗或者读取的最简单、最重要的方式。 加密 – 定义和含义 网络安全加密指将数据从可读格式转换为编码格式。经过加密的数据只能在解密…

    2022年11月3日
    71800

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部