Pi Web セキュア リモート アクセス: SSH トンネリング、リバース プロキシ、認証リスクなし

Pi Web の安全なリモート アクセス: SSH トンネル、リバース プロキシ、認証リスクなし。構成、認証、権限境界、フェイルバック、長期メンテナンスをカバーします。

Pi Web のこのチュートリアルでは、タイトルにある特定のタスクのみを扱います。 Pi Web はデフォルトで 127.0.0.1 のみをリッスンし、アプリケーション層認証を持ちません。高い特権のエージェントを呼び出すことができるため、リモート アクセスには 0.0.0.0 に直接バインドするのではなく、SSH ローカル転送が推奨されます。

以下のすべての操作は、最初に、ループバックアドレスのみでリッスンするテストリポジトリ、テスト アカウント、またはサービスに配置されます。コマンド内のドメイン名、ユーザー名、パス、およびキーはプレースホルダーであるため、実行前に置き換える必要があります。

まず、Pi Web の非認証境界を理解します。

このセクションでは、「まず Pi Web の非認証境界を理解する」という問題を解決します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi Web の場合、判断基準は次のとおりです。Pi Web はデフォルトで 127.0.0.1 のみをリッスンし、アプリケーション層認証を持ちません。高い特権のエージェントを呼び出すことができるため、リモート アクセスには 0.0.0.0 に直接バインドするのではなく、SSH ローカル転送が推奨されます。この段階で誤ってさらに許可を開かないでください。

1
netstat -ano | Select-String '30141'

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

Node.js 22.19 バージョンの確認

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
node --version

ここでの完了基準は、インターフェイスが表示されることではなく、「Node.js 22.19 バージョン チェック」で再現可能な結果が得られることです。

ループバック監視を継続してサービスを開始します

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
ループバック監視を継続してサービスを開始する 入出力スコープをクリアする 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
npx @agegr/pi-web@latest --hostname 127.0.0.1 --port 30141 --no-open

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

SSH ローカルポート転送のフルパス

「SSHローカルポートフォワーディングのフルパス」を中心に成功サンプルと失敗サンプルを用意します。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
ssh -L 30141:127.0.0.1:30141 user@server

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

ポートがこのマシンでのみ開いていることをクライアントから確認します

このセクションでは、「このマシンでのみポートが開いていることをクライアントから確認する」という問題を解決します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi Web の場合、判断基準は次のとおりです。Pi Web はデフォルトで 127.0.0.1 のみをリッスンし、アプリケーション層認証を持ちません。高い特権のエージェントを呼び出すことができるため、リモート アクセスには 0.0.0.0 に直接バインドするのではなく、SSH ローカル転送が推奨されます。この段階で誤ってさらに許可を開かないでください。

1
curl.exe http://127.0.0.1:30141

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

マルチユーザーサーバーでセッションファイルを分離する方法

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
Get-ChildItem -Force $env:USERPROFILE\.pi -ErrorAction SilentlyContinue

ここでの完了基準は、インターフェイスが表示されることではなく、「マルチユーザー サーバーがセッション ファイルをどのように分離するか」が再現可能な結果になることです。

0.0.0.0 を直接使用することが推奨されないのはなぜですか?

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
0.0.0.0 を直接使用することが推奨されない理由 入出力スコープをクリアする 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
pi-web --hostname 127.0.0.1 --port 30141 --no-open

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

逆生成が必要な場合は、どのような保護を追加する必要がありますか?

「レトロジェネレーションが必要な場合にどのような保護を追加するか」を中心に成功サンプルと失敗サンプルを用意します。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
caddy validate --config Caddyfile

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

プロキシ環境変数をサーバーリクエストに渡す方法

このセクションでは、「プロキシ環境変数をサーバーリクエストに渡す方法」を解決します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi Web の場合、判断基準は次のとおりです。Pi Web はデフォルトで 127.0.0.1 のみをリッスンし、アプリケーション層認証を持ちません。高い特権のエージェントを呼び出すことができるため、リモート アクセスには 0.0.0.0 に直接バインドするのではなく、SSH ローカル転送が推奨されます。この段階で誤ってさらに許可を開かないでください。

1
2
3
$env:HTTP_PROXY='http://127.0.0.1:7890'
$env:HTTPS_PROXY=$env:HTTP_PROXY
$env:NO_PROXY='localhost,127.0.0.1'

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

トンネルが切断され、オンラインでページが正しく表示されない

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
Test-NetConnection 127.0.0.1 -Port 30141

The completion criterion here is not that the interface appears, but that “tunnel disconnection and page false online” have repeatable results.

Close the service and clean up the remaining ports

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
Shut down services and clean up remaining ports 入出力スコープをクリアする 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
Get-NetTCPConnection -LocalPort 30141 -ErrorAction SilentlyContinue

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

リモートアクセス受け入れチェックリスト

Prepare a success sample and a failure sample around the “Remote Access Acceptance Checklist”.成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
curl.exe -I http://127.0.0.1:30141

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

SSH 転送アカウントを制限する

This section addresses “Restricting SSH forwarding accounts”.まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi Web の場合、判断基準は次のとおりです。Pi Web はデフォルトで 127.0.0.1 のみをリッスンし、アプリケーション層認証を持ちません。高い特権のエージェントを呼び出すことができるため、リモート アクセスには 0.0.0.0 に直接バインドするのではなく、SSH ローカル転送が推奨されます。この段階で誤ってさらに許可を開かないでください。

1
ssh -v -L 30141:127.0.0.1:30141 user@server

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

Pi セッション ファイルのバックアップ境界

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
Get-ChildItem -Force $env:USERPROFILE\.pi -ErrorAction SilentlyContinue

The completion criterion here is not that the interface appears, but that there are reproducible results for “Backup Boundaries of Pi Session Files”.

Immediately deactivate routing if reverse-generation authentication fails

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
Immediately deactivate routing if anti-generation authentication fails 入出力スコープをクリアする 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
caddy stop

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

アップグレード後にリスニング アドレスを確認する

Prepare a success sample and a failure sample around “Recheck listening address after upgrade”.成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
Get-NetTCPConnection -LocalPort 30141 -ErrorAction SilentlyContinue

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

Pi Web に関するよくある質問

Is it possible to skip the test environment and use Pi Web directly in the official project?

お勧めしません。まず、少なくとも 1 つの最小限の成功リクエスト、1 つの意図的な失敗、および 1 つの回復訓練を完了します。

Pi Web command can be run but the result is wrong, where to check first?

まず入力範囲、実際の有効構成、および上流の応答を確認し、次にモデルの概要を確認します。プロセスが正常であっても、ビジネス結果が正しいとは限りません。

How to prevent Pi Web keys or tokens from entering Git?

システム環境変数、シークレット管理、またはプロジェクト外部の構成ファイルを使用し、コミットする前に差分を検索します。侵害が発見された後は、キーをローテーションする必要があります。

What is the most common thing to miss when upgrading Pi Web?

最も見逃しやすいのは、構成形式、デフォルトのリスニング アドレス、アクセス許可の範囲、キャッシュの互換性です。アップグレードする前に、バージョンと検証サンプルを保存してください。

Pi Web の受け入れに関する問題

完了すると、次の質問に答えられるようになります。

  • 正確にどのバージョンを使用していますか?
  • どのディレクトリ、ポート、アカウント、外部サービスにアクセスできますか?
  • 成功結果を元のデータまたは Git diff に戻すにはどうすればよいですか?
  • アップストリームに障害が発生した場合、エラーが報告されるか、再試行されるか、または切り替えられますか?
  • キーがログまたは履歴に表示される可能性はありますか?
  • 10分以内に修正前の状態に戻すにはどうすればよいですか?

これらのいずれかに回答できない場合、Pi Web はまだ試用段階にあるため、権限を拡張したり、実稼働自動化を利用したりすべきではありません。