Skip to content

Instantly share code, notes, and snippets.

@dzeyelid
Created April 12, 2020 03:01
Show Gist options
  • Save dzeyelid/e4989a731a42112ee5a23417dc6adca8 to your computer and use it in GitHub Desktop.
Save dzeyelid/e4989a731a42112ee5a23417dc6adca8 to your computer and use it in GitHub Desktop.
Node-RED v1.0.x で sshd のログを監視するフローのサンプルです。

概要

Node-RED で sshd のログを監視するフローのサンプルです。

このフローは、Ubuntu の /var/log/auth.log を監視し、不正なSSHログインを検知します。検知すると Slack へ通知し、不正ログイン状況を集計してダッシュボードに表示します。

動作環境

使い方

準備

インストール

Node-RED および、記録に使う SQLite をインストールします。

# Node.js をインストールする
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

# Node-RED をインストールする
sudo npm install -g --unsafe-perm node-red

# SQLite コマンドをインストールする
sudo apt-get install sqlite

データベースの準備

monitor-logs.db を作成し、その中に invalid_users テーブルを作成します。

# データベースファイルを新規作成し、CREATE TABLE を実行する
sqlite3 ~/monitor-logs.db

sqlite> CREATE TABLE invalid_users (timestamp TIMESTAMP NOT NULL PRIMARY KEY, user VARCHAR(32) NOT NULL, address_from VARCHAR(15) NOT NULL);
sqlite> .exit

Node-RED の準備

Node-RED を起動します。

# Node-RED を起動する
node-red

http://<サーバーIP>:1880 にアクセスし、Node-RED の右上のメニューから「パレット管理」を開き、下記のノードを追加します。

  • node-red-node-sqlite
  • node-red-dashboard

Node-RED の右上メニューの「読み込み」>「クリップボード」を開き、上記 flow.json の JSON を貼り付けて読み込みます。

Slack 通知の準備

下記を参考に Incomming WebHooks を追加します。

  1. 「Slack に通知」ノードWのプロパティを開き、「URL」に Slack の WebHook URL を入力して完了ボタンをクリックしてください。
  2. 「通知メッセージを作成する」ノードのプロパティを開き、適宜テンプレートを編集してください。(http://localhost:1880/ui/ は Node-RED ダッシュボードのURLです。アドレスを適宜設定してください。)
{
    "text": "Attacked from `{{ payload.address_from }}` as `{{ payload.user }}` !",
    "attachments": [
        {
            "fallback": "Click <http://localhost:1880/ui/|here> to see detail.",
            "actions": [
                {
                    "type": "button",
                    "text": "See all :thinking_face:",
                    "url": "http://localhost:1880/ui/"
                }
            ]
        }
    ]
}

デプロイして、様子をみましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment