本人非计科类及相关专业,如有错误欢迎指正

本篇作为实际教程的先导篇,力争使用通俗易懂的语言向你讲解组织如何审查及管理网络流量

校园网共享检测实际上就是针对不同类设备合用同一接入方法的特制审查

本文的讨论仅基于所有权归属于自己的设备,归属于组织的设备请不要尝试作为个人设备使用

0. 一切的开端

小A结束了苦B的上午实验下午上课的一天,晚上夜深人静于是保持组织网络连接打开了JMComic看点好康的,没想到还没起飞就被跳转到了不明页面,吓得他没起飞就坠机了,达成了个人最快飞行成就

第二天辅导员找到小A想要小A解释访问绿色网站的事,喜提检讨书一封,小A虽然不知道自己是如何被发现的,但已经预定了的行程自然是不可取消的,于是第二天晚上他尝试断开连接组织的网络,飞行一切顺利,好像昨天的事情未发生过一般

1. 网站是怎样被访问的?

既然小A可以使用数据起飞,那组织的网络中必然有蹊跷,在此之前,让我们先来看看客户端是怎样访问网站的

  • 客户端:即你的手机,电脑

  • 服务器:一台不关机的特殊电脑,负责给客户端提供内容

  • DNS:DNS就是互联网的电话本,比如你的联系人里AD对应10010,你呼叫10010只需要输入AD即可。DNS同理可以将人类容易记忆的域名(此例中为18comic.vip)转化为相对难以记忆的IPv4地址(172.66.162.116)或更难记忆的IPv6地址(2001::c73b:95ef)

  • 请求与响应:客户端向服务端发出请求,服务器向客户端发出响应

  • HTTP与HTTPS:是用于进行网络数据交换的协议,小白需要知道的是HTTP是明文,即组织能看到你使用HTTP发送的内容,而HTTPS由于对内容的加密,获取HTTPS内容比较复杂

  • Host:HTTP协议中用于确定客户端希望获得的网站名称

  • User-Agent (UA):HTTP协议中客户端的“自我介绍”,分析User-Agent即可判别当前客户端的种类及使用的软件,例如:

  1. Mozilla/5.0 (Linux; Android 12; HarmonyOS; CET-AL00; HMSCore 6.15.0.312) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.6.310 Mobile Safari/537.36 这是一台华为Mate 50使用华为内置浏览器发出的请求

  2. Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0 这是一台Windows电脑使用Firefox浏览器发出的请求

  1. 客户端发起DNS请求

  2. DNS服务器回应请求进行查询,返回18comic.vip对应的服务器地址

  3. 客户端与18comic.vip服务器进行明文的HTTP连接,其中发送了请求的Host: 18comic.vip以及客户端UA

  4. 服务器响应301,即地址发生转移,需客户端以HTTPS协议访问该站点(https://18comic.vip)

  5. 客户端与18comic.vip服务器进行加密的HTTPS连接,开始浏览网站

我们现在有了客户端访问网站的简易流程,一般DNS请求由内网服务器即组织的网关提供且不设验证可随意篡改内容,请尝试思考可以防止组织内人员偷看绿色网站的办法

WireShark示DNS响应的结构

Reqable对HTTP请求进行抓包

2. 网站是怎样不可访问的?

通过上文的描述,切断对绿色网站的请求可以通过如下三种方法:DNS拦截,服务器地址池拦截,HTTP Host项识别

  1. DNS拦截:组织对内网的DNS服务器完全可控,商品化的管理系统一般都会配备数据库,比如向DNS请求18comic.vip会被自动标记为请求疑似绿色网站,此时DNS可以仅标记(响应正确的IP);篡改(修改到本地服务器以实现第一张图片的类似警告页效果);响应空地址(如0.0.0.0,将表现为网页始终连接错误)

  2. 服务器地址池拦截:检查网域内客户端尝试访问的IP地址,如172.66.162.116,若该地址在禁止访问的绿色网站规则内则切断连接或屏蔽,表现为浏览器白屏或显示网页被重置

  3. HTTP Host项:通过对HTTP包的嗅探检查客户端是否在访问被禁止的域名(18comic.vip),如果是则切断连接

3. 如何避免自己的上网行为被记录?

通过上文的讨论,可以得出以下结论:

  1. 我们需要避免使用组织提供的DNS

  2. 我们需要规避使用明文的HTTP协议

  3. 如有可能我们需要打造自己的网络出口

具体的实现方法:

  1. 使用公开的加密DNS

  2. 打开浏览器的HTTPS-Only模式

  3. 搭建中转代理

设置加密DNS

Windows 10/11
  • 设置 -> 网络和 Internet

  • 属性

  • DNS 服务器(右侧编辑)

按照如下顺序填入:

120.53.53.53

https://doh.pub/dns-query

223.5.5.5

https://dns.alidns.com/dns-query

Android
  • 搜索“私人DNS”(一般在第一个设置区即网络与连接区的最后一项内)

  • 选择指定DNS服务器并填入 dot.pub

iOS / iPadOS
  • iOS 缺少用户层面的设置,需配合描述文件更改

  • 描述文件可更改系统隐藏的设置项,请务必确保您信任描述文件来源!

  • 使用 Safari 打开:api.965server.top/apple-dns

  • 下载描述文件后打开设置,转到通用 - VPN与设备管理

  • 点击 DNSPod-DoT 并右上角安装

HTTPS-Only 模式

  • 浏览器的HTTPS-Only模式优先连接HTTPS而不是HTTP,从源头上杜绝第一次HTTP请求的信息泄露

  • Windows及Android推荐火狐浏览器(国际版安装包网盘

  • 火狐打开设置 -> 隐私与安全 即可找到HTTPS-Only模式

  • Safari默认连接HTTPS,推荐打开不安全连接警告:设置 - > APP -> Safari -> 隐私与安全性 -> 不安全连接警告

搭建中转代理

  • 某些情况下也需要大陆内的服务器做代理来更好的抗共享检测,入门篇暂不涉及,巨坑待填

4. 校园网是怎样判定网络共享的?

  • 前文提到,校园网共享检测实际上就是针对不同类设备合用同一接入方法的特制审查,现在实际应用的抗检测方式主要有以下四种:

  • User-Agent

    • 前文提到,分析User-Agent即可判别当前客户端的种类,而且即使加以注意总会有HTTP流量成为漏网之鱼,于是基于User-Agent的设备检测即成为可行方案,还是之前的例子:

    • Mozilla/5.0 (Linux; Android 12; HarmonyOS; CET-AL00; HMSCore 6.15.0.312) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.6.310 Mobile Safari/537.36 这是一台华为Mate 50使用华为内置浏览器发出的请求

    • Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0 这是一台Windows电脑使用Firefox浏览器发出的请求

    • 在上两个UA中,可以很容易获取到Windows NT 10.0以及Android 12等关键词,由此即可检测共享

  • TTL

    • 存活时间(Time To Live,TTL),指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。 每当数据包经过一个路由器时,其存活次数就会被减一。当其存活次数为0时,路由器便会取消该数据包转发。其设计目的是防止数据包因不正确的路由表等原因造成的无限循环而无法送达及耗尽网络资源。

    • 不同的操作系统的默认 TTL 值是不同的,一般来讲 Windows 是 128, macOS/iOS、Linux 是 64

    • 简单来讲,如果将Linux设备A的网络共享给Linux设备B,形成如下拓扑:Internet - A - B,由于B连接网络需要A作为路由器中转,故由B始发A转发的包会出现TTL值为 64 - 1 = 63 的情况,而A自己发出的包 TTL 仍为64,由此即可检测共享

  • TimeStamp

    • 现代设备的计时设备并不是特别精确,需要配合网络时间同步(NTP),如果同步间隔过长,两个设备间可能会存在0.X秒的差异,这种差异是可被察觉的,由此即可检测共享

  • Captive URL

    • 何为Captive URL?你一定碰到过这样的情况,连接到机构网络但仍未登录无法访问外部网络时设备会提示你无网络甚至帮你打开网络登录页面,这就是Captive URL的作用,现代操作系统一般会定时访问某个特定地址(如 30s 一次)来确认自己是否连接互联网,这个特定地址就叫做Captive URL,比如小米的Captive URL:https://connect.rom.miui.com/generate_204

    • 此URL厂商可自定义,各家手机厂均有自己的Captive URL,服务器地址均相对固定,可以此为初步检测

5. 写在最后