Nginx

如何創建符合 GDPR 的 HTTP 伺服器訪問日誌,重點關注遠端 IP 匿名化和 nginx?

  • July 11, 2018

歐盟的通用數據保護條例 (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 變數中?

歐盟的通用數據保護條例 (GDPR) 是關於“在處理個人數據方面保護自然人以及與個人數據自由流動相關的規則”。這與如何破壞 IT 系統無關。最好的方法是冷靜下來,看看在個人數據保護方面什麼可以,什麼不可以。

Web 伺服器處理瀏覽器/客戶端的 IP 地址在技術上是必不可少的。如果沒有這種能力,Web 伺服器將無法將響應發送回瀏覽器/客戶端。

避免處理個人數據是沒有選擇的。(實際上當然有選擇。例如TOR瀏覽器或使用匿名代理將是一個選項。但這必須由客戶端完成。)

關於您的網路伺服器和 GDPR 投訴設置,您應該:

  • 請注意,您的日誌文件將在 7 天后被刪除(巴伐利亞數據保護局的建議)
  • 在您的網站隱私聲明中包含 IP 地址和其他收集的私人數據(例如瀏覽器辨識字元串)
  • 啟用 HTTPS 並將所有 HTTP 流量重定向到 HTTPS(甚至使用 HSTS)
  • 注意設置安全伺服器(請參閱2017 年強化新伺服器的最佳實踐

但是,在 Nginx 中有適當的匿名 IP 日誌記錄方法。我不會推薦它,但它有效。

如何在 7 天后刪除日誌文件:

使用已安裝的服務日誌輪換,您必須按如下方式更改 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
}

引用自:https://serverfault.com/questions/920455