収集しているログデータに特定の記号などが含まれる(人が一見しただけでは何を意味するか分からない)場合に、ログの可読性を向上させる方法として、Lookup Table が有効なケースがあるかもしれません。ここでは、サンプルとしてFireWallのDeny Actionのログデータを取り扱い、ログ中にプロトコル番号として"proto=6"等の数字(これは Internet Assigned Numbers Authority(IANA) によって管理・割り当てられているプロトコル番号)が記載されているケースを想定し、この数字をわかりやすくするために、より馴染みのあるプロトコルの名称(TCP、UDPなど)への変換を試みます。
Jan 15 10:48:00 192.0.2.1 date=2025-01-15 time=10:48:00 type=traffic subtype=local level=notice vd=root srcip=203.0.113.1 srcport=28078 srcintf="wan" dstip=192.0.2.2 dstport=9468 sessionid=94504 action=deny service="9468/tcp" proto=6
※本記事で示す手順は、筆者が定めた最低限の可動要件を満たす設定と動作確認のみを目的として、自身の備忘用のレベルで記しています。運用性やセキュリティ上の細かな考慮等は省いている場合があります。もし各手順を試される場合には自己責任でお願い致します。
Lookup Table(CSVファイル)の用意
Internet Assigned Numbers Authority(IANA)などの記載を参考に、CSVファイルを用意する。便宜的に、ファイル名を「protocol_number.csv」として作業端末のローカルに保存する。
proto,protocol_name
0,HOPOPT
1,ICMP
・・中略・・
6,TCP
・・以後、省略・・
Lookup Table の導入
Splunkのダッシュボード画面から、[設定] -> [ルックアップ]を選択する。
[ルックアップテーブルファイル] -> [新規追加] を押下します。
[ルックアップファイルをアップロード]で対象のCSVファイルを選択し、[宛先ファイル名]を入力の上で、[保存]を押下します。
共有先は、プライベートのままでも問題ないかもですが、ここではシステムのどこからでも使えるように[グローバル]に変更しておきます。[権限]から編集を行い、[すべてのApp]を選択し、[保存]を押下します。
動作確認
実際に、冒頭で示したサンプルログに対して、Lookupを実行してみます。今回実行したSPL文では、"protocol_number.csv"という Lookup Table と元のログデータに含まれるprotoフィールドを紐付け、Lookup Table にある protocol_name フィールドを出力します。これにより、元ログのproto=6などの数値に紐づいて、"TCP" といったプロトコル名が出力されています。
index=main "dstip=<ログ収集に使っているFirewallなどのIP>"
| lookup protocol_number.csv proto OUTPUT protocol_name
| table _time srcip dstip srcport dstport proto protocol_name action
まとめ
Lookup Table を用いて、ログデータ中の値と紐づけて、検索結果全体の可読性を上げる方法についてご紹介しました。
- Lookup Table の用意
- Lookup Table の導入
- Lookup Table を用いた検索
ログデータ単体では出力結果がわかりにくかったり、思った様な分析が行えない場合に、ぜひ Lookup Table の活用をご検討ください。