はじめに
Apache
やnginx
などのログのIPアドレスをマスクしてレポート化したいケースがあった。
今回は、anonip
コマンドを利用してログファイル内のIPアドレスをマスクすることをやってみる。
https://packages.ubuntu.com/noble/admin/anonip
環境
Windows 11 Professional
WSL2 Ubuntu 24.04LTS
準備
サンプルのログを取得
下記のGitHubリポジトリに各アプリケーションのサンプルがあるのでこれを利用する。
https://github.com/elastic/examples
今回はApache
のログを利用してみる。
https://github.com/elastic/examples/blob/master/Common%20Data%20Formats/apache_logs/apache_logs
anonipのインストール
sudo apt-get install anonip
ログ
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
python-anonip-doc
The following NEW packages will be installed:
anonip
0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded.
Need to get 14.4 kB of archives.
After this operation, 52.2 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 anonip all 1.1.0-2 [14.4 kB]
Fetched 14.4 kB in 1s (28.2 kB/s)
Selecting previously unselected package anonip.
(Reading database ... 49973 files and directories currently installed.)
Preparing to unpack .../anonip_1.1.0-2_all.deb ...
Unpacking anonip (1.1.0-2) ...
Setting up anonip (1.1.0-2) ...
Processing triggers for man-db (2.12.0-4build2) ...
anonipを使う
書式
python3 -m anonip < [入力ファイル] >> [出力ファイル]
or
python3 -m anonip --input [入力ファイル] --output [出力ファイル]
例
python3 -m anonip < access.log >> mask.log
python3
のモジュールとして、anonip
を使い、入力にaccess.log
、出力に mask.log
を指定している。
出力の確認
mask
する前↓
access.log
83.149.9.216 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
mask.log
83.149.0.0 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
maskするビット数の変更
mask
するビット数を変更したい場合は下記のオプションを利用する。
-4 INTEGER, --ipv4mask INTEGER
truncate the last n bits (default: 12)
なので、24ビット隠す場合は以下とする。
python3 -m anonip --ipv4mask 24 < access.log >> mask.log
とすると、mask.log
のIPアドレスは83.0.0.0
と、24ビットが隠された形になる。
オプション
anonip
のオプションを日本語で表形式にまとめました。
オプション | 説明 | デフォルト値 |
---|---|---|
-h, --help | ヘルプメッセージを表示して終了 | - |
-4 INTEGER, --ipv4mask INTEGER | IPv4アドレスの最後のnビットを切り捨てる(デフォルト: 12) | 12 |
-6 INTEGER, --ipv6mask INTEGER | IPv6アドレスの最後のnビットを切り捨てる(デフォルト: 84) | 84 |
-i INTEGER, --increment INTEGER | IPアドレスをnだけインクリメント(増加)する(デフォルト: 0) | 0 |
-o FILE, --output FILE | 結果を出力するファイルを指定 | - |
--input FILE | 読み込むファイルまたはFIFOを指定(デフォルト: 標準入力) | 標準入力 |
-c INTEGER [INTEGER ...], --column INTEGER [INTEGER ...] | IPアドレスがある列番号を指定(1始まりのインデックス、デフォルト: 1) | 1 |
-l STRING, --delimiter STRING | ログの区切り文字を指定(デフォルト: スペース " " ) | " " |
--regex STRING [STRING ...] | IPアドレスを検出するための正規表現を指定(オプション、-c の代わりに使用) | - |
-r STRING, --replace STRING | IPアドレスの解析に失敗した場合の置き換え文字列を指定(例: 0.0.0.0 ) | - |
-p, --skip-private | プライベートレンジのアドレスをマスクしない。IANAの特別用途アドレスレジストリ参照 | False |
-d, --debug | デバッグメッセージを表示 | - |
-v, --version | プログラムのバージョン番号を表示して終了 | - |
参考
DigitaleGesellschaft / Anonip
https://github.com/DigitaleGesellschaft/Anonipelastic / examples
https://github.com/elastic/examples
おわりに
IPアドレスを匿名化するツールについて調べた。anonip
以外にもありそうなので、今後とも調べてみる。