Как создать журнал доступа HTTP-сервера, совместимый с GDPR, с упором на удаленную анонимность IP и nginx?
Общее положение ЕС о защите данных (GDPR) и внедрение DSGVO в Германии очень строги, когда речь идет об индивидуальных данных (таких как IP-адреса). Однако этот вопрос не о GDPR, а о том, как реализовать регулирование с помощью журнала HTTP-доступа nginx, сохраняя при этом возможность "идентифицировать" анонимного пользователя в пути пользователя (чтобы ограничить путь пользователя из других).
Моя текущая реализация заключается в том, что я вообще не записываю удаленный IP и порт. Я удалил переменные окружения для upstreams / прокси / и т.д., и просто не имеет удаленного IP-адреса и информации о портах с журналами доступа.
Теперь я сталкиваюсь с проблемой, что мне нужно идти по пути пользователя. У меня просто нет никакого способа "определить", какие запросы находятся в пределах какого пути пользователя. Я хочу отметить, что я также не использую куки и т. Д.
Устаревший подход к "идентификации" "анонимного пользователя" заключается в поиске удаленного IP-адреса и информации о дате. В течение того же дня один и тот же удаленный IP-адрес, скорее всего, будет одним и тем же пользователем. Однако, как упоминалось выше, я не регистрирую информацию об удаленных IP-адресах и портах. И я не хочу этого даже сейчас.
В настоящее время я хэширую удаленный IP-адрес с удаленным портом и датой запроса. У меня была бы информация о дате с журналами, но не с удаленным портом, поэтому я не могу - без тяжелой грубой форсировки - восстановить удаленный IP, индивидуальные данные. Этот подход помог бы вернуть некоторый уровень идентификации путешествия пользователя, который мне очень помог бы.
Общий рабочий процесс для реализации этого подхода будет:
- Запрос принят nginx,
- nginx выполняет операцию хеширования с удаленным IP, удаленным портом и текущей датой (например,
md5_hex("$remote_addr $remote_port $current_date")
) и сохраняет хеш в новой переменной (например,$remote_ip_anonymous
), - log_format будет иметь переменную $remote_ip_anonymous.
Хеш будет меняться, даже если удаленный IP-адрес и удаленный порт будут одинаковыми из-за текущей даты. И это изменится, когда удаленный порт будет изменен. Так что это должно быть в порядке с GDPR или, по крайней мере, с самой низкой категорией безопасности данных, в то время как фактический удаленный IP будет категорией безопасности данных мэра с GDPR.
Достаточно теории... как бы я реализовал такую удаленную анонимность IP? Нужно ли использовать модуль Perl nginx или модуль Lua, или есть другой (более быстрый) способ получить этот хэш и сохранить его в переменной nginx?
1 ответ
Общее положение ЕС о защите данных (GDPR) касается "защиты физических лиц в отношении обработки личных данных и правил, касающихся свободного перемещения личных данных". Дело не в том, как саботировать ИТ-системы. Лучший подход - это успокоиться и посмотреть, что в порядке, а что нет в отношении защиты личных данных.
Технически важно, чтобы веб-сервер обрабатывал IP-адрес браузера / клиента. Без этой возможности веб-сервер не сможет отправить ответ обратно браузеру / клиенту.
Избегать обработки персональных данных не вариант. (На самом деле, конечно, есть варианты. Например, браузер 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
}