ipscrub: Модуль анонимизации IP-адресов для NGINX
Установка
Вы можете установить этот модуль в любом дистрибутиве на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-ipscrub
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-ipscrub
Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:
load_module modules/ngx_ipscrub_module.so;
Этот документ описывает nginx-module-ipscrub v1.0.1, выпущенный 29 мая 2018 года.
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) защищен, потому что оператор сервера не знает salt и не может вывести его на основе временной метки запроса, потому что salt генерируется из 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 может все еще утекать 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-адреса? You Ain't Gonna Need It. Если вам нужна геолокация, просто используйте модуль GeoIP от MaxMind в сочетании с ipscrub.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-ipscrub.