跳转至

ipscrub: NGINX IP 地址匿名化模块

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-ipscrub
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-ipscrub

通过在 /etc/nginx/nginx.conf 顶部添加以下内容来启用模块:

load_module modules/ngx_ipscrub_module.so;

本文档描述了 nginx-module-ipscrub v1.0.1,发布于 2018 年 5 月 29 日。


ipscrub 是一个用于 nginx 日志文件的 IP 地址匿名化工具。它是一个 nginx 模块,生成基于 IP 的哈希。您可以使用此哈希链接来自同一来源的请求,而无需通过 IP 地址识别用户。

使用 ipscrub 时的 nginx 日志截图

安全模型

  1. 在初始化时,以及每个 PERIOD,使用 arc4random_buf() 生成 128 位的 salt
  2. 在每个请求中,生成掩码 IP 地址作为 HASH(salt ++ IP address)
  3. 记录掩码 IP 地址。

ipscrub 使用 arc4random 生成随机的 nonce(请参见 Theo de Raat 关于 arc4random 的演讲 以获取概述)。在 Linux 上,这需要安装 libbsd(在 Ubuntu/Debian 上为 libbsd-dev 包)。

另外请注意:生成的哈希将在每个 PERIOD 过渡时发生变化,因此您只能在每个 PERIOD 内保持连续性。但由于用户可以随时在网络之间切换(例如,wifi -> 移动数据),即使您存储原始 IP 也会出现此类问题。

威胁模型

  1. 政府向您提供一个 IP 地址,并要求识别与该地址对应的用户。
  2. 政府通过电子邮件地址识别用户,并要求提供他们在某个时间点的 IP 地址。

在威胁场景 (1) 中,目标是计算与目标 IP 地址对应的掩码 IP。这只有在当前 PERIOD 结束之前提出要求时才可能实现。

场景 (2) 受到防御,因为服务器操作员不知道 salt,并且无法根据请求时间戳推断出它,因为 salt 是从仅存储在内存中的 nonce 生成的。在这种情况下,服务器操作员必须是同谋,但这更简单地通过服务器操作员仅记录未掩码的 IP 来实现。因此,这种安全/威胁模型并不能防止恶意的服务器操作员,但这并不是重点。它确实防止了诚实的服务器操作员在威胁场景 (1) 和 (2) 中被迫提供信息。

使用

配置

在您的 nginx.conf 中,

  1. 在顶层,通过添加行 load_module ngx_ipscrub_module.so; 加载模块(注意:仅在您将其构建为动态模块时)。
  2. 设置 ipscrub_period_seconds <NUM SECONDS PER PERIOD>;(可选)。
  3. 在您的 log_format 指令中,将 $remote_addr 替换为 $remote_addr_ipscrub
  4. 重新加载您的 nginx 配置。

注意:nginx 可能仍会在错误日志中泄漏 IP 地址。如果这让您担忧,请禁用错误日志或定期清除日志。

运行测试

make test

更新日志

  • 1.0.1 修复了对解密哈希 IP 的漏洞(感谢 @marcan
  • 1.0.0 初始发布

GDPR

GDPR 于 2018 年 5 月 25 日生效。它立法处理有关用户的个人数据,包括 IP 地址。

来自 https://www.eugdpr.org/gdpr-faqs.html

什么构成个人数据?

任何与自然人或“数据主体”相关的信息,可以直接或间接识别该人。它可以是姓名、照片、[...] 或计算机 IP 地址等任何内容。

ipscrub 生成的哈希让您能够通过 IP 地址关联 nginx 日志条目,而无需实际存储 IP 地址,从而减少您的 GDPR 风险。

YAGNI

您为什么还要记录 IP 地址呢?You Ain't Gonna Need It。如果您想要地理定位,只需结合使用 MaxMind 的 GeoIP 模块ipscrub

GitHub

您可以在 nginx-module-ipscrub 的 GitHub 仓库 中找到此模块的其他配置提示和文档。