# 本站访问日志现已公开发布
我们始终认为,TUNA 开源镜像站的访问日志是一笔宝贵的数据。有若干上游向我们表示,希望能够获取对其镜像的访问数据,以便进行分析和统计。我们相信,这些访问日志也可以帮助到那些对于镜像站的运行有兴趣的研究者。基于上述愿意,我们一直以来有愿望公开这些访问日志,以便大家研究。但是在访问日志中,包含有能够追踪到用户的 IP 地址信息,我们不希望该信息能够被泄露出去。然而,完全抹除该信息,则会使得这部分数据的研究价值降低。
为了解决这一矛盾,我们对公开的日志中的 IP 地址信息进行了一定的变换,以确保用户的隐私不被泄露的同时,尽可能减少数据研究价值的减损。具体的变换规则是:保持 IPv4 地址的前 24 位或 IPv6 地址的前 48 位不变,将 IP 地址伪随机地映射至其他地址,该映射关系在 30 秒内保持固定,每隔 30 秒发生一次改变。
我们目前共有两个后端服务器,日志的访问地址分别是 https://mirrors.wars.cat/logs/neomirrors/ 和 https://mirrors.wars.cat/logs/nanomirrors/。日志的格式是:
$fake_remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$sent_http_content_type" "$http_referer" "$http_user_agent" - $scheme
FAQ
-
Q: 这对于镜像站用户的使用有何影响?
A: 没有任何影响。
-
Q: 为何要保留 IP 地址的前若干位?
A: 这样可以保留 IP 地址的大致的地理信息,以便用于分析。
-
Q: 为何在一段时间内固定映射关系?
A: 这样可以在这段时间内将同一个 IP 地址发送的请求映射至同一 IP 地址,以便用于分析。
-
Q: 为何每隔一定时间改变映射关系?
A: 由于 IP 地址(尤其是 IPv4 地址)空间有限,这样做可以避免产生长期固定的映射关系,以免通过枚举来获知该映射关系。
-
Q: 具体变换算法是什么?
A: 首先,该算法的全局参数如下:
secret
:二进制秘密数据,作为密钥使用;mask_len
:保留的 IP 地址位数,对于 IPv4 地址,取 24;对于 IPv6 地址,取 48;step_time
:保持映射关系的时间(单位:秒),这里取 30。
该算法的执行步骤可以描述如下:
- 令
ip
为访问者 IP 地址,len
为其位数; - 取当前以秒为单位的 Unix 时间戳
time
; - 将
time
除以step_time
,商向下取整; - 取缓冲区
buf
,并将ip
填入; - 以无符号大端序 32 位整数的格式,向
buf
内追加写入time
; - 以
secret
为密钥,对buf
执行HMAC-SHA1
算法,所得哈希值的前len
位记为h
; - 用
ip
的前mask_len
位代替h
的前mask_len
位; h
即为变换后的 IP 地址。