ipscrub: Модуль анонимизации IP-адресов для NGINX
Установка на Debian/Ubuntu
Эти документы относятся к пакету APT nginx-module-ipscrub, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
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-адресу.

Модель безопасности
- При инициализации и снова каждый
PERIODгенерируйтеsalt, используя 128 бит изarc4random_buf(). - При каждом запросе генерируйте маскированный IP-адрес как
HASH(salt ++ IP address). - Логируйте маскированный IP-адрес.
ipscrub использует arc4random для генерации случайных nonce (см. доклад Тео де Рата о arc4random для отличного обзора). На Linux это требует установки libbsd (пакет libbsd-dev на Ubuntu/Debian).
ТАКЖЕ ЗАМЕТЬТЕ: сгенерированный хеш БУДЕТ меняться при каждом переходе PERIOD, поэтому вы будете иметь преемственность только в пределах каждого PERIOD. Но так как пользователи могут переходить между сетями в любой момент времени (например, wifi -> сотовая связь), у вас возникнет этот тип проблемы, даже если бы вы хранили необработанные IP.
Модель угроз
- Государственные органы представляют вам IP-адрес и требуют идентификацию пользователя, соответствующего этому адресу.
- Государственные органы идентифицируют пользователя, например, по адресу электронной почты, и требуют IP-адрес, который у него был в определенный момент времени.
В сценарии угрозы (1) цель состоит в том, чтобы вычислить маскированный IP, соответствующий целевому IP-адресу. Это будет возможно только в том случае, если требование будет сделано до конца текущего PERIOD.
Сценарий (2) защищен, потому что оператор сервера не знает соленое значение и не может вывести его на основе временной метки запроса, поскольку соль генерируется из nonce, которое хранится только в памяти. Оператору сервера в этом случае нужно быть сообщником, но это проще сделать, просто записывая немаскированный IP. Таким образом, эта модель безопасности/угроз не защищает от злонамеренного оператора сервера, но это и не является целью. Она защищает от добросовестного оператора сервера, которого принуждают в сценариях угроз (1) и (2).
Использование
Конфигурация
В вашем nginx.conf,
- На верхнем уровне загрузите модуль, добавив строку
load_module ngx_ipscrub_module.so;(ЗАМЕТКА: только если вы собирали как динамический модуль). - Установите
ipscrub_period_seconds <NUM SECONDS PER PERIOD>;(необязательно). - В ваших директивах
log_formatзамените$remote_addrна$remote_addr_ipscrub. - Перезагрузите конфигурацию 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.