送信側サーバ(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 で可視化する。
参考
「WOWHoneypotのあそびかた」を読んでハニーポットを植えてみた
コメント