公司能审核你上过哪些网站,靠的不是偷偷装了监视软件,而是"你所有的网页请求本来就要经过它那一道门"——这台门就是 4.8 讲的正向代理。它把出口收成一个点之后,天然就拿到了三件东西:记录(谁·何时·访问了哪个域名,日志还能留存备查)、管控(按名单放行或拦下,按人按部门分策略)、统计(时长与流量)。但要记住它的能见度有一条硬边界:HTTP 明文下它连你的 URL 路径、查询串、Cookie、表单内容都看得见;HTTPS 加密之后它只剩"信封"——域名、时间、流量大小照旧知道,路径和正文看不到了。想突破这条边界,只有在每台电脑上装公司根证书做 SSL 解密,而这条路有明确的合规门槛。
4.8 讲的是代理"是什么"(站在应用层、替你去取、看得懂 HTTP),本节讲的是它在公司里"拿去干什么"。同一个东西的两副面孔:
- 审计能看到哪些字段,完全由 URL 的结构和 HTTP 的规矩决定——所以 4.4 拆的那六段、4.5 讲的那张请求报文,就是这份审计表的"字段清单"
- HTTPS 那扇门是 4.8 结尾留下的(
CONNECT隧道、加密为什么让代理失明),本节把它正面讲了 - 代理的日志之所以有意义,是因为它收的是自己的员工、自己的出口——这是 1.3 那张公司网络图给的便利
一、为什么"审核上网"这件事,一定要先有代理
先问一个根本问题:公司凭什么知道你在上班时间逛了什么网站?
答案朴素得有点意外:不是它有什么特别的手段,而是你上网的每一趟车,本来都要从它门口过。
回顾一下公司网络长什么样(收 1.3):
员工电脑 ──┐
员工电脑 ──┼──→ [ 公司内部 LAN ] ──→ [ 出口 ] ──→ 互联网
员工电脑 ──┘ ↑
所有流量都必须经过这一个点
公司内部用的是私有地址(收 3.13),要出门必须换成全局地址(收 3.14)。出口只有一个——这是公司网络的设计决定的,不是谁额外加的。
代理服务器就装在这个出口上。于是就出现了这样一条逻辑:
收口 → 收口之后就有了唯一的记录点。
如果每台电脑各拉一根宽带,谁也管不了——所以企业做的第一件事是"把出口收成一个点",而这个点就是代理(或兼着代理功能的设备)。
这也解释了为什么手机连上公司 Wi-Fi 之后,同样在这套审核范围内:它走的是同一个出口。
二、"审核"到底审什么——四层能见度
审核不是一件事,是从粗到细的四层。越往下走,能看到的越细,但离开加密的保护也越近:
| 层次 | 审什么 | 靠什么看到 | 举例 |
|---|---|---|---|
| 第一层 | 访问了哪个网站 | 请求行里的主机名(明文 HTTP 的完整 URL / HTTPS 的 CONNECT 行) |
上班时间在逛购物网站 |
| 第二层 | 什么时候、多久、多少流量 | 连接建立与断开的时间、字节计数 | 凌晨 2 点有台机器持续往外传了 5 GB |
| 第三层 | 看了哪些具体页面 | 明文 HTTP 时的 URL 路径与查询串 | 搜索框里搜了"某某公司 面试"(明文下能看到,HTTPS 下看不到) |
| 第四层 | 页面里是什么内容 | 明文正文;HTTPS 需 SSL 解密 | 把内部设计文件贴到了外部网盘 |
第一、二层在 HTTPS 时代照样有效;第三、四层只剩 HTTP 明文站点了。这个分层是本节最该记住的骨架——下面几节都在这个骨架上展开。
三、两种审核方式:事后看,还是事前拦
3.1 事后审计——靠日志
代理每处理一次请求,都能往日志里写一行:时间、来源机器(或账号)、目标主机、路径、结果、流量大小。
它的用途:
- 出事追责:文件外泄了,查"这几天有谁访问过外部网盘"
- 合规留存:不少行业和等级保护要求网络日志留存不少于 6 个月(这正是"日志要落盘、要能查"的现实理由)
- 发现异常:某台机器半夜流量暴涨、某个账号反复被拒绝——都是排查线索
收 1.7 讲过服务器管理三件事:部署、监控、备份。"记录日志"就是监控那一条;而"日志要能查得到、留得住",就是备份那一条。审计系统本身也是一套要被管理的系统。
3.2 事前管控——靠名单和策略
日志是"回头查",管控是"当场拦"。常见三种:
| 做法 | 怎么运作 | 特点 |
|---|---|---|
| 黑名单 | 已知的不良站点名单,命中就拦 | 灵活,但名单永远滞后于新站点 |
| 白名单 | 只放行名单内的,其余全拦 | 最严,但容易误伤正常业务网站 |
| 分类 + 分人策略 | 按类别(购物/游戏/视频/招聘)+ 按部门给不同规则 | 现实里最常见:研发能上技术文档站,财务不放开网银以外的 |
真实企业里最常见的形态是两条一起用:策略挡在前面(当场拦),日志记在后面(事后查)。
四、代理审核 vs 防火墙审核(本节最容易混的一处)
这也是 4.8 那张表的一个延伸。两者的差别不在"谁更厉害",而在看的东西根本不是一个层面的:
| 防火墙 | 代理服务器 | |
|---|---|---|
| 在哪一层 | 网络层 / 传输层 | 应用层 |
| 看什么 | IP 地址、端口号 | 域名、URL、路径、内容 |
| 能区分同一个 IP 上的两个网站吗 | 不能(都是同一个 IP) | 能(域名写在请求里) |
| 能区分同一个网站的两个页面吗 | 不能 | 明文时能(路径写在请求行里) |
| 拦什么 | 拦 IP、拦端口 | 拦域名、拦路径、拦关键词、按类别拦 |
| 能不能做缓存 | 不能 | 能(收 4.6) |
一句话分:
防火墙看"去哪儿、走哪个门";代理看"进了哪个房间、拿了什么东西"。
现实里现在很少是两台独立设备了——通常叫上网行为管理或下一代防火墙(NGFW),一台机器同时干这两层的活。但原理还是那两层,别被产品名字绕晕。
五、HTTPS 带来的那一刀(本节重点)
4.8 结尾留了句话:加密让代理失明。这里把它讲透。
回想 HTTPS 穿过代理的样子(收 4.8):
浏览器 ──→ 代理: CONNECT example.com:443
代理 ──→ 网站: (建立隧道)
之后所有字节都是加密的 ──→ 代理只能看字节流,看不懂内容
于是审核的能见度被切成两半:
| 还能知道 | 不知道了 | |
|---|---|---|
| HTTPS 之下 | 域名(CONNECT 那行里写着)、访问时间、时长、流量大小、访问频次 |
URL 路径、查询串、Cookie、表单内容、页面正文 |
| HTTP 明文 | 上面全部 + 路径、查询串、Cookie、表单、正文 | —— (本来就没有) |
结论很实际:在今天的网络里,"你访问了哪个网站"基本瞒不住;"你具体看了哪一页、填了什么"在 HTTPS 下看不到。
5.1 那些"绕过"的想法,为什么多半不管用
这是很多人凭直觉会想的路子,逐条对照上面的表就清楚了:
| 想法 | 为什么不灵 |
|---|---|
| 用 IP 直连,不用域名 | 一个 IP 上常常挂着很多网站(Host 头才决定给你哪个,收 4.4);直连 IP 大多报错。而且流量照样经过代理 |
| 换 DNS(DoH / DoT) | DNS 只负责"域名换 IP"(收 3.21)。DNS 那一步藏住了,代理这里的 CONNECT 行照样写着域名 |
| 开无痕模式 | 无痕只管你这台电脑不留记录。代理那侧的日志一条不少(这也是 4.7 说的:Cookie 存在你这边,但审计记录存在它那边) |
| 用手机热点 | 确实绕过了公司出口——但违反公司规定;而且公司配发的手机常常装了管理配置(MDM),策略照样下发 |
| 换个浏览器 / 装个插件 | 换的是客户端软件,走的是同一个出口。代理不关心你用什么浏览器 |
5.2 想突破这条边界:SSL 解密(中间人)
想看到 HTTPS 里的内容,只有一招:代理当着你的面把加密拆开。
浏览器 ──(公司证书)──→ 代理 ──(真证书)──→ 网站
↑ 这里解密 → 检查 → 再加密发出去
它怎么做到?途径是每台电脑上都装了公司的根证书:
- 代理给浏览器的证书,是用公司自己的 CA 签发的(因为你的电脑信任了这个根证书,所以浏览器不报警)
- 代理用真证书去连真网站,两边各谈一次加密
- 中间明文过一遍——这就是它能审内容的原因
技术上的痕迹很好认:
- 在浏览器里点那把锁 → 看证书颁发者,不是公共 CA,而是公司的名字
- 有些 App 做了证书绑定(pinning),会直接连不上——这是它"只认自家证书"的自我保护
- 在公司网络里"某个 App 突然用不了",有时就是这个原因
内容级监控比"记域名"敏感得多,涉及员工个人信息处理。合规上通常要求:
- 事先明确告知(员工手册、入职协议、内部制度公示),而不是悄悄上线
- 目的正当、范围最小:为了安全与合规,不是"看看大家在干嘛"
- 有期限、有权限:日志不是永久堆着,也不是谁都能翻
换句话说:企业有网络管理权,但这份权利是有边界、有程序的。
六、代理装在哪里:本地部署 vs 云代理(收 1.8 的老账)
| 本地部署代理 | 云代理 / 安全访问服务 | |
|---|---|---|
| 装在哪 | 公司机房里,接在内网出口 | 云端,员工无论在哪都连过去 |
| 管得到谁 | 在办公室连内网的人 | 在家、出差、连手机热点的人也管得到 |
| 谁维护 | 自己养设备、自己升级 | 厂商维护,按量或按人付费 |
| 灵活度 / 可控度 | 高(能随便定制) | 低(跟着厂商的能力走) |
这正好是 1.8 那条老规矩的又一次出现:租得越多、管得越少。云代理把"出口"从一个固定的地点变成了一个服务——代价是策略能力受厂商限制。
七、站到员工这一侧:几句实在话
这一节讲的是"公司怎么审核",但真正该带走的是这几条判断:
- 无痕 ≠ 隐身。它清的是本机的浏览历史和 Cookie,管不到出口那台机器的日志。
- 公司的管理边界是"设备与出口",不是"你的身份"。用公司网络、公司设备处理私事,就落在这套边界里;要分清楚,用自己的流量、自己的设备处理私事——这不是躲,是把职责和私事的边界划清楚。
- "能记"不等于"随便记"。日志本身也是个人信息,也是证据:留存期限、访问权限、销毁流程,都该有规矩。一个公司怎么对待自己的日志,其实反映了它怎么对待员工。
- HTTPS 已经在事实上保护了绝大多数隐私内容。今天主流网站几乎全站 HTTPS,公司代理能拿到的多半只是"访问了哪个域名"这一层——别再以为公司在读你发的每一条消息,那不是常态。
八、动手 Demo(Demo46):在本机搭一套最小版"上网审计"
思路:把 4.8 那个只会说一句话的迷你代理,升级成带时间戳、会写日志的版本。它依然不真转发,只做一件事:把每一次请求的时间和目标记下来——这恰好就是审计系统最核心的那一块。
第 1 步 · 新建 mini_audit.py
import socket
import threading
import datetime
def handle(conn):
data = conn.recv(65535)
if not data:
conn.close()
return
first = data.split(b"\r\n", 1)[0].decode("utf-8", "ignore")
now = datetime.datetime.now().strftime("%H:%M:%S")
line = "[" + now + "] " + first
print(line) # 屏幕上实时看到
with open("audit.log", "a", encoding="utf-8") as f:
f.write(line + "\n") # 落盘留存
if first.startswith("CONNECT"):
# HTTPS:代理这边根本没有路径可看,只能拒绝隧道的建立
conn.sendall(b"HTTP/1.1 502 Bad Gateway\r\n\r\n")
else:
body = "这部代理只干一件事:把看到的第一行记下来。\n请去看脚本窗口和 audit.log。\n".encode("utf-8")
head = ("HTTP/1.1 200 OK\r\n"
"Content-Type: text/plain; charset=utf-8\r\n"
"Content-Length: " + str(len(body)) + "\r\n\r\n")
conn.sendall(head.encode() + body)
conn.close()
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("127.0.0.1", 8888))
s.listen(5)
print("审计代理已在 127.0.0.1:8888 等你(Ctrl+C 退出)")
while True:
conn, _ = s.accept()
threading.Thread(target=handle, args=(conn,), daemon=True).start()
第 2 步 · 起起来
python mini_audit.py
第 3 步 · 走一次明文 HTTP(看得见全部)
curl -x http://127.0.0.1:8888 "http://example.com/a/b?q=1"
日志里会出现:
[21:03:14] GET http://example.com/a/b?q=1 HTTP/1.1
域名、路径、查询串,一字不落。 这就是 4.4 讲的"路径+查询串装进请求行"在审计视角下的样子。
第 4 步 · 走一次 HTTPS(只剩信封)
curl -x http://127.0.0.1:8888 https://example.com
日志里会出现:
[21:03:20] CONNECT example.com:443 HTTP/1.1
这就是本节的核心现场。 两行日志放在一起看,差别赤裸裸:一条有路径和查询串,另一条只有一个主机名加端口。
curl 会报"502"——这是正常的:我们的脚本没有真的去开隧道,只把这一行记下来了。
第 5 步 · 打开 audit.log
type audit.log
按时间排下来的这几行,就是一份最小版的上网审计记录。企业那套设备记的也是这些字段,只是更细、更全、能查得更久。
第 6 步 · 用浏览器走一次,看日志"刷屏"
把浏览器代理指到 127.0.0.1:8888,访问一个 http:// 开头的页面(做完立刻把代理设置关掉)。
脚本窗口会一下子打印好多行——每一个 CSS、每一个 JS、每一张图片都是单独一行。
这不是故障,这是 4.1 那句"一次打开网页从来不是一次请求"在审计侧的再次显形:日志的量级不是按"次"算的,是按"请求"算的。这也解释了为什么审计系统的存储规划,往往比想象中大得多。
九、30 秒实验
- 30 秒:
type audit.log—— 一眼看完那份记录,找找有没有"路径"。 - 30 秒:把第 3 步和第 4 步的两行并排对齐看 —— 差在哪儿?就差在"有没有路径"。这一眼就是"HTTP 明文 vs HTTPS"的全部差别。
- 30 秒:用浏览器走一次(记得改回代理设置)—— 看日志一屏刷出多少行,感受一下"一次点击 = 几十条记录"。
十、常见误区
- "无痕模式能避开公司审计。" —— 无痕只清本机记录;代理那侧的日志一条不少(收 4.7 同一规律:记录在哪一侧,就归哪一侧管)。
- "公司只能看到我访问的域名,看不到具体页面。" —— 明文 HTTP 下能看到路径和查询串(4.4 那条"路径+查询串装进请求行")。只有 HTTPS 才退化成"只看得到域名"。
- "开了 HTTPS,公司就彻底看不见了。" —— 域名、时间、时长、流量大小照旧全暴露;装了根证书还能拆开看内容。
- "换个 DNS 就查不到我上了哪个站。" —— DNS 只管"域名换 IP"(收 3.21)。
CONNECT行里的域名照样露。 - "用了代理就查不到是谁。" —— 恰好反了:代理的日志通常精确到哪台机器、哪个账号。代理"匿名"那面是相对外部网站而言的(收 4.8)。
- "代理和防火墙是一回事。" —— 防火墙看 IP / 端口(网络层),代理看域名 / URL / 内容(应用层)。同一个 IP 上的多个网站,防火墙分不清,代理能。
- "SSL 解密想装就装。" —— 内容级监控涉及个人信息处理,需要事先告知、目的正当、范围最小、有期限有权限。
- "手机连公司 Wi-Fi 就不受管。" —— 走的是同一个出口,域名层面照样看得见。
- "公司审计员工上网是违法的。" —— 在合理必要、事先告知、用于内部管理的前提下,企业有网络管理权;但内容级监控(SSL 解密)的合规要求高得多,两者不是一回事。
- "日志记了就记了,留着总没坏处。" —— 日志本身既是个人信息也是证据:无期限堆积既是安全风险,也是合规风险。该有的规矩是留存期限、访问权限、到期销毁。
十一、动手自测
- 公司为什么能审核员工的上网记录?它的"资格"从哪来?
- 审计的能见度分四层,分别是哪四层?哪两层在 HTTPS 之下仍然有效?
- 事后审计和事前管控分别靠什么?黑名单和白名单各自的弱点是什么?
- 同一个 IP 上挂着两个网站,防火墙能区分吗?代理能吗?为什么?
- HTTPS 穿过代理时,代理还能知道什么、不知道什么?
- "换 DNS 就能藏住访问了哪个站"这个想法错在哪?
- SSL 解密靠什么手段做到?为什么浏览器不报警?
- SSL 解密在合规上有什么门槛?
- 云代理比本地代理多管到了谁?这对应 1.8 的哪条规律?
- 为什么说"日志本身也是个人信息"?
答案:
① 因为公司内部的出口只有一个(收 1.3):所有网页请求都要经过出口上的那台代理(收 4.8)。"收口"就产生了唯一的记录点——不是它手段特别,是位置特别。② 四层:访问了哪个网站 / 什么时间、多久、多少流量 / 看了哪些具体页面 / 页面里是什么内容。在 HTTPS 之下,前两层仍然有效(域名、时间、流量大小都还在),后两层只剩 HTTP 明文站点。③ 事后审计靠日志(追责、合规留存、发现异常);事前管控靠名单与策略。黑名单的弱点是名单永远滞后于新站点;白名单的弱点是容易误伤正常业务网站。④ 防火墙区分不了——它只看 IP 和端口,同一个 IP 上的两个网站对它是同一个目标;代理能区分,因为域名写在请求里(这也正是 4.8 说的"它看得懂 HTTP")。⑤ 能知道:域名(CONNECT 那行里)、访问时间、时长、流量大小、频次;不能知道:URL 路径、查询串、Cookie、表单内容、正文。⑥ DNS 只解决"域名换 IP"(收 3.21),藏住的是解析这一步;而代理看到的 CONNECT example.com:443 里,域名是明文写在请求里的。⑦ 通过在每台电脑上安装公司的根证书:代理用自家 CA 签发的证书给浏览器,浏览器因为信任这个根证书所以不报警;代理再用真证书连真网站,中间明文过一遍。⑧ 需要事先明确告知(制度/协议)、目的正当、范围最小、有期限有权限。企业有网络管理权,但内容级监控的门槛高得多。⑨ 多管到了在家、出差、连手机热点的人(把出口搬到云端,不再局限于办公室内网)。对应 1.8 的"租得越多、管得越少":省了维护,但策略能力受厂商限制。⑩ 因为它记录了具体某个人的行为轨迹,属于个人信息;同时它又是证据。所以要有留存期限、访问权限与销毁流程——否则从"管理工具"变成"风险源"。
十二、下一步学什么
- ☑ Web浏览器不仅仅是用来浏览网页的(Web应用) —— 本节把"浏览器是个应用平台"讲完了:给你看的=文档,给你用的=Web 应用;界面与交互在浏览器跑、规则与数据在服务器跑(所以前端的判断永远不算数);"整页 document"与"一小段 fetch"就是网页与应用的分界。也顺手补上 4.1 那句话的后半句——那几十上百个请求里,很多根本不是你在点。
相关笔记
- 对Web网站的访问进行代理(代理服务器) —— 上一节:代理"是什么";本节讲它"拿去干什么"
- Web网站的地址(URL) —— 审计能看到的字段,就是 URL 的那几段:主机名、路径、查询串
- 请求Web网站的文件(HTTP) —— 请求行里的"路径+查询串",正是审计日志可见内容级信息的前提
- 记录Web网站的文件(HTTPCookie) —— 明文下代理连那张纸条的内容也看得见;记录存在哪一侧,就归哪一侧管
- 传输Web网站的文件(HTTP响应) —— 代理缓存与审计是同一次经过留下的两笔账
- Web网站是如何构建的(Web网站) —— "一次打开网页几十上百次请求",在审计日志里就是一屏的行数
- 网络的电话簿(域名解析、主机名、DNS) —— 换 DNS 为什么藏不住访问的域名
- 从私有网络到互联网间的通信(NAT) —— 出口那一步换地址的是 NAT,记录行为的是代理,两者常在同一台设备上
- 互联网中使用的地址与私有网络中使用的地址(全局地址、私有地址) —— 内网私有地址、出口换全局地址,是"收口"能成立的地址基础
- 根据端口号分配数据到应用程序(端口号、已知端口号) ——
CONNECT example.com:443里的 443,就是 HTTPS 的已知端口 - 公司内部网络的结构(LAN和WAN) —— "出口只有一个"这张图,是审计能做的前提
- 运行和管理服务器(服务器、云服务、内部部署) —— 日志属于"监控"那件事,留存与可查属于"备份"
- 使用服务器的哪个部分?云服务的分类(SaaS、PaaS、IaaS) —— 云代理:把出口搬到云上,租得越多管得越少
- 用于构建网络的设备(网络设备) —— 设备按层归队:上网行为管理是应用层的事