Announce open log

Signed-off-by: 王邈 <shankerwangmiao@gmail.com>
This commit is contained in:
王邈 2019-07-27 00:46:17 -04:00
parent 092d037b6a
commit cdc62d5657
No known key found for this signature in database
GPG Key ID: B031E3CA7BFED96E
2 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,54 @@
---
layout: news
title: 本站访问日志现已公开发布
date: 2019-07-26
author: Miao Wang
category: news
---
我们始终认为TUNA 开源镜像站的访问日志是一笔宝贵的数据。有若干上游向我们表示,希望能够获取对其镜像的访问数据,以便进行分析和统计。我们相信,这些访问日志也可以帮助到那些对于镜像站的运行有兴趣的研究者。基于上述愿意,我们一直以来有愿望公开这些访问日志,以便大家研究。但是在访问日志中,包含有能够追踪到用户的 IP 地址信息,我们不希望该信息能够被泄露出去。然而,完全抹除该信息,则会使得这部分数据的研究价值降低。
为了解决这一矛盾,我们对公开的日志中的 IP 地址信息进行了一定的变换,以确保用户的隐私不被泄露的同时,尽可能减少数据研究价值的减损。具体的变换规则是:保持 IPv4 地址的前 24 位或 IPv6 地址的前 48 位不变,将 IP 地址伪随机地映射至其他地址,该映射关系在 30 秒内保持固定,每隔 30 秒发生一次改变。
我们目前共有两个后端服务器,日志的访问地址分别是 [https://mirrors.tuna.tsinghua.edu.cn/logs/neomirrors/](/logs/neomirrors/) 和 [https://mirrors.tuna.tsinghua.edu.cn/logs/nanomirrors/](/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。
该算法的执行步骤可以描述如下:
1. 令 `ip` 为访问者 IP 地址,`len` 为其位数;
2. 取当前以秒为单位的 Unix 时间戳 `time`
3. 将 `time` 除以 `step_time`,商向下取整;
4. 取缓冲区 `buf`,并将 `ip` 填入;
5. 以无符号大端序 32 位整数的格式,向 `buf` 内追加写入 `time`
6. 以 `secret` 为密钥,对 `buf` 执行 `HMAC-SHA1` 算法,所得哈希值的前 `len` 位记为 `h`;
7. 用 `ip` 的前 `mask_len` 位代替 `h` 的前 `mask_len` 位;
8. `h` 即为变换后的 IP 地址。

View File

@ -3,6 +3,7 @@
echo '# robots.txt for https://mirrors.tuna.tsinghua.edu.cn' > robots.txt
echo 'User-agent: *' >> robots.txt
echo '' >> robots.txt
echo 'Disallow: /logs' >> robots.txt
curl -s https://mirrors.tuna.tsinghua.edu.cn/static/tunasync.json | jq -r '.[] | .name' | uniq | while read name; do
[[ -z ${name} ]] && continue