Ryota

← プロジェクト一覧に戻る

Minecraftサーバー Web管理パネル

Webブラウザ経由でMinecraftサーバーをセキュアに管理するシステム開発。

TECHNICAL STACK

  • バックエンド: Python (Flask)
  • データベース: Google Firebase (Authentication, Firestore)
  • フロントエンド: HTML, CSS, JavaScript (フルスクラッチ)
  • プロトコル: RCON (間接的に利用)

1. 課題と開発コンセプト

従来のMinecraftサーバー管理は、SSH接続やリモートデスクトップ、複雑なコマンド操作が必要であり、管理者間の共同作業や、外出先からの操作が困難でした。

この課題に対し、Webブラウザで直感的かつ権限に基づいた操作を可能にする管理パネルを、Python/Flaskを核として開発しました。特に、セキュリティ権限管理を最重要視し、機密性の高いサーバー情報を守る設計を採用しました。

2. システム構成とセキュリティ設計

① 厳格な権限分離とロールベースアクセス制御 (RBAC)

  • 二重認証: Firebase AuthenticationによるMicrosoftアカウント連携を基本とし、さらにマイページからパスワード設定を可能にすることで、利便性とセキュリティを両立。
  • 高度な権限管理: サーバー管理者によるユーザー・サーバー間のアクセス権限割り当てに加え、「ログ閲覧者グループ」を導入。管理作業権限と閲覧権限を完全に分離することで、最小権限の原則を実装しました。

② Flask APIによる機密データのフィルタリングと通信制御

  • RCONの分離: 管理サイトと各Minecraftサーバー間の通信を、Flaskで作られた単一のAPIが仲介。サーバー個別のRCONポートに直接Webからアクセスできない設計。
  • 機密情報の通信制御: サーバーのディレクトリ構造、ポート番号、プレイヤーIPアドレスなど、セキュリティ上非公開とすべき情報は、API側でフィルタリング(`< < < < <セキュリティ上非公開> > > > >`への置換)を行います。
  • データ非送信: `config`や`server.properties`の機密部分も、そもそもユーザー側のフロントエンドにはデータを送信しない仕組みをAPI側で徹底することで、通信傍聴による情報漏洩リスクをゼロにしました。

3. 主な機能と実装詳細

ログ確認機能(閲覧者グループ)

サーバーの管理権限を持たない一般プレイヤーを特定の「閲覧者グループ」に追加することで、ログの確認のみを許可。権限分離を徹底し、管理作業なしでサーバーの状況把握を可能にしました。

サーバー起動・停止

誤操作防止のため、停止ボタンには今日の日付入力を必須化。Firestoreでサーバーのステータス(起動中/停止中)をリアルタイムに管理。

Mod 管理

`/mods`内のファイルを一覧表示、有効化/無効化、アップロードを可能に。サーバーの動作に直結するアドオンの柔軟な管理を実現しました。

Config ファイル編集

`/config`内のファイルを一覧表示・編集可能。ただし、LuckPermsなど機密性の高いファイルは非表示指定することで、情報漏洩を防ぐ工夫をしています。

World データ編集

Worldデータのダウンロードは広範囲のユーザーに許可しつつ、アップロード/削除は個別権限設定が必要な設計にすることで、データの安全性を確保しました。

設定ファイル編集 (server.properties)

Web管理に適さない機密性の高い設定(RCONポートなど)は表示せず、`allow-flight`などの一般的な設定項目のみを安全に編集できるインターフェースを提供。

4. 成果と今後の展望

このプロジェクトを通じて、ユーザーの利便性を高めるWebインターフェース設計に加え、認証・認可の仕組みセキュアなAPI設計といったバックエンドの核心的な技術を深く習得できました。 特に、単一のAPIを介して複数の物理サーバーを制御するプロキシ設計は、情報科学の知識を実践的に応用した事例として大きな学びとなりました。