マシンをネットワークから物理的に隔離する 推論
推論マシンをエアギャップ化するとは、すべてのネットワーク接続(ケーブル、Wi-Fi、Bluetooth)をなくし、管理された物理媒体を通じてのみモデルや更新データを取り込むことです。外向きの通信を制御するファイアウォールは有用な防御層ですが、エアギャップではありません。ソフトウェアの設定にすぎないためです。実際の弱点は、外部と通信するソフトウェア(Ollama Cloud、更新、ダウンロード)とUSBメモリです。
機密性が高い一部の場面では、「ローカル」という言葉だけでは不十分です。ローカルマシンもネットワークに接続されたままであり、そのソフトウェアが外部と通信する可能性があります。このガイドでは、真のエアギャップとファイアウォールによる隔離を区別し、LLMスタックの中でデフォルトで外部と通信するコンポーネントと、その通信を止める方法を一覧にまとめています。また、ハッシュ値で検証するUSBメモリ経由のモデル転送を説明し、繰り返し実行できる、外部との通信が遮断されていることを確認するテストを提案しています。
#エアギャップが必要となる場合と、コストがかかりすぎる場合
エアギャップを採用するかどうかは、原則として一律に決めるのではなく、リスク分析に基づいて判断します。採用が妥当なケースは、機密指定されたデータや高度な産業秘密に該当するデータを扱う場合、契約上または業界の要件で隔離ネットワークが明示的に義務付けられている場合、すでにネットワークを隔離している環境にLLMを組み込む必要がある場合、そして極めて機密性の高い案件を扱う専用端末を使う場合(弁護士や研究者など)です。健康情報や金融情報を含む通常の個人データについては、関連する規定は完全な隔離よりもリスクに見合った対策を求めています。暗号化された端末上で、クラウドアカウントを使わずに動かすローカルLLMで、すでにほとんどのニーズを満たせます。企業でのローカルAI活用ガイドとプライバシーチェックリストでは、この中間的な対策レベルを扱っています。
始める前に、3つの点を確認してください。誰が転送を行い、どのくらいの頻度で行うのか。使用するソフトウェア構成では、どのコンポーネントを更新する必要があるのか(Ollama、llama.cpp、インターフェース、モデル)。そして、より新しいモデルが不可欠になったとき、どう対応するのか。手順は例外を設けずに実行できるものでなければなりません。一度認めた例外は、やがて通常のルールになってしまうからです。この3つに答えられない場合は、まず用途ごとに厳格なファイアウォールを備えたオフライン端末を用意し、リスクの大きさから必要と判断できる場合にのみ、隔離を一段強化してください。
#Air-gap、準Air-gap、ファイアウォール:これらを混同しないでください
職場でのローカルAI導入:GDPR、AI Act、マルチユーザーアーキテクチャ、コスト、経営陣向けメモ。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
| レベル | 概要 | 引き続き可能なこと |
|---|---|---|
| 運用上オフラインにしているマシン | アクティブな接続は存在しませんが、ネットワークカードは存在します | 操作ミスやソフトウェアによる再接続は起こり得ます。防げるかどうかは、運用ルールを徹底できるかにかかっています。 |
| 厳格なファイアウォール(デフォルトで拒否、送信も含む) | 外向きの通信をブロックするソフトウェア設定 | 「試しに」追加したルール、システムの脆弱性、制限を迂回するサービス |
| 物理的なネットワーク隔離 | 有効なネットワークインターフェースがない状態:ケーブルは接続されておらず、Wi-FiとBluetoothはファームウェアで無効化されているか、取り外されている | 取り外し可能なメディアによる漏洩;物理的なチャネル(本ガイドの範囲外) |
このガイドでは3つすべてを扱います。ファイアウォールは機密性の高い端末に必要な最小層で、物理的なエアギャップは上位層です。MacではAppleシリコン搭載Macの最適化ガイドがmacOS固有の設定を扱います。Windowsでは原則は同じですが、外部と通信するコンポーネントの制御は最小構成のLinuxほど細かくないため、ここではLinuxを推奨します。
#マシンの準備
- 最小限のシステム構成
- 推論サーバーには、グラフィカルインターフェースのないDebianまたはUbuntu Serverを使います。ブラウザも、アプリストアに接続するパッケージマネージャーも入れません。
- 自動更新サービス
- 更新タイマーを無効にしてください。たとえば、sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer を実行し、知らないうちに接続が試みられないようにします。
- アカウント
- LLMの利用専用のアカウントを設け、sudoの使用は管理者に限定します。
- 無線機能とインターフェース
- Wi-FiとBluetoothはBIOSまたはファームウェアで無効化しておきます。これらの機能を備えたハードウェア自体がない状態なら、さらに望ましいです。ネットワークケーブルは接続しません。
- デュアルブートにしない
- 同じマシンにネットワーク接続用の別パーティションがあると、間接的な経路(スワップファイル、共有ファイル)が生まれます。
- 時刻
- 時計は手動で設定するか、内部の時刻源に合わせてください。公開されている時刻サーバーとの同期は、外向きの通信になります。
- 暗号化ディスク
- ネットワークから隔離した端末でも、盗まれたり押収されたりする可能性があります。ディスクを暗号化してください(専用ガイドを参照してください)。
#LLMスタック内でデフォルトで外部と通信するソフトウェア
物理的に隔離されたマシンでは、これらの呼び出しは失敗しても害はありません。一方、ファイアウォールだけで保護されているマシンや、まだネットワークから切断されていないマシンでは、これらが実際のリスクになります。一般的なローカル環境には、通信を禁止しない限りインターネットにアクセスするコンポーネントが複数含まれています。以下は、公式ドキュメントに基づいて通信を停止できるものです。
| コンポーネント | できること | ドキュメントに記載された設定 |
|---|---|---|
| Ollama | ホストされたモデルとウェブ検索(Ollama Cloud) | OLLAMA_NO_CLOUD=1 または ~/.ollama/server.json に disable_ollama_cloud を設定します。この場合、ログには「Ollama cloud disabled: true」が表示されます。 |
| Ollama(ネットワークへの公開) | ローカル HTTP サーバー | デフォルトでは 127.0.0.1 で接続を待ち受けます。OLLAMA_HOST を変更するのは、外部から隔離された内部ネットワークで使用する場合だけにしてください。 |
| Open WebUI | 更新の確認、Hugging Faceからの埋め込みモデルのダウンロード | OFFLINE_MODE=true(ENABLE_VERSION_UPDATE_CHECKも無効にします);埋め込みモデルを事前にダウンロードしてください |
| Hugging Face ライブラリ(transformers、sentence-transformers) | Hubへの呼び出しで確認またはダウンロード | HF_HUB_OFFLINE=1:HubへのHTTP呼び出しは行われず、キャッシュ内のファイルのみが使用されます |
| ベクトルデータベース | テレメトリが行われる可能性 | Weaviate:DISABLE_TELEMETRY=true;各コンポーネントでも同等の設定項目を確認してください |
Ollamaのドキュメントには、Ollamaをローカルで使用する場合、提供元はリクエストもデータも見ることができないと明記されています。クラウド機能を無効にすると、ホストされているモデルとWeb検索にアクセスできなくなりますが、それこそが目的です。Open WebUIには注意が必要です。ドキュメントでは、OFFLINE_MODEを有効にする前に埋め込みモデルをダウンロードしていないと、RAG、Web検索、文書分析の機能が動作しない可能性があると警告しています。マシンをネットワークから切り離す前に、必要になるものをすべてダウンロードしてください。
#厳格なファイアウォール:受信・送信ともにデフォルトで拒否
ファイアウォールは、物理的な切断に続く第二の防衛線であり、内部ネットワークに接続されたままの端末における唯一の保護手段です。原則は、双方向でデフォルト拒否とし、隔離された内部ネットワークへの明示的な許可をいくつか設けることです。ファイアウォールを有効にする前に許可ルールを作成してください。そうしないと、ご自身のSSHセッションが切断されてしまいます。
ローカルインターフェース(ループバック)のトラフィックは、Ollama および Open WebUI の動作に必要であり、127.0.0.1 で相互に通信しています。ufw status verbose で、設定がこのトラフィックをブロッキングしていないか確認してください。マシンが内部LANに接続されている場合は、ルーター側でも保護を強化してください。インターネットへのルーティングがないVLANを設定してください。
#Ollamaの待ち受け先を確認する
#USBメモリでモデルとアップデートを転送する
隔離されたマシンには、モデル(数 GB から数十 GB)、更新プログラム(Ollama、llama.cpp、Open WebUI)、場合によっては文書を取り込みます。特に注意すべきなのは USB メモリです。これが唯一の入口であり、したがってマルウェアが侵入する唯一の経路でもあります。常に同じ専用の USB メモリを使い、定期的にフォーマットしてください。他の場所で使った USB メモリは決して使用しないでください。
- 01インターネットに接続したマシンでダウンロードするHugging FaceからモデルのGGUFファイルを取得するか、公式サイトから更新用バイナリを取得してください。配布元にSHA-256ハッシュ値が表示されている場合は、記録してください。
- 02ハッシュ値を計算し、ウイルススキャンを行うファイルに対してsha256sumを実行し、その後、隔離されたマシンではなく、この中継マシン上でウイルス対策ソフト(例えばClamAV)を使ってファイルをスキャンしてください。
- 03USBメモリにコピーするファイルと、そのハッシュ値を記載したテキストファイルをコピーしてください。
- 04使用前に隔離されたマシンで確認するネットワークから隔離したマシンでハッシュ値を再計算してください。同じ値である必要があります。値が異なる場合は、ファイルが変更されたか破損していることを意味します。そのファイルは使用しないでください。
- 05OllamaにインポートするFROM /chemin/vers/modele.gguf を記述したModelfileを作成し、その後 ollama create nom-du-modele -f Modelfile を実行してください。OllamaはGGUFのインポート時に量子化を行いません。ファイルはあらかじめ希望する形式で量子化されている必要があります。
代替手法として、接続済みマシンのモデルディレクトリ全体(blobsとmanifestes)を隔離マシンにコピーする方法があります。これは機能しますが、インストール環境によってディレクトリの場所が異なります。Ollama のFAQでは、macOSでは ~/.ollama/models、標準インストーラーによるLinuxでは /usr/share/ollama/.ollama/models、Windowsでは C:\Users\%username%\.ollama\models とされています。単一のGGUFファイル経由で移行する方が、比較すべきフィンガープリントが一つしかないため、検証がより簡単です。import GGUF に関するガイドでは、Modelfileについて詳しく説明しています。
#USBポートのセキュリティを強化する
USBメモリは、キーボードや別の周辺機器になりすますことがあります。LinuxのUSBGuardを一言で説明すると、USBデバイスの許可リストを管理するツールです。許可する機器の種類と、それらがシステムとどのようにやり取りできるかを定めます。また、接続時に何も実行されないよう、記憶媒体の自動マウントも無効にしてください。特に機密性の高い環境では、USBメモリの代わりにデータダイオード(データを一方向にしか通さない装置)を使いますが、導入にはより多くの手間がかかります。
#外部との通信が遮断されているか確認する
テストで外部との通信が遮断されていると証明できるのは、観測した期間に限られます。更新のたびにテストをやり直し、作業セッション全体を通してキャプチャを続けてください。最低限の検証手順では、動作、経路がないこと、名前解決が行われないこと、実際のトラフィックを確認します。
- オフライン動作
- ケーブルを抜き、すべての無線通信をオフにしてから、一連の処理全体(モデル、RAG、インターフェース)を実行してください。すべてが正常に動作する必要があります。そうでなければ、いずれかのコンポーネントがインターネットに依存していたことになります。
- ルートが存在しません
- ping -c 1 8.8.8.8 は「Network is unreachable」または同等のエラーを発生させる必要があります。
- DNSのない状態
- host exemple.org は失敗するはずです。/etc/resolv.conf を確認し、外部サーバーが指定されていないことを確かめてください。
- 確立済みの接続
- sudo ss -tunp state established : aucune connexion vers une adresse hors du réseau interne.
- 実際のトラフィック
- tcpdumpですべてのインターフェースを対象に、内部ネットワークを除外して取得したキャプチャは、利用セッションの最初から最後まで空である必要があります。
#定期的な監査
| 頻度 | 制御 | 目標 |
|---|---|---|
| 月次 | ufw status verboseとルール一覧;ss -tlnp | 「試しに」追加されたルールを検出する |
| 各転送ごとに | 鍵前後のフィンガープリント;アンチウイルス分析 | ファイルの変更を検出 |
| コンポーネントを更新するたび | ネットワーク隔離の確認テストを再実行し、オフライン用の変数設定を再確認すること | 新しいコンポーネントによって、外部への通信が追加される可能性があります |
| 半年ごとまたは年間 | 検証済みのイメージを使ったクリーンインストールと脅威の見直し | それまでに蓄積した侵害を取り除く |
#LLMマシンのエアギャップに関するよくある質問
アウトバウンドファイアウォールだけで、エアギャップと呼べますか?+
インターネットに接続されていないマシンで Ollama をアップデートするには?+
隔離されたマシンにモデルを転送するにはどうすればよいですか?+
Ollama は私のリクエストを外部に送信しますか?+
USBメモリはセキュリティ上の弱点になりますか?+
既に隔離されたマシンにディスクの暗号化は必要ですか?+
- モデルを保存するディスクを暗号化する
- プライバシーチェックリスト
- 企業向けローカル AI:GDPR、主権、デプロイメント
- Hugging Face の GGUF モデルを Ollama にインポート
- Apple Silicon Macの性能を最大限に引き出す
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。