SSブログ

Elasticsearchでチャレンジ その2 (FreeBSD 11.2R、2018/07/08) [FreeBSD]

Elastic関連で検索してきて下さる方が多いようで、全体的にアクセス数が増えています。私もまだ手探り状態で、有効な導入記事が書けてなくて大変申し訳ないです。

さてさて。うまくいかないときは、なるべくシンプルで確実なところから攻めるのがセオリーです。不正確なコンフィグで自動動作されると困るので、logstashサービスは一旦停止させておくことにします。

logstashの動作を確認するための一番シンプルなコンフィグは下記です。これが動作しないようであれば、インストールそのものが不備がある可能性が大です。
root@mybsd:/usr/local/etc/logstash # cat sample.conf
input {
        stdin {}
}
output {
        stdout { codec => rubydebug }
}

手動で設定ファイルとログを読み込ませます。
root@mybsd:/usr/local/etc/logstash # /usr/local/logstash/bin/logstash -f test.conf < /var/log/security_sample
{
       "message" => "Jul  5 09:19:37 mybsd kernel: ipfw: 2400 Deny TCP A1.A2.A3.A4:23625 B1.B2.B3.B4:1444 in via em0",
      "@version" => "1",
    "@timestamp" => 2018-07-07T17:10:58.652Z,
          "host" => "mybsd.xxxxx"
}
{
       "message" => "Jul  5 09:19:46 mybsd kernel: ipfw: 2400 Deny TCP A1.A2.A3.A4:58131 B1.B2.B3.B4:50443 in via em0",
      "@version" => "1",
    "@timestamp" => 2018-07-07T17:10:58.652Z,
          "host" => "mybsd.xxxx"
}
.....

正常動作している場合、上記のような解析結果がずらずらと出力されるはずです。現時点では内容については気にしなくて良いです。
もし上記の結果が得られているようであれば、最低限の環境はできあがっているはずなので、ここから徐々に肉付けしていくことを考えましょう。

前回もお伝えしたとおり、"正規表現"は大前提となる知識です。正規表現って何?と思った方は、先にそちらの勉強から始めた方が良いと思います。

引き続きipfwログを解析対象にさせてみます。解析データのサンプルは下記の通りです。
Jul  5 07:04:33 mybsd kernel: ipfw: 2400 Deny TCP A1.A2.A3.A4:52948 B1.B2.B3.B4:445 in via em0
....

正規表現によるマッチング・解析・細分化は、filter/grok構文内に記載します。細分化していくことで、通信プロトコル毎や、送信元IPアドレス毎といった集計・可視化を行うことができるようになります。正規表現は使用頻度の高いものは予め定義されたものがありますので、それらを有効に使っていきます。
私の環境だと、下記にパターンファイルがありました。公式のものかは分かりませんが、Web上からも参照できます。
/usr/local/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
https://github.com/hpcugent/logstash-patterns/blob/master/files/grok-patterns

下記のように細分化してみました。正規表現で細分化したデータをピックアップするには、名前を付ける必要があり、正規表現の後ろに「:<名前>」を付加します。どのように機能するかは、最初の解析結果と、この後の解析結果を見比べれば、一目瞭然かと思います。
input {
        stdin {}
}
filter {
        grok {
                match => {
                        "message" => "%{SYSLOGBASE} %{PROG:software}: %{NUMBER:number} %{WORD:action} %{WORD:protocol} %{IP:srcip}:%{NUMBER:srcport} %{IP:dstip}:%{NUMBER:dstport} i
n via %{WORD:interface}"
                }
        }
}
output {
        stdout { codec => rubydebug }
}

先ほど同様に手動で実行させると、今度は下記のような結果が得られます。
root@mybsd:/usr/local/etc/logstash # /usr/local/logstash/bin/logstash -f ipfw-log.conf < /var/log/security_sample
{
      "@version" => "1",
    "@timestamp" => 2018-07-07T17:57:32.846Z,
          "host" => "mybsd.xxxx",
     "logsource" => "mybsd",
       "program" => "kernel",
       "srcport" => "12424",
      "protocol" => "TCP",
        "number" => "2400",
      "software" => "ipfw",
         "srcip" => "A1.A2.A3.A4",
       "dstport" => "23",
       "message" => "Jul  5 09:20:09 mybsd kernel: ipfw: 2400 Deny TCP A1.A2.A3.A4:12424 B1.B2.B3.B4:23 in via em0",
     "interface" => "em0",
     "timestamp" => "Jul  5 09:20:09",
         "dstip" => "B1.B2.B3.B4",
        "action" => "Deny"
}



タグ:elasticsearch
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。