数回に分けて、cowrieでsshの不正アクセスの実態を取得するようにしてきた。
構成としてはこのような感じ。
今回は不正アクセスIPを利用し、地理情報を得て、どの国からのアクセスが多いのかをkibana4を使って出してみた。
GeoIPを設定する。
geoipをインストールする。
1 | yum -y install geoip-devel |
地理情報のデータベースをアップデート
1 | /usr/bin/geoipupdate |
fluentdでgeoipを扱うプラグインをインストールする。
1 | /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-geoip |
td-agentの設定
td-agent.conf
でIPアドレスを元に国コードとロケーションを取得する。
1 | <match geo.replicator.**> |
elasticsearchの設定
デフォルトのままだと、全てstring扱いになり、地理情報として扱ってくれないので、いったんマッピングを削除
1 | curl -XDELETE localhost:9200/* |
独自に定義したjsonファイルを作成する。今回はこんな感じ。
1 | $ cat mapping.json |
マッピングする。
1 | curl -XPUT localhost:9200/cowrie --data-binary @mapping.json |
マッピングできているか確認
1 | curl -X GET -w - http://localhost:9200/_mapping?pritty | jq -C '.' |
td-agentを再起動。
1 | systemctl restart td-agent |
データ入っているか確認
1 | $ curl "http://localhost:9200/cowrie/search/_search?size=100&pretty" | tail |
kibana4の設定
kibana4を使ってデータを可視化する。
1 | wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz |
1 | firewall-cmd --permanent --add-port 5601/tcp |
http://localhost:5601/ にアクセスするとこのような画面。
elasticsearchのマッピングでlocation
のtype
をgeo_point
にしているのでこのlocation
を用いて地図上にどの国からのアクセスが多いかを可視化した。
データを可視化すると見えないものが見えて来る。
是非、現場で活用してみてはいかがだろうか。