じゅのぶろ

社内SEが自宅でSOC/CSIRTするために色々頑張っていきたいブログ 画像が見れない場合はjavascriptを有効にするかデスクトップからご覧下さい。

Splunk CSV Lookup Tableを使ったログのフィルタリング(ルックアップ作成編)

SplunkでCSV Lookup Tableを使いログのフィルタリング(ブラックリスト/ホワイトリスト)をするためのルックアップ作成方法を記載します。
後日、ルックアップ活用編もご紹介します。

Lookup Tableとは

csvルックアップの場合はcsvそのものを指します(大体あっています)。 csvにデータを記載し、Splunkに取り込んだログとcsvのデータがマッチするかを検証するのに利用します。

Lookup Tableの作成

とても簡単で3ステップです。

  1. ルックアップ テーブルとして利用するcsvファイルの作成
  2. 1で作成したファイルをアップロード
  3. ルックアップ定義の作成

1. csvファイルの作成

今回はBlackList/WhiteListとして利用するcsvファイルを一つ用意します。
BlackなのかWhiteなのかはリスト内にデータとして持ちたいと思います。
※パフォーマンスを考えるとそれぞれ分離し異なるファイルで作成したほうが良いかもしれません。

以下のファイル(list.csv)を作成しアップロードします。

domain,ip,listcategory,details
www.google.co.jp,,white,search_engine
,10.0.0.0/8,white,private_ip
,172.16.0.0/12,white,private_ip
,192.168.0.0/16,white,private_ip
www.bing.com,204.79.197.200,black,not_black
*.ru,,black,Russia TLD

bingは特に危険なドメインではないと思いますが、
ブログ記事のためにBlackにしました。
みなさんは監視対象としたいドメイン/IPを指定しましょう。
なお、WildCard(*)と CIDR(/)を使うにはオプション指定が必要になります(3. 参照)。 

lookupの値に日本語も使えます。
csvファイルの文字コードUTF-8、改行はLF(Linuxの場合)にすることをオススメします。

2. csvファイルのアップロード

右上の設定→ルックアップ→ルックアップ テーブルとクリックし、ファイルの新規追加を選択します。
新規作成時の設定項目は3つあります。

i. 宛先App
ルックアップのRead/Write権限を App単位にする場合や
ファイルのアップロード先ディレクトリを気にかける場合はそれぞれのAppを選択して下さい。
私はsearchにしました。

ii. ルックアップ ファイルをアップロード
「choose file」をクリックし先程作成したファイルを選択します。 はじめはユーザのプライベートルックアップになるため、以下の場所にアップロードされます。
$SPLUNK_HOME/etc/users/admin/search/lookups/list.csv
なお、アップロード後に権限をApp単位に変更した際には場所が変更されます。
$SPLUNK_HOME/etc/apps/search/lookups/list.csv

iii. 宛先ファイル名
csvファイルと同じ名前で良いと思います。
拡張子を明記することをオススメされています。

f:id:jnox:20190726224539p:plain

3. ルックアップ定義の作成

右上の設定→ルックアップ→ルックアップ定義とクリックし、新しいルックアップ定義を選択します。
定義作成時の設定項目は5つあります。

i. 宛先App
アップロード時に指定したAppと同一で良いでしょう。
ii. Name
ルックアップの名前です。
lookupコマンドの引数で指定する値となります。
大抵csvファイルの名前で良いでしょう。
iii. タイプ
ファイルベースで良いでしょう。
iv. ルックアップ ファイル
先程アップロードしたファイルを選択します。

v. 詳細オプション
一致タイプにWILDCARDとCIDRを指定します。
他に指定したいオプションがあればそれぞれ指定してください。

f:id:jnox:20190726230734p:plain

ルックアップの検証

inputlookupコマンドでルックアップのデータを確認することができます。

|inputlookup list

csvとデータが一致することを確認します。

f:id:jnox:20190726231620p:plain

restコマンドでルックアップのオプションを確認することができます。

| rest /servicesNS/admin/search/data/transforms/lookups/list
| transpose

結果が横長になって見づらいので行と列を入れ替えるためtransposeコマンドを使っています。
match_typeオプションが指定されていることを確認します。
f:id:jnox:20190726234347p:plain

これでルックアップを利用する準備が整ったので、 次の記事でルックアップの使い方をご紹介します。