MulmoTerminal の localhost 専用束縛 — カフェ Wi-Fi の隣席からコードを覗かれないようにする仕組み

MulmoTerminal の localhost 専用束縛 — カフェ Wi-Fi の隣席からコードを覗かれないようにする仕組み

課題:ブラウザで AI を見張っていると、同じ Wi-Fi の人に届かないか気になる

カフェの窓際で、ノートパソコンのブラウザに localhost:34567 と打ち込みます。画面に九つのマスが並んだ格子が出て、三つで AI がコードを書いている。一つは「このファイルを消していいですか」で止まっていて、枠が琥珀色に光っている。

二つ隣のテーブルの人も、同じ店の Wi-Fi に繋がっています。その人が自分のノートを開いて、こちらのパソコンのアドレスを打ち込んだら、画面に何が出るのでしょうか。

ターミナルだけで作業しているときは気になりません。黒い画面はそのパソコンの中の話です。ブラウザベースのツールに切り替えた瞬間、「どこかがポートを開けている」ことが気になり始めます。しかも AI が入っている画面です。プロジェクトのファイル名、会話の中身、直しかけのコード。それが同じ店の Wi-Fi から見えていたら、かなりいやです。

届いてしまった場合、相手に何ができるか

もし繋がったとしたら、まず九つのマスが眺められます。ディレクトリ、ブランチ、AI とのやりとり。それだけでも十分いやですが、本題はその先です。

空いているマスで新しいターミナルを開けます。 そこで打つコマンドは、こちらのパソコンで、こちらの権限で動きます。鍵のファイルを読むのでも、外へ送るのでも、消すのでもかまいません。

公式ガイドの表現を借りると、ソケットが開けば「会話の閲覧」「作業ディレクトリ配下のファイル閲覧」「ターミナルの起動」ができてしまう。三つ目が決定的です。ポートに届くことが、そのパソコンのシェルを手に入れることと同じになっています。

ログイン画面があれば話は違います。でもこのアプリにログインはありません。入口そのものが無いので、届かせないことが唯一の守りになっています。

既存のやり方とそのコスト

「とりあえず 0.0.0.0 で立てる」

Docker や SSH 越しに使うガイド記事が増えて、HOST=0.0.0.0 でサーバを立てる習慣が広がりました。「開発環境だから」という前置き付きで。

ただ、0.0.0.0 に認証を足し忘れたサーバが放置されたら、ホテルの Wi-Fi で開いた瞬間に全開です。認証を足すのが面倒だから、127.0.0.1 だけで待ち受ける作りにしておく、というのが本来の優先順位。

VPN や SSH トンネルを前提にする

もう一つの対処は「個人の責任」に逃がすこと。ツール側は何もせず、ユーザが VPN や ssh -L を張る前提にする。

これは出張先や共用ネットワークで事故ります。急いでいるとき、動けばいい、で 0.0.0.0 にする。ツール側に安全な既定が無いと、ユーザは最短の近道を選びます。

MulmoTerminal の解決:既定で 127.0.0.1 のみ、広げるには環境変数が 2 つ必要

MulmoTerminal は起動時に何も指定しなければ、ループバックアドレスだけで待ち受けます。

      あなたのパソコン                   同じ Wi-Fi の他の人
  ┌──────────────────────┐
  │  MulmoTerminal       │
  │  127.0.0.1:34567 ←───┼── あなたのブラウザ  ○ 見える
  │                      │
  │                  ✕───┼── 隣の席のノート    ✕ 届かない
  └──────────────────────┘
        待ち受けているのは「このパソコンの中」だけ

隣の席どころか、同じ家の別の部屋からも繋がりません。Wi-Fi に何人いても、ポートを探して回るプログラムが動いていても、届きません。

冒頭の不安への答えは、何かを設定したから安全なのではなく、何も設定しなかったから安全です。触っていないなら、そのままで正しい。

詳細

広げるには二か所を自分で書く — 片方だけでは動かない

意図して外から繋ぐこともできます。環境変数が 2 つ必要です。

① どこで待ち受けるか

設定する値 誰が届くか
127.0.0.1(既定) このパソコンだけ
0.0.0.0 全部のネットワークから
特定のアドレス そのネットワークだけ

② どのオリジンからの接続を許すか

MULMOTERMINAL_ALLOWED_ORIGINS=http://192.168.1.10:34567

片方だけ変えても動きません。両方を自分で書かないと外に出ない設計です。一か所間違えて全開になる、ということが起こらない。

MULMOTERMINAL_HOST=localhost では油断できない

いかにも安全そうに見える指定ですが、localhost がどのアドレスを指すかは、パソコンの hosts というファイルで書き換えられます。そこで 0.0.0.0 に向けておけば、設定には localhost と書いてあるのに全開。

MulmoTerminal はここを取り違えません。判定に使うのは、設定ファイルに書かれた文字列ではなく、起動して実際に束縛されたアドレスです。それが 127.0.0.1 でなかったら、起動時に警告を出します。

起動時の警告は、気づける唯一の瞬間

警告を出す理由は、考えると当たり前です。ポートが外に開いていることは、誰も繋ぎに来ていないあいだは何の症状も出しません。動作は完全に正常。気づけるのはネットワークを調べたときか、何かが起きたあと。後者では遅いので、起動のたびに言う。

自分の設定がいま安全かどうかどこで分かるのか、への答えがこれです。 起動時のメッセージに [security] の警告が出ていないなら、外には出ていません。

スマホから見たいだけなら、ポートを開ける必要はない

「外から見たい」の中身が「スマホから見たい」なら、ポートを開ける必要はありません。

MulmoTerminal には RemoteHost という別経路があります。Google アカウントでサインインして、スマホは mulmoserver.web.app を開く形。こちらには認証があります。しかも、通知を受けるだけでなく、AI の許可プロンプトに外出先から yes と返して続行させられます。

選択肢はこうなります。

後者を選ぶなら前提が 1 つ。そのネットワークにいる全員を信用できること。カフェ・空港・ホテル・コワーキングの Wi-Fi では、選ばないほうがいいです。

Docker で別マシンに置くときの正しい形

公式の Dockerfile 例では、コンテナの中で MULMOTERMINAL_HOST=0.0.0.0 にします。コンテナの外からコンテナの中に届かせるためで、「公開」の層ではありません。

docker run -p 127.0.0.1:34567:34567 ...

-p 127.0.0.1:34567:34567 で、ホストマシンの 127.0.0.1 だけに公開する。この二段構えで、[security] の警告は出つつも、実際に届くのはホストマシンのループバックからだけ、になります。SSH トンネル経由ならそれで十分。

使ってみる

既存のインストールであれば、何もしなくて既定で安全です。確かめ方は、起動したターミナルの最初に出るメッセージ。[security] の警告が無ければ、外には出ていません。

初めての方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。

意図して外に出すときの最小シナリオ

同じ家の別のパソコンから繋ぎたいときだけです。

MULMOTERMINAL_HOST=0.0.0.0 \
MULMOTERMINAL_ALLOWED_ORIGINS=http://192.168.1.10:34567 \
npx mulmoterminal@latest

192.168.1.10 は自分のパソコンのアドレスに置き換えます(Mac なら ipconfig getifaddr en0)。環境変数は 2 つとも必要です。片方だけでは接続は通りません。

起動すると [security] の警告が出ます。想定どおりです。

戻すのは簡単です。環境変数を付けずに起動し直せば、既定の 127.0.0.1 に戻ります。設定ファイルには何も書かれていないので、消すものもありません。

スマホから見たいだけなら、ポートを開ける必要はありません。ツールバーの RemoteHost を開いて Connect、スマホで mulmoserver.web.app を開くだけです。

まとめ

関連: MulmoTerminal 公式ガイドの RemoteHost・Docker ページ / MulmoTerminal のスマホ・リモコン / Cursor の代替としての MulmoTerminal / VSCode + Claude Code の代替としての MulmoTerminal

この記事をシェア

関連記事

記事一覧に戻る