uptime-kumaを使って30分で死活監視画面をつくってみる
背景
- ハニーポットの稼働状況について、正確な稼働時間を把握するための死活監視を行いたい
- Grafana/Prometheus でもいいが何度か使ったのと、シンプルに重い
- マイニング等に利用されていないか監視するために使うのはありかもしれない(それはまた別の話)
- お手軽に始められるものはー?ってChatGPTに聞いてみた
- uptime-kumaをお勧めされた
uptime-kumaとは?
uptime-kumaはシンプルな死活監視OSSです。
以下のようなことができます。
- 端末の死活監視(HTTP/HTTPS)
- 死活監視情報の表示(データの集約)
- 死活監視結果の通知
- ログイン(1ユーザまで)・2段階認証
権限設定が必要であったり、詳細な稼働状況についてはGrafana/Prometheusを使うと良いと思います。
How to Start
めちゃくちゃ簡単です。
インストール
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
初期設定
インストールが完了し、http://{myip}:3001を開くとスタート画面が表示されます。

SQLiteにしようかと思いましたが、インストールした時点で組み込みのMariaDBが設定されているらしいので、逆らわず、MariaDBにしました。
ユーザを適当に追加すると、すぐにダッシュボードが表示されます。日本語!

監視設定
左上のAdd New Monitorから監視対象を追加できます。

自分はDiscordをよく使うので、DiscordのWebhookを利用した通知を設定しました。
DiscordのWebhookについては、サーバ設定から連携サービスを開きURLを入手できます。

ダッシュボード
パブリックに公開できるダッシュボード機能というのもあるみたいです。
右上のStatus Pageをクリックし、New Status Pageを選択します。
自分はこんなページを公開してみました
公開時のセキュリティ
自分の場合はCloudFlare Tunnelをインストールしている機器だったので、それを利用して公開しています。

一方でこの場合、https://sv.ngstk.jp/dashboardが保護されていないため、ログイン画面に誰でもアクセスできてしまいます。
自分はCloudFlare WAFを利用して、/dashboardへのアクセスを全てブロックするようにしました。公開方法に合わせて、適切な措置を講じてください。

ブロックされましたね。

セキュリティについて追記
よくよく考えてみると、このアプリはSPAでWebsocketを利用して情報を更新しています。つまり、dashboardの保護のみでは、表示上は制限されているものの、保護としては不十分です。
Burp-Suiteを利用して通信を解析すると、公開用のダッシュボードはHTTPのAPIエンドポイントのみしか利用していないことがわかりました。

そこで以下のようにWAFルールを更新しました。

まとめ
- uptime-kumaを使ってみました。初めて触りましたが、インストールやUIが非常にわかりやすかったです。今後も積極的に利用していこうと思います。
- 話はそれますが、アクセス制限について、今回のようなケースではどのようにWAFルールを書くのか、あるいはもっとスマートにアクセス制限をする方法について調べてみようと思いました。
それでは!🐙
Discussion