VPSに3X-UIパネルをインストールする方法
Ubuntu上で3X-UI Xrayパネルを本番運用向けに導入する完全ガイド。Web管理画面の保護、TLSの発行、VLESS Realityインバウンドの作成、ユーザー管理、デスクトップとモバイルでのクライアント接続までを解説します。

3X-UIはXray-core向けのWebパネルです。インバウンド(VLESS、VMess、Trojan、Shadowsocksなど)の管理、サブスクリプションリンクの発行、トラフィック上限と有効期限の設定、ライブ接続の確認を、JSONを手で編集せずに行えます。すでにVPSを運用している人にとっては、半年後に誰も触れない一度きりの設定ではなく、維持できるプロキシ構成を最短で用意する手段のひとつです。
このガイドは、HiddenceのLinuxイメージを初回起動した直後によく見られる、まっさらなUbuntu 22.04または24.04のVPS向けに書いています。広く使われているMHSanaei版3X-UIを入れ、初回ログインでデフォルトの秘密情報をすべて変え、パネルをHTTPSの後ろに置き、実際に必要なポートだけを開き、VLESS + Realityのインバウンドを作り、クライアントアプリまで順を追います。すでにMarzbanの記事を読んだ人には、Xrayの上に載るパネルという発想は似ています。ただしインストール手順、ファイル配置、日常の運用は違うので、ポートの分け方をよく理解していない限り、同じサーバーに両方を混ぜないでください。
素のXray設定ではなく3X-UIを使う理由
素のXray設定は、ユーザーが一人でインバウンドも一つのときは十分です。友人を追加し、Realityの鍵をローテーションし、スマートフォンがワンタップで取り込めるサブスクリプションURLが必要になった瞬間、パネルは何時間も節約してくれます。3X-UIはユーザーをローカルデータベースに保存し、変更後にXrayをきれいに再起動でき、トラフィックとオンライン状態のコンパクトなダッシュボードを出します。それ自体が魔法の匿名レイヤーではありません。VPSの所在地、TLSフィンガープリント、インバウンドの種類、そして運用上の衛生が、ネットワーク上の振る舞いにまだ効いてきます。
- 手編集のJSONではなく、インバウンド・クライアント・トラフィック・有効期限を扱うWeb UI
- v2rayN、v2rayNG、Streisand、Happなどのクライアント向けサブスクリプションリンクを内蔵
- ワンコマンドインストールと、文書化された更新手順
- 小型VPSでも十分(個人利用なら1 vCPU / 1 GB RAMで足りる)
- サーバーのrootは自分のまま。パネルが設定を第三者クラウドへ送ることはない
始める前に必要なもの
ドメインとファイアウォールの準備を飛ばさないでください。ポート2053のHTTPにデフォルトパスワードのまま置いたパネルは、数時間以内にボットにスキャンされます。次の項目を用意してから、SSHでroot(またはsudoユーザー)として接続します。
- パブリックIPv4アドレス付きのLinux VPS(Ubuntu 22.04/24.04推奨)
- RAM 1 GB以上、ディスク 10 GB以上。他サービスも動かすなら2 GBの方が楽
- SSH経由のrootまたはsudo権限
- VPSのIPを指すAレコード付きのドメインまたはサブドメイン(パネル用の正式な証明書に必要)
- 約20〜30分。Aレコードを今作ったばかりなら、DNSの待ち時間も加算
ステップ1:システムを更新し、タイムゾーンを設定する
新品のVPSには未適用のセキュリティ更新が残っており、時計はUTCのことが多いです。インストーラーが古いOpenSSLやcurlと戦わないよう、まずパッケージを更新します。タイムゾーンはXray自体には必須ではありませんが、パネルのログと証明書の有効期限がずっと読みやすくなります。
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl wget ca-certificates gnupg socat tar unzip
timedatectl set-timezone UTC
hostnamectl set-hostname panel
# Confirm DNS for your subdomain (should print your VPS IP):
dig +short panel.example.comステップ2:3X-UIをインストールする
MHSanaei版3X-UIの公式インストールスクリプトは最新リリースを取得し、Xray-coreを入れ、systemdサービスを作り、初回ログイン用URLを表示します。出力をよく読んでください。ランダムなパスと、生成されたユーザー名/パスワードが入っています。すぐパスワードマネージャーへコピーします。パネルのポートを聞かれたら、2053のままでも未使用の高番号ポートでも構いません。ファイアウォールの手順で使うので、選んだ値を覚えておいてください。
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# After install, useful commands:
x-ui # interactive menu (start/stop/restart, reset, update)
systemctl status x-ui # confirm the service is active
ss -tulpn | grep x-ui # see which port the panel listens onステップ3:初回ログインと、すぐ行う強化
インストーラーが表示したURLを開きます。多くの場合は http://YOUR_IP:2053/<random-path> です。生成された資格情報でログインし、Panel Settings(またはConfiguration)へ進みます。ユーザー名とパスワードを一意の値に変えます。Webのベースパスを変えられるなら変えてください。長いランダムパスは通りすがりのスキャンを大きく減らします。2053以外にしたいならリッスンポートも設定します。保存し、UIからか systemctl restart x-ui でパネルを再起動し、新しいURLでもう一度ログインします。
次に、ビルドが提供していれば二要素認証を有効にし、使わないインバウンドテンプレートは無効にします。Xrayの設定では、別ビルドを固定する明確な理由がない限り、パネル同梱のコア版のままにします。あとでRealityやリバースプロキシが80/443を使う予定なら、今はパネルをそれらのポートに出さないでください。戦略を一つ選んで、それを守ります。
- 生成された管理者ログインはすぐに置き換える
- 秘密のWebパスは残し、パネルを / へ移さない
- デフォルト以外のパネルポートを優先し、記録しておく
- このパスワードを他サービスで使い回さない
ステップ4:パネル用のTLS証明書
ブラウザはHTTPで警告を出し、公衆網で管理者パスワードを平文送信するのは悪手です。ポート80が空いていてドメインがこのVPSを指していれば、3X-UIはLet's Encryptの証明書を要求できます。パネルの証明書 / SSLセクションを開き、panel.example.com を入れて証明書を要求します。ポート80がすでに使われている場合は、DNS-01の流れを使うか、Caddy/Nginxを手前に置いて 127.0.0.1:2053 へリバースプロキシします。
# Quick check that port 80 is free before the panel ACME challenge:
ss -tulpn | grep ':80'
# If you terminate TLS on Caddy instead of inside 3X-UI:
# Caddyfile example (panel stays on 127.0.0.1:2053):
# panel.example.com {
# reverse_proxy 127.0.0.1:2053
# }ステップ5:VLESS Realityインバウンドを作成する
Inboundsで新しいインバウンドを作ります。多くのネットワークで堅実な既定は、VLESSにRealityとTCPです。パネルポートではないポートを選びます。他がバインドしていなければ443が一般的です。そうでなければ高いTCPポートを使い、ファイアウォールと揃えます。最初のクライアント用にUUIDを生成し、UIでRealityの鍵ペアを作り、dest / serverNames にはなりすましてよい正規の対象(TLS 1.3をサポートするよく知られたサイト)を設定します。インバウンドを保存し、パネルログでXrayがエラーなくリロードされたことを確認します。
必要ならそのインバウンドにクライアントを追加します。各ユーザーにUUID、任意のメールタグ、任意のトラフィックまたは時間制限が付きます。ユーザー行から接続リンクまたはサブスクリプションURLをコピーします。公開チャットにそれらのリンクを貼らないでください。パスワードと同じです。
# On the server, confirm Xray is listening on the inbound port (example: 443):
ss -tulpn | grep -E ':443|:2053'
# Follow Xray logs if a client cannot connect:
journalctl -u x-ui -fステップ6:ファイアウォール — 必要なポートだけ
UbuntuならUFWで十分です。締め出されないよう先にSSHを許可し、次にパネルポートとインバウンドポートです。パネルからLet's Encrypt証明書を要求したなら、発行中は80/tcpも許可します。443のRealityインバウンドには443/tcpが必要です(同じポートにパネルは置かない)。
ufw allow OpenSSH
ufw allow 2053/tcp comment '3x-ui panel (change if you picked another port)'
ufw allow 443/tcp comment 'VLESS Reality inbound'
# ufw allow 80/tcp comment 'only if panel ACME needs it'
ufw enable
ufw status verboseクライアントを接続する
Windowsでは、v2rayNがクリップボードのVLESSリンクを取り込みます。Androidでは、v2rayNGなどのXrayクライアントがQRコードから同じことをします。iOSでは、VLESS Realityに対応したクライアント(例: StreisandやHapp。地域で入手できるものによる)を使います。取り込み後にプロファイルを有効にし、パネルのオンライン一覧を確認します。クライアントがオフラインのままなら、よくある原因はポート間違い、TCP専用インバウンドなのにUDPがオン、destと一致しないRealityのserverName、ノートPC側のローカルファイアウォールです。
- Windows: v2rayN — VLESSリンクを取り込み、ルーティングを必要に応じて設定(グローバル対ルールベース)
- Android: v2rayNG — パネルのユーザーページからQRをスキャン
- macOS / iOS: VLESS + Reality対応クライアント。同じリンクを貼り付け
- サブスクリプションURL: クライアントに追加すれば、UUIDのローテーションでも手動の再取り込みが不要
更新、バックアップ、再インストール時の安全
パネルを更新する前に、毎回UIからバックアップ(データベース + 設定)をダウンロードします。VPSの外に保管します。更新は通常、x-uiのあとにメニューの更新オプション、または既存インストールを検出する同じインストールスクリプトです。更新後、systemdサービスがactiveであることと、インバウンドがまだ待受していることを確認します。OSを再インストールした場合は、UUIDを手で作り直すのではなく、パネルでバックアップを復元します。
x-ui # choose update when prompted, or:
# bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# Backup files commonly live under /etc/x-ui/ — copy them off-box:
ls -la /etc/x-ui/
# Example offsite copy:
# scp -r /etc/x-ui/ you@backup-host:~/x-ui-backup-$(date +%F)/トラブルシューティング
初日の失敗のほとんどはDNS、ポート、Realityの欄です。パネルを再インストールする前にこのリストを順に確認してください。バックアップなしの再インストールは、すべてのクライアントUUIDを失う典型的なやり方です。
- Web UIが開けない: systemctl status x-ui、ss -tulpn、UFWを確認。URLに秘密パスが含まれているかも確認。
- 管理者パスワードを忘れた: サーバーでx-uiを実行し、リセットオプションを使う。
- クライアントはつながるが止まる: インバウンドポートがブロックされている、またはTCP RealityインバウンドでUDPを有効にした。
- パネルのTLSエラー: ドメインのAレコードがまだここを指していない、またはACME中にポート80が塞がっている。
- Realityのハンドシェイク失敗: dest/serverNamesの不一致、または別サービスがすでに443にバインド。
- CPUが高い: 1 vCPUプランにインバウンドが多すぎる、または開いたポートへのスキャン/フラッド — ssとパネルのオンライン数を確認。
実際に効くセキュリティ上の注意
パネルは本番の管理ソフトウェアとして扱ってください。新規ユーザーを発行でき、すべてのUUIDを読めます。Webポートに届ける相手を制限します。安定したオフィスIPがあるなら、UFWで2053/tcpはそのIPだけ許可します。SSHはパスワードではなく鍵にします。443でRealityを使うなら、同じIPで無関係な公開サイトを動かさないでください。1ポート上の競合するTLSスタックは障害の定番です。パネルのスクリーンショットがチャットに漏れたら、管理者パスワードをローテーションします。
- SSHは鍵のみ。鍵が通ったらパスワードログインを無効化
- できるときはファイアウォールでパネルポートを制限
- /etc/x-ui をサーバー外へ定期バックアップ
- 公開TelegramグループにサブスクリプションURLを共有しない
- ディスクを監視: 忙しいインバウンドではログとトラフィック統計が増える
実務的なヒント
- ほぼ同じインバウンドを10個より、クライアント多数のインバウンド1つの方が運用しやすい
- クライアント名は端末単位(laptop-anna、phone-ben)にするとトラフィックチャートが意味を持つ
- ウェブサイト用のリバースプロキシも必要なら、サイトは別IPか別ポートへ。443をRealityと奪い合わない
- x-uiを再起動したら、SSHセッションを切る前にクライアント1台で確認
- 更新前にchangelogを読む。金曜の夜に『latest』へ飛ばない
これで3X-UIがsystemdサービスとして入り、管理URLは締められ、パネルにはTLSがあり、VLESS Realityインバウンドがあり、それらのポートに合ったファイアウォール規則があり、バックアップの習慣もあります。インバウンドページからクライアントを追加し、各端末でリンクを取り込み、バックアップ後にだけパネルを更新してください。壊れたときは、フル再インストールではなく、VPS上のx-uiメニューが復旧経路です。