如何创建符合 GDPR 的 HTTP 服务器访问日志,重点关注远程 IP 匿名化和 nginx?

如何创建符合 GDPR 的 HTTP 服务器访问日志,重点关注远程 IP 匿名化和 nginx?

欧盟的《通用数据保护条例》(GDPR)和德国的 DSGVO 实施对个人相关数据(如 IP 地址)的处理非常严格。然而,这个问题不是关于 GDPR,但是如何使用 nginx HTTP 访问日志实施法规,同时保持在用户旅程中“识别”匿名用户的可能性(将用户旅程与其他用户旅程区分开来)。

我目前的实现是,我根本不记录远程 IP 和端口。我清除了上游/代理/等的环境变量,因此访问日志中没有远程 IP 和端口信息。

现在我面临的问题是,我需要遵循用户旅程的路径。我只是没有任何方法可以“识别”哪些请求属于哪个用户旅程。我想指出的是,我也不使用 cookie 等。

“识别” “匿名用户” 的传统方法是查找远程 IP 和日期信息。在同一天,同一个远程 IP 很可能是同一个用户。但是,如上所述,我不会记录远程 IP 和端口信息。而且我现在也不想要那样。

我目前的想法是使用远程端口和请求日期对远程 IP 地址进行哈希处理。我会获得日志的日期信息,但没有远程端口,因此我无法(除非进行大量暴力破解)恢复远程 IP,即与个人相关的数据。这种方法将有助于恢复一些水平用户旅程识别,这对我有很大帮助。

实现此方法的一般工作流程如下:

  1. 请求被 nginx 接受,
  2. nginx 使用远程 IP、远程端口和当前日期(例如)执行哈希运算,md5_hex("$remote_addr $remote_port $current_date")并将哈希值存储在新变量中(例如$remote_ip_anonymous),
  3. log_format 将具有 $remote_ip_anonymous 变量。

由于当前日期盐的存在,即使远程 IP 和远程端口相同,哈希值也会发生变化。当远程端口发生变化时,哈希值也会发生变化。因此,这应该符合 GDPR 或至少最低数据安全类别的要求,而实际远程 IP 将是 GDPR 的主要数据安全类别。

理论已经讲得够多了...我该如何实现这种远程 IP 匿名化?我是否必须使用 nginx Perl 模块或 Lua 模块,或者是否有另一种(更快)的方法来获取该哈希并将其存储到 nginx 变量中?

答案1

欧盟的《通用数据保护条例》(GDPR)是关于“保护自然人处理个人数据以及个人数据自由流动规则”的。它不是关于如何破坏 IT 系统。最好的方法是冷静下来,看看在个人数据保护方面什么可以做,什么不可以做。

从技术角度来说,Web 服务器处理浏览器/客户端的 IP 地址是必不可少的。如果没有这种能力,Web 服务器将无法向浏览器/客户端发送响应。

避免处理个人数据是不可能的(实际上当然有选择。例如,TOR 浏览器或使用匿名代理就是一种选择。但这必须由客户端完成。)

关于您的 Web 服务器和 GDPR 投诉设置,您应该:

  • 请注意,您的日志文件将在 7 天后被删除(巴伐利亚州数据保护局建议)
  • 将 IP 地址和其他收集的私人数据(例如浏览器识别字符串)纳入您的网站隐私声明中
  • 启用 HTTPS 并将所有 HTTP 流量重定向到 HTTPS(甚至使用 HSTS)
  • 注意设置安全服务器(参见2017 年强化新服务器的最佳实践

然而有正确的方法在 Nginx 中匿名化 IP 记录。我不推荐它,但它确实有效。

如何在7天后删除日志文件:

安装服务 log-rotation 后,您必须按如下方式更改 Nginx 配置文件...

vim /etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
            if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                    run-parts /etc/logrotate.d/httpd-prerotate; \
            fi \
    endscript
    postrotate
            invoke-rc.d nginx rotate >/dev/null 2>&1
    endscript
}

相关内容