Nginx

使用舊日誌文件上的匿名 IP 配置 NGINX 以實現 GDPR(= RGPD、DSGVO)合規性

  • August 27, 2019

歐洲通用數據保護條例(GDPR) 旨在保護最終使用者的隱私。在許多其他後果中,系統管理員因此有義務以一種方式配置他們的系統,即他們不會在不必要的長時間內儲存 IP 地址,而不是未經同意等。這是因為 IP 地址被視為個人數據。

然而,根據 GDRP,有充分的理由從一開始就匿名 IP 地址。例如,需要保護系統免受攻擊的手段(例如,為了保護數據庫中許多使用者的個人數據)。例如,如果您的系統目前受到攻擊,並且該攻擊源自一個特定的 IP 地址,您需要能夠阻止該 IP(可能只是暫時的)。您可能還希望能夠檢查攻擊何時開始,即來自該 IP 的那些錯誤請求何時開始。此外,您通常希望將日誌文件保留更長的時間,以便您可以分析它們(如果它們不包含個人數據,這完全可以)。

所以這些是相互競爭的利益。一個簡單的折衷辦法是在日誌文件中僅將原始 IP 地址儲存一小段時間,將舊日誌文件中的 IP 地址匿名化,並且——當然——將這些事實告知您的使用者/訪問者(在您的網站中)隱私聲明)。

**如何為這種符合 GDPR 的設置配置 NGINX,它不會一開始就匿名所有 IP 地址?**有即時/直接匿名 IP 的討論和解決方案(例如這裡);但是我怎樣才能只為舊日誌文件設置匿名化

警告:IANAL

人們可以輕鬆地設置這樣一種混合設置,以獲得非匿名的短期日誌和匿名的長期日誌。訣竅是讓 logrotate 輪換你的 NGINX 日誌,並在輪換過程中匿名化它們。這也將匿名化的(小)性能負擔從繁忙的網路伺服器轉移到了 logrotate 程序。

首先,您需要一個用於匿名訪問日誌文件的腳本。一種選擇是來自 Digitale Gesellschaft(前身為瑞士隱私基金會)的anonip.py 。使用這樣一個專用的外部工具比一個可以處理例如 IPv6 和 IPv4 地址等的 quick-n-dirty 自製腳本具有優勢。但是您當然也可以另外使用自己的腳本,例如也可以匿名化日誌文件中的其他部分(例如userId,您的 Web 應用程序的 URL 參數)。

所以下載並安裝腳本:

cd /usr/local/bin
wget https://raw.githubusercontent.com/DigitaleGesellschaft/Anonip/master/anonip.py
chmod 755 anonip.py

然後創建或編輯您的/etc/logrotate.d/nginx文件,使其類似於以下內容:

/var/log/nginx/*.log {
   weekly
   missingok
   rotate 52
   maxage 365
   compress
   delaycompress
   notifempty
   create 0640 www-data adm
   prerotate
       if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
           run-parts /etc/logrotate.d/httpd-prerotate; \
       fi \
   endscript
   postrotate
       /usr/sbin/invoke-rc.d nginx rotate >/dev/null 2>&1 ;
       /usr/local/bin/anonip.py < "$1".1 --output "$1".1.anon ;
       /bin/mv "$1".1.anon "$1".1 ;
   endscript
}

這基本上所做的就是將匿名訪問日誌保留一周。每週一次,文件被輪換和匿名化。假設是,旋轉文件具有後綴.1. 它基本上保留了一年的匿名數據。當然,可以調整此設置以執行例如每日輪換等…

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