さよならインターネット

Fluentdを利用してsshログインを通知する

sshを利用していると招かれざる客の来訪が多い。
また、サーバに不必要にログインしている関係者がいないか
把握しつづけるのも難しい。

今回はfluentdを利用して簡単にログイン周りの通知をSlackに流してみる。

準備

/var/log/secureはパーミッションが厳しいので
y-kenさんのブログを参考にパーミッションを変更する必要があります。

SlackのAPIがバージョンアップしてリアルタイム性を持つようになった。

個人的にはリアルタイム性よりも
private roomでもhubotが利用できるようになったのいうのがアツい。
これで色々遊べるようになる。

手元でendpointを変更して動くようになった。みんな普通に動いているのかな

1
2
3
4
5
private
def endpoint
  # URI.parse "https://#{@team}.slack.com/services/hooks/incoming-webhook?token=#{@api_key}"
  URI.parse "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX"
end

Real Time Messagingを利用するためには

1
https://slack.com/api/chat.postMessage?token=xoxp-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXX&channel=XXXXXXXXX&text=XXXXX&username=XXXXX'

のようにリクエストを送る必要がある。
時間があればpull requestしたい。(あと20分で書き終えなければ…)

chat.postMessage - slack API

設定

  • /etc/td-agent/td-agent.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<source>
  type tail
  path /var/log/secure
  format syslog
  tag secure_log
  pos_file /var/log/td-agent/syslog_secure.pos
</source>

<match secure_log.**>
  type grep
  input_key message
  regexp Accepted|failure|Invalid
  add_tag_prefix greped
</match>

<match greped.**>
  type buffered_slack
  api_key API_KEY
  team TEAMNAME
  channel %23general # You should use %23 in return for #
  username fluentd
  color danger
  icon_emoji :shit:
  buffer_path /var/log/td-agent/buffer/
  flush_interval 5s
</match>

こんな感じでAcceptedfailureInvalidの文字列を
sonotsさんがつくったfluent-plugin-grepを利用して抽出。

そうすると

こんな感じで通知されてくる。セキュリティを気にする環境では
このような設定を入れておくと良いのではないでしょうか。