Fluentd v1.0 で ElasticSearch6.3 に WOWHoneypot のログを投入

送信側サーバ(WOWHoneypot + Fluentd)と受信側サーバ(ElasticSearch + Kibana)の2つのサーバの場合。

ElasticSearch 側のサーバ設定

送信側。

Fluentd のサーバと ElasticSearch のサーバは異なるため、Fluentd -> ElasticSearch という方向でアクセス許可を行う。

AWS のコンソールより、セキュリティグループで fluentd からのアクセスを許可する。

  • カスタムTCPルール
  • 9200
  • [fluentdサーバのIP]/32

Fluentd サーバから以下のコマンドでアクセスできることを確認する。以下のコマンドは送信側から打つ。

curl http://172.31.31.131:9200

通信が成功したら以下のようなレスポンスが帰ってくる。

{
  "name" : "0St5H1h",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "SXj3orxOSAKouZVhxQyKdw",
  "version" : {
    "number" : "6.3.1",
    "build_flavor" : "oss",
    "build_type" : "tar",
    "build_hash" : "eb782d0",
    "build_date" : "2018-06-29T21:59:26.107521Z",
    "build_snapshot" : false,
    "lucene_version" : "7.3.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

fluentd-plungin-elasticsearch インストール

送信側。

ElasticSearch へのログの投入は fluent-plugin-elasticsearch を利用します。

td-agent 3.0 以降から標準ディストリビューションに含まれているため、手動でインストールする必要はない。

td-agent-gem list | grep elastic

# いかが表示
elasticsearch (6.0.2)
elasticsearch-api (6.0.2)
elasticsearch-transport (6.0.2)
fluent-plugin-elasticsearch (2.10.3)

Fluentd 設定

送信側。

ログは、WOWHoneypot自体のログと、ハニーポットにきたアクセスログの 2 つを投入する。

  • /var/log/wowhoneypot/wowhoneypot.log
  • /var/log/wowhoneypot/access_log

設定ファイルを修正する。

sudo vim /etc/td-agent/td-agent.conf

以下のようにしてみた。

<source>
  @type tail
  format /^\[(?<time>[^\]]*)\] (?<clientip>[^ ]*) (?<hostname>[^ ]*) "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<mrrid>[^ ]*) (?<requestbody>[^ ]*)$/
  time_format %Y-%m-%d %H:%M:%S%z
  path /var/log/wowhoneypot/access_log
  pos_file /var/log/td-agent/access_log.pos
  tag wow.access
</source>

<match wow.access>
  @type elasticsearch
  host 172.31.31.131
  port 9200
  type_name access_log
  logstash_format true

  buffer_type memory
  buffer_chunk_limit 10m
  buffer_queue_limit 10
  flush_interval 1
  retry_limit 16
  retry_wait 1s
</match>

td-agent を再起動する。

sudo systemctl restart td-agent

エラーが出てないか確認しておく。

sudo tail /var/log/td-agent/td-agent.log
sudo systemctl status td-agent

ElasticSearch 確認

受信側。

ログが溜まっているかを確認する。「losgstash-2018.07.08」というインデックスが作成されていた。

curl http://172.31.31.131:9200/_aliases?pretty

# インデックスが作成されていることを確認
{
  "logstash-2018.07.08" : {
    "aliases" : { }
  }
}

「losgstash-2018.07.08」にリクエストすると、インデックスの設定内容が確認できる。

$ curl http://172.31.31.131:9200/logstash-2018.07.08?pretty

# インデックスの中身が見れる
{
  "logstash-2018.07.08" : {
  "aliases" : { },
  "mappings" : {
    "access_log" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
〜略〜

_searchを利用して、「losgstash-2018.07.08」に入っているデータを確認する。

curl http://172.31.31.131:9200/logstash-2018.07.08/_search?pretty

~略〜
 "hits" : [
{
"_index" : "logstash-2018.07.08",
"_type" : "access_log",
"_id" : "Lf3QeWQB8XMT3-ZRLIbx",
"_score" : 1.0,
"_source" : {
"clientip" : "186.248.106.2",
"hostname" : "18.179.42.107:8080",
"method" : "GET",
"path" : "/",
"status" : "200",
"mrrid" : "False",
"requestbody" : "R0VUIC8gSFRUUC8xLjEKSG9zdDogMTguMTc5LjQyLjEwNzo4MDgwClVzZXItQWdlbnQ6IE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81MS4wLjI3MDQuMTAzIFNhZmFyaS81MzcuMzYKQ29udGVudC1MZW5ndGg6IDAKCg==",
"@timestamp" : "2018-07-08T21:14:01.000000000+09:00"
}
},
〜略〜

無事にデータを投入することができた。

次回はこのデータを Kibana で可視化する。

参考

T-PotのELK環境へWOWHoneypotログ取り込み

「WOWHoneypotのあそびかた」を読んでハニーポットを植えてみた

Elasticsearch Output Plugin

GitHub – uken/fluent-plugin-elasticsearch

Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (1/2)

コメント

タイトルとURLをコピーしました