Перейти к содержанию

ipscrub: Модуль анонимизации IP-адресов для NGINX

Установка на Debian/Ubuntu

Эти документы относятся к пакету APT nginx-module-ipscrub, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-ipscrub

Warning

Этот модуль еще не опубликован как nginx-module-ipscrub в репозиториях APT. Следите за обновлениями или напишите на support@getpagespeed.com, чтобы запросить его.


ipscrub — это анонимизатор IP-адресов для nginx логов. Это модуль nginx, который генерирует хеш на основе IP. Вы можете использовать этот хеш, чтобы связывать запросы из одного источника, не идентифицируя ваших пользователей по IP-адресу.

Скриншот логов nginx при использовании ipscrub

Модель безопасности

  1. При инициализации и снова каждый PERIOD генерируйте salt, используя 128 бит из arc4random_buf().
  2. При каждом запросе генерируйте маскированный IP-адрес как HASH(salt ++ IP address).
  3. Логируйте маскированный IP-адрес.

ipscrub использует arc4random для генерации случайных nonce (см. доклад Тео де Рата о arc4random для отличного обзора). На Linux это требует установки libbsd (пакет libbsd-dev на Ubuntu/Debian).

ТАКЖЕ ЗАМЕТЬТЕ: сгенерированный хеш БУДЕТ меняться при каждом переходе PERIOD, поэтому вы будете иметь преемственность только в пределах каждого PERIOD. Но так как пользователи могут переходить между сетями в любой момент времени (например, wifi -> сотовая связь), у вас возникнет этот тип проблемы, даже если бы вы хранили необработанные IP.

Модель угроз

  1. Государственные органы представляют вам IP-адрес и требуют идентификацию пользователя, соответствующего этому адресу.
  2. Государственные органы идентифицируют пользователя, например, по адресу электронной почты, и требуют IP-адрес, который у него был в определенный момент времени.

В сценарии угрозы (1) цель состоит в том, чтобы вычислить маскированный IP, соответствующий целевому IP-адресу. Это будет возможно только в том случае, если требование будет сделано до конца текущего PERIOD.

Сценарий (2) защищен, потому что оператор сервера не знает соленое значение и не может вывести его на основе временной метки запроса, поскольку соль генерируется из nonce, которое хранится только в памяти. Оператору сервера в этом случае нужно быть сообщником, но это проще сделать, просто записывая немаскированный IP. Таким образом, эта модель безопасности/угроз не защищает от злонамеренного оператора сервера, но это и не является целью. Она защищает от добросовестного оператора сервера, которого принуждают в сценариях угроз (1) и (2).

Использование

Конфигурация

В вашем nginx.conf,

  1. На верхнем уровне загрузите модуль, добавив строку load_module ngx_ipscrub_module.so; (ЗАМЕТКА: только если вы собирали как динамический модуль).
  2. Установите ipscrub_period_seconds <NUM SECONDS PER PERIOD>; (необязательно).
  3. В ваших директивах log_format замените $remote_addr на $remote_addr_ipscrub.
  4. Перезагрузите конфигурацию nginx.

ЗАМЕТКА: nginx может все равно ут leaking IP-адреса в журнале ошибок. Если это проблема, отключите ведение журналов ошибок или регулярно очищайте журнал.

Запуск тестов

make test

Журнал изменений

  • 1.0.1 исправлена уязвимость к раскрытию хешированных IP (спасибо @marcan)
  • 1.0.0 первоначальный выпуск

GDPR

GDPR вступает в силу 25 мая 2018 года. Он регулирует обработку персональных данных о ваших пользователях, включая IP-адреса.

С сайта https://www.eugdpr.org/gdpr-faqs.html:

Что входит в понятие персональных данных?

Любая информация, относящаяся к физическому лицу или «субъекту данных», которая может быть использована для непосредственной или косвенной идентификации этого лица. Это может быть любое, от имени, фотографии, [...], или IP-адреса компьютера.

Хэши, сгенерированные ipscrub, позволяют вам коррелировать записи журналов nginx по IP-адресу, не храня при этом фактические IP-адреса, уменьшая вашу поверхность GDPR.

YAGNI

Зачем вам в любом случае вести учет IP-адресов? Вам это не понадобится. Если вам нужно геолокация, просто используйте GeoIP модуль MaxMind в сочетании с ipscrub.