首页/安全/取证与溯源速查/正向代理日志分析
日志溯源53 条

正向代理日志分析

Squid 访问日志按请求逐条记录客户端、目标与结果码:用于还原内网主机的外联行为与下载动作。

取证与溯源速查安全更新于 2026-10-13

正向代理日志分析

Squid 的 access.log 按请求逐条记录客户端、目标与结果:默认格式包含请求时间(Unix 时间戳)、耗时、客户端 IP、结果码与状态、响应字节数、请求方法、URL。它能把内网主机的上网与下载行为还原出来,是判断“哪台内网机器下载了什么、访问了哪里”的关键数据。但要注意覆盖面:明文 HTTP 能看到完整 URL,HTTPS 走 CONNECT 方式时只能看到目标域名与端口,路径不可见。

基本信息

适用平台部署 Squid 代理的 Linux/Unix 环境(含企业上网代理)
日志位置/var/log/squid/access.log(Debian 系 /var/log/squid3/ 或发行版默认路径)
默认字段时间戳 / 耗时 / 客户端IP / 结果码状态 / 字节数 / 方法 / URL / 用户名 / 对端 / 内容类型
常见结果码TCP_HIT 与 TCP_MISS(缓存命中与回源)、TCP_DENIED(被策略拒绝)、TCP_TUNNEL(隧道,常见于 HTTPS)
配置影响自定义 logformat 会改变字段顺序,解析前先确认日志格式配置

典型使用场景

  • 确认某台内网主机是否访问过恶意域名或下载了可疑文件
  • 统计下载类请求的字节数,评估数据外带的规模
  • 从被拒请求中识别绕过策略的尝试(访问被墙目标、使用非标准端口)
  • 识别代理上的异常客户端:非业务网段的主机出现在代理日志中
  • 为钓鱼事件补证:用户点击链接后的实际访问与下载行为

检索与聚合

检索与聚合
# 按客户端与 URL 聚合访问频次
awk '{print $3, $7}' access.log | sort | uniq -c | sort -rn | head -20
# 找下载量最大的请求(评估外带规模,第 5 列为字节数)
awk '{print $5, $7}' access.log | sort -rn | head -15
# 回源请求(未被缓存命中,实际访问了外部)
grep 'TCP_MISS/200' access.log | awk '{print $1, $7}' | head
# 被策略拒绝的访问尝试
grep 'TCP_DENIED' access.log | awk '{print $3, $7}' | sort | uniq -c | sort -rn | head -10
# HTTPS 隧道请求只能看到目标域名与端口
awk '$6=="CONNECT"{print $3, $7}' access.log | sort | uniq -c | sort -rn | head

结果码与字段读法

项含义判读要点
时间戳Unix 时间戳(秒)需转换后与其它日志对齐,注意为 UTC
客户端 IP发起请求的内网主机结合 DHCP 与资产台账映射到具体机器
结果码缓存命中或回源、拒绝等状态TCP_MISS 表示真实回源访问,TCP_HIT 为缓存响应
字节数响应体积异常大的单次响应往往是下载行为
方法GET/POST/CONNECT 等CONNECT 为 HTTPS 隧道,看不见路径
URL请求地址(HTTP 可见完整路径)含敏感参数时引用前先脱敏
URL 里经常带用户名、会话标识与邮箱等敏感参数;报告引用前先脱敏,只保留域名与必要的路径片段。
缓存命中与回源条目要区分统计,否则同一资源会被重复计数,访问量评估会明显偏高。

易错点

  • 按默认字段位置写 awk 却不核对格式:自定义 logformat 会改变列序,解析结果会整体错位
  • 把 HTTPS 的 CONNECT 记录当作完整访问证据:只能得到域名与端口,具体路径与内容不可见,需要结合端点侧记录
  • 把缓存命中次数当访问次数:TCP_HIT 是代理直接响应,真实外联要看 TCP_MISS 与回源记录
  • 忽略时间戳格式:Unix 秒需要转换且通常为 UTC,直接按本地时间解释会造成数小时偏差
  • 在报告中直接粘贴含敏感参数的 URL:会造成信息二次泄露,引用前必须脱敏

数据来源与参考

  • Squid 文档(access.log 格式)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌