Skip to content

ankane/ip_anonymizer

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

IP Anonymizer

🌎 IP address anonymizer for Ruby and Rails

Works with IPv4 and IPv6

Designed to help with GDPR compliance

Build Status

Getting Started

Add these lines to your application’s Gemfile:

gem "ip_anonymizer"

There are two strategies for anonymizing IPs.

Masking

This is the approach Google Analytics uses for IP anonymization:

  • For IPv4, set the last octet to 0
  • For IPv6, set the last 80 bits to zeros
IpAnonymizer.mask_ip("8.8.4.4")
# => "8.8.4.0"

IpAnonymizer.mask_ip("2001:4860:4860:0:0:0:0:8844")
# => "2001:4860:4860::"

An advantange of this approach is geocoding will still work, only with slightly less accuracy. A potential disadvantage is different IPs will have the same mask (8.8.4.4 and 8.8.4.5 both become 8.8.4.0).

Hashing

Transform IP addresses with a keyed hash function (PBKDF2-HMAC-SHA256).

IpAnonymizer.hash_ip("8.8.4.4", key: "secret")
# => "6.128.151.207"

IpAnonymizer.hash_ip("2001:4860:4860:0:0:0:0:8844", key: "secret")
# => "f6e4:a4fe:32dc:2f39:3e47:84cc:e85e:865c"

An advantage of this approach is different IPs will have different hashes (with the exception of collisions).

Make sure the key is kept secret and at least 30 random characters. Otherwise, a rainbow table can be constructed. You can generate a good key with:

SecureRandom.hex(32)

Rails

Automatically anonymize request.remote_ip in Rails.

For masking, add to config/application.rb:

config.middleware.insert_after ActionDispatch::RemoteIp, IpAnonymizer::MaskIp

For hashing, use:

config.middleware.insert_after ActionDispatch::RemoteIp, IpAnonymizer::HashIp, key: "secret"
  • Logstop - Keep personally identifiable information (PII) out of your logs

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/ankane/ip_anonymizer.git
cd ip_anonymizer
bundle install
bundle exec rake test

About

IP address anonymizer for Ruby and Rails

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages