Node-RED で sshd のログを監視するフローのサンプルです。
このフローは、Ubuntu の /var/log/auth.log
を監視し、不正なSSHログインを検知します。検知すると Slack へ通知し、不正ログイン状況を集計してダッシュボードに表示します。
- Ubuntu 18.04 LTS
- 1880 ポートを開放
- Node.js LTS 12.x (v12.16.2)
- Node-RED (v1.0.5)
- SQLite
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
http://<サーバーIP>:1880
にアクセスし、Node-RED の右上のメニューから「パレット管理」を開き、下記のノードを追加します。
- node-red-node-sqlite
- node-red-dashboard
Node-RED の右上メニューの「読み込み」>「クリップボード」を開き、上記 flow.json の JSON を貼り付けて読み込みます。
下記を参考に Incomming WebHooks を追加します。
- 「Slack に通知」ノードWのプロパティを開き、「URL」に Slack の WebHook URL を入力して完了ボタンをクリックしてください。
- 「通知メッセージを作成する」ノードのプロパティを開き、適宜テンプレートを編集してください。(
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/"
}
]
}
]
}
デプロイして、様子をみましょう。