LoginSignup
79
74

More than 5 years have passed since last update.

fluentdとKibanaでSSHアクセス元マップ

Last updated at Posted at 2015-02-10

大学外にポートが空いている研究室のサーバに対して,不正なSSHのアクセスが結構来ています.
今回は以下のステップで,不正アクセス元の国をKibana mapで可視化してみました.

  1. fluentdでSSHのログから不正アクセスのIPアドレスを解析
  2. GeoIPを使ってIPアドレスから国を特定
  3. Elasticsearchにログを収集
  4. Kibanaのmap panelを使って可視化

GeoIPとは

サイトアクセス者の位置情報を取得するGeoIP | SourceForge.JP Magazineより引用.

GeoIPとは、IPアドレスを国、都市、インターネットサービスプロバイダ(ISP)にマッピングしたデータベース群である。
そうしたデータとともにC、PHP、Javaその他いくつかの言語を使ってデータベースにアクセスするためのLGPLライセンスのAPIも用意されている。

fluentdでSSHログ解析

fluentd(td-agent)については前回書いたので割愛します.

SSHのログは,以下のような形式になっていると思います.
ここでは,Invalid user(存在しないユーザ)のログを抽出します.

/var/log/auth.log
Feb  8 07:47:28 air sshd[29484]: Invalid user admin from 58.206.126.29

fluentdの設定は以下の通り.
formatでは,時刻とユーザ名,IPアドレスを取っています.

/etc/td-agent/td-agent.conf
<source>
  type tail
  format /^(?<time>[^0-9]+ [^ ]+ [^ ]+) .+ sshd\[.+\]: Invalid user (?<user>[^ ]+) from (?<ip_address>[^$]+)$/
  time_format %b %d %H:%M:%S
  path /var/log/auth.log
  pos_file /tmp/auth.log.pos
  tag geo.ssh.access
</source>

fluent-geoip-pluginの導入

fluentd用にgeoipプラグインを作られている方が居ました.

今回は,ログのIPアドレスからcountry_code(JP,USなど)を取得します.
fluentdの設定に以下の内容を追記します.

/etc/td-agent/td-agent.conf
<match geo.ssh.*>
  type geoip
  geoip_lookup_key ip_address
  <record>
    country ${country_code['ip_address']}
  </record>
  remove_tag_prefix geo.
  add_tag_prefix host.
</match>

Elasticsearchに投入

fluent-plugin-elasticsearchについては前回書いたので割愛します.
今回使用した設定は下記の通りです.

/etc/td-agent/td-agent.conf
<match host.ssh.*>
  type elasticsearch
  host 133.92.147.250
  port 9200
  type_name ssh-invalid
  include_tag_key true
  tag_key @log_name
  logstash_format true
  logstash_prefix ssh-invalid
  flush_interval 10s
</match>

インデックスのMappingは自動で問題無いと思いますが,手動で行いました.

mapping.sh
curl -XPUT http://127.0.0.1:9200/_template/ssh-invalid -d '{
  "template": "ssh-invalid-*",
  "mappings": {
    "_default_": {
      "numeric_detection" : true,
      "properties": {
        "@timestamp": { "type":"date", "format":"dateOptionalTime" },
        "@log_name": {type: "string"},
        "user": {type: "string"},
        "ip_address": {type: "string"},
        "country": {type: "string"}
      }
    }
  }
}'

Kibanaのmapで可視化

Kibanaには,世界地図などにマッピングできるmap panelがあります.

今回は世界地図を使って,countryの値でマッピングします.
作ったDashboardはGitHubで公開しています.

実際の画面はこんな感じになりました.
某国だけでなく,アジアや南米からも多くアクセスがあることが分かりますね.

ユーザ名のランキングも作ってみたら,adminがダントツでした.
(rootは存在するユーザなので,ここでは含まれない.)

kibana_map.png

79
74
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
74