From cdc62d5657e42eb9daf72d5c95f71139f79c7267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=82=88?= Date: Sat, 27 Jul 2019 00:46:17 -0400 Subject: [PATCH] Announce open log MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王邈 --- _posts/news/2019-07-26-release-logs.md | 54 ++++++++++++++++++++++++++ gen_robot.sh | 1 + 2 files changed, 55 insertions(+) create mode 100644 _posts/news/2019-07-26-release-logs.md diff --git a/_posts/news/2019-07-26-release-logs.md b/_posts/news/2019-07-26-release-logs.md new file mode 100644 index 0000000..45c2c39 --- /dev/null +++ b/_posts/news/2019-07-26-release-logs.md @@ -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 地址。 diff --git a/gen_robot.sh b/gen_robot.sh index 8beafa8..05329ca 100755 --- a/gen_robot.sh +++ b/gen_robot.sh @@ -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