web-dev-qa-db-ja.com

リモートIPの匿名化とnginxに重点を置いたGDPR準拠のHTTPサーバーアクセスログを作成する方法

EUの一般データ保護規則(GDPR)とドイツのDSGVOの実装は、個人関連データ(IPアドレスなど)に関しては非常に厳格です。ただし、この質問はGDPRについてではありませんが、nginx HTTPアクセスログを使用して規制を実装しながら、匿名ユーザーを「特定」する可能性を維持する方法ユーザージャーニー(ユーザージャーニーと他のジャーニーとの境界)。

現在の実装では、リモートIPとポートをまったく記録していません。アップストリーム/プロキシ/ etcの環境変数を削除しましたが、simpleにはリモートIPおよびアクセスログのポート情報がありません。

ユーザージャーニーのパスをたどる必要があるという問題に直面しています。私は単に、どの要求がどのユーザージャーニーの範囲内にあるかを「識別する」方法がないだけです。クッキーなども使わないことを指摘したい。

「匿名ユーザー」を「識別する」ための従来のアプローチは、リモートIPと日付情報を探すことです。同じ日に、同じリモートIPが同じユーザーである可能性が最も高くなります。ただし、上記のように、リモートIPおよびポート情報はログに記録しません。そして今でもそれは欲しくない。

私の現在のところは、リモートIPアドレスをリモートポートとリクエストの日付でハッシュすることです。ログには日付情報が含まれますが、リモートポートは含まれません。そのため、強力なブルートフォースがなければ、個人に関連するデータであるリモートIPを復元できません。このアプローチは、someレベルのユーザージャーニー識別を返すのに役立ちます。それは私にかなり役立ちます。

このアプローチを実現するための一般的なワークフローは次のとおりです。

  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変数に入れますか?

5
burnersk

EUの一般データ保護規則(GDPR)は、「個人データの処理に関する個人の保護と個人データの自由な移動に関連する規則」に関するものです。 ITシステムを妨害する方法についてではありません。最善の方法は、落ち着いて、OKを確認することです。そして、OKではありません。個人データ保護に関して。

Webサーバーがブラウザ/クライアントのIPアドレスを処理することは技術的に重要です。この機能がないと、Webサーバーはブラウザー/クライアントに応答を返すことができません。

個人データの処理を回避することはできません。 (実際にはもちろんオプションがあります。たとえば、TORブラウザや匿名化プロキシの使用はオプションですが、これはクライアントが行う必要があります。)

WebサーバーとGDPR準拠の設定に関して、次のことを行う必要があります:

  • ログファイルが7日後に削除されることに注意してください(バイエルン州のデータ保護機関の推奨)
  • iPアドレスおよびその他の収集されたプライベートデータ(ブラウザ識別文字列など)をWebサイトのプライバシーに関する声明に含める
  • 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
}
3
Jens Bradler