fluentdを利用してsshログインを通知する
sshを利用していると招かれざる客の来訪が多い。
また、サーバに不必要にログインしている関係者がいないか
把握しつづけるのも難しい。
今回はfluentdを利用して簡単にログイン周りの通知をSlackに流してみる。
準備
/var/log/secure
はパーミッションが厳しいので
y-kenさんのブログを参考にパーミッションを変更する必要があります。
SlackのAPIがバージョンアップしてリアルタイム性を持つようになった。
個人的にはリアルタイム性よりも
private roomでもhubotが利用できるようになったのいうのがアツい。
これで色々遊べるようになる。
手元でendpoint
を変更して動くようになった。みんな普通に動いているのかな
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を利用するためには
https://slack.com/api/chat.postMessage?token=xoxp-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXX&channel=XXXXXXXXX&text=XXXXX&username=XXXXX'
のようにリクエストを送る必要がある。
時間があればpull requestしたい。(あと20分で書き終えなければ...)
2014/12/16 追記
sowawaさんにmergeして頂いた。感謝
設定
- /etc/td-agent/td-agent.conf
<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 rtm true token 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>
こんな感じでAccepted
、failure
、Invalid
の文字列を
sonotsさんがつくったfluent-plugin-grepを利用して抽出。
そうすると
こんな感じで通知されてくる。セキュリティを気にする環境では
このような設定を入れておくと良いのではないでしょうか。