エアギャップ環境構築
エアギャップとは、ネットワークから完全に隔離されたオフライン環境で動作する専用マシンを指します。
ステークプール運用では、ウォレットおよびプール運営用の秘密鍵を安全に管理し、オフラインで cardano-cli によるトランザクション署名を行うために使います。
背景の整理は Wikipedia の解説 を参照してください。
秘密鍵オンライン保存のリスク
これらの秘密鍵をオンライン環境(BP/リレー等)に置くと、ハッキングやマルウェア感染などにより、資金やプール運営権限の奪取につながる重大なリスクがあります。
秘密鍵の管理と署名処理は、必ずエアギャップ上で行ってください。
方針
エアギャップ環境としての安全性を確保するため、本マニュアルでは USB ブートで Ubuntu 24.04 を物理マシンへネイティブインストールし、既存 OS を削除した単一 OS 構成で運用することを前提とします。
Live ブート、デュアルブート、およびホスト OS に依存する仮想化・コンテナ(ハイパーバイザー型・OS レベル仮想化を含む)は、永続性やセキュリティ境界を十分に保証できないため、本マニュアルでは採用しません。
エアギャップの構築手順
インストール中はネットワークに接続しない
Ubuntu をインストールする対象のエアギャップは、インストール作業中も LAN/Wi‑Fi などに接続しないでください。
用意するPC(2台)
次の2役割のPCを用意します。
| 役割 | 内容 |
|---|---|
| 起動用USB作成PC | Windows/macOS(Intel Mac/Apple Silicon Mac を含む)いずれでも可。ISO を USB に書き込むためだけに使います。 |
| Ubuntu インストール対象(エアギャップPC) | Ubuntu を入れる本体。既存OSの消去を許容できる x86_64 マシンにしてください。 |
推奨スペック(インストール先):CPU 2コア以上、RAM 4GB以上、ディスク 25GB以上
1. Ubuntu Desktopイメージの取得
Ubuntu Desktop イメージファイルをダウンロードします。
ダウンロード完了まで少しかかるのでしばらくお待ちください。
2. USBブートディスク作成(balenaEtcher)
balenaEtcherは、無料かつオープンソースのUSB書き込みツールであり、Ubuntuインストールに使用するブート可能なUSBメディアを安全かつ簡単に作成できます。
前提条件
ヒント
- 初期化しても問題ない容量 12GB 以上のUSBメモリデバイス
WindowsまたはmacOSが動作するPC- Ubuntu Desktopイメージの取得で取得したISOイメージファイル
Etcherのインストール
balenaEtcherの公式サイトにアクセスし、インストーラーをダウンロードしてインストールします。
各OSでのインストール手順
1. Etcher for Windows (x86|x64) (Installer)の右側の「Download」を選択します。
2. Windows 64-bit用のインストーラー(balenaEtcher-*.*.*.Setup.exe)をダウンロードします。
3. ダウンロードした.exeファイルを実行し、画面の指示に従ってインストールを完了させます。
実行までの一例は次のとおりです。
- エクスプローラーを開き、左側メニューの「ダウンロード」を選択
balenaEtcher-*.*.*.Setup.exeをダブルクリック
インストーラーの指示に従い進めてください
1. 利用しているMacのアーキテクチャに応じて、対応する Etcher for macOS の「Download」を選択します。
- Apple Silicon (M1 ~ M5 など) →
Etcher for macOS (arm64) - Intel Mac →
Etcher for macOS (x64)
2. ダウンロードした .dmg ファイルを開きます。
- Apple Silicon:
balenaEtcher-*.*.*-arm64.dmg - Intel Mac:
balenaEtcher-*.*.*-x64.dmg
開いたウィンドウで Etcher アイコンを アプリケーションフォルダへドラッグ&ドロップ し、インストールします。
3. 初回起動時に警告が表示されても、上記手順で取得したファイルであれば問題ありません。
「開く」を選択して続行してください。
USBメディアの作成
USBブートディスクを作成します。
1. USBメモリをPCに挿入します。
USBポートに正しく接続されていることを確認してください。
2. Etcherを起動します。
3. Ubuntu ISO イメージを選択します。
「Flash from file」を選択し、事前にダウンロードしたUbuntu ISO イメージファイルを選択します。
4. USBメモリを選択します。
「Select target」を選択し、書き込み先となるUSBメモリを選択後、「
Select 1」を選択します。
誤ったディスクを選ばないよう注意してください。
USB以外のストレージを選択するとデータが消去されます。
5. 「Flash」を実行します。
「Flash!」を選択すると書き込み権限の付与が求められるのでPC(Windows/macOS)の管理者パスワードを入力し、「Ok」を選択します。
「
balenaEtcher.appがリムーバブルボリューム上のファイルにアクセスしようとしています。」というダイアログが表示された場合は、「許可」を選択してください。
USBメモリの書き込み速度に依存しますが、処理の完了まで数分から15分程度を要します。
6. 書き込み完了後の確認
書き込みが完了するとEtcher上で「Flash Completed!」と表示されますので画面を閉じて終了し、USBを抜いてください。
ヒント
macOS環境では、USBメディアが「読み取れません」といった警告が表示される場合がありますが、これは正常ですのでUSBを取り外して問題ありません。
3. USBブートによるUbuntuの起動
- エアギャップとして使用するPCに先ほど書き込んだUSBを挿入します。
- コンピューターを起動します。
- 表示されたメニューから「
Try or Install Ubuntu」を選択し、Enterキーを押下します。
その後は画面の指示に従って通常のUbuntu Desktopのインストールを進めてください。
Ubuntuが起動しない場合は、コンピューターを再起動してください。
その際Windowsでは主にF12、MacだとOptionまたはAltキーを押し続けてください。
インストーラーのセットアップ
以降の画像は一例であり、環境によって表示が異なる場合があります。
-
言語を選択。
-
アクセシビリティ設定は選択せず、「
次」を選択します。
-
使用しているキーボードレイアウトを選択します。
-
「
今はインターネットに接続しない」を選択します。
-
「
Ubuntuをインストール」を選択します。
-
対話型インストール「
対話式インストール」を選択します。
-
「
規定の選択」を選択します。
-
不要なドライバやバイナリを最小化するため、サードパーティ製ソフトウェアはインストールしません。
ディスクのセットアップ
-
「
ディスクを削除してUbuntuをインストールする」を選択します。 -
ユーザー名とパスワードを設定します。
コンピューター名の末尾は自動で入力されます。
-
タイムゾーンの選択をします。
-
インストールの準備が完了したので確認し、「
インストール」を選択します。
インストールの完了
-
インストール完了画面を待機し、完了後「
今すぐ再起動」を選択します。 -
USBを取り外すため「
Enter」を押下してください。
「Enter」を押下後、すぐUSBを抜いてください。
-
ログイン画面でパスワードを入力します。
追加設定
-
以下の画面が表示されたら右上の「
次へ」を選択します。
-
「
Skip for now」が選択されていることを確認し、右上の「スキップ」を選択します。
-
「
いいえ、システムデータを共有しません」を選択し、右上の「次へ」を選択します。
-
右上の「
完了」を選択します。
-
追加設定が完了しました。
ターミナルの設定
-
ターミナルの設定をするため左下のアイコンを選択し、「
端末」アイコンを選択します。
-
ターミナルを右クリックして、「
ダッシュボードにピン留め」を選択します。
各種設定
- ブラケットペーストモードの無効化設定をします。
echo 'set enable-bracketed-paste off' >> ~/.inputrc- ターミナルを終了します。
exit- ディスプレイ設定(任意)
好みに応じて、画面を右クリックして「Display Settings」を開き、「Scale」を「200%」に設定します。
通信機能の完全無効化
エアギャップとして運用するため、Wi-Fi / Bluetooth / 有線通信を含むすべてのネットワーク機能をOSレベルで無効化します。
機内モードは再起動後に解除されるため使用しません。
NetworkManagerの完全停止
sudo systemctl stop NetworkManagersudo systemctl disable NetworkManagerBluetoothサービスの完全無効化
sudo systemctl stop bluetoothsudo systemctl disable bluetoothsudo systemctl mask bluetoothrfkillによる無線デバイス遮断
sudo rfkill block all- 無線デバイス遮断の確認
rfkill listSoft blocked: yes であることを確認します。
rfkillの永続化
sudo tee /etc/systemd/system/rfkill-block.service > /dev/null << 'EOF'
[Unit]
Description=Block all radios (air-gapped)
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill block all
[Install]
WantedBy=multi-user.target
EOF- 有効化
sudo systemctl daemon-reloadsudo systemctl enable rfkill-block.service- システムを再起動します。
sudo reboot状態確認
NetworkManager
nmcli general statusError: NetworkManager is not running.Wi-Fi/無線
nmcli radioError: NetworkManager is not running.rfkill
rfkill list
Soft blocked: yesであることを確認します。
- Bluetooth サービスの状態確認
systemctl status bluetooth --no-pager○ bluetooth.service
Loaded: masked (Reason: Unit bluetooth.service is masked.)
Active: inactive (dead)以上の設定によりエアギャップ環境の構築が完了しました。
4. 旧エアギャップからの移行
VirtualBox などで運用していた 旧エアギャップから、本ページで構築した物理マシン上の 新エアギャップへ、cnode と cold-keys を移します。
| 用語 | 意味 |
|---|---|
| 旧エアギャップ | VirtualBox のゲスト OS など、これまで署名に使っていた側 |
| 新エアギャップ | 移行先の物理マシン(Ubuntu をインストールした本体) |
手順はこのあとの見出し(環境変数 → ファイルの移動 → cardano-cli)の順です。
LAN/Wi‑Fi は接続せず、USB メモリ等でファイルのみを運んでください。
環境変数の設定
新エアギャップで実行します。
echo 'export NODE_HOME="$HOME/cnode"' >> ~/.bashrc
echo 'export NODE_NETWORK="--mainnet"' >> ~/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=mainnet' >> ~/.bashrc
echo alias airgap="'cd $HOME/cnode && [ -f airgap-set.tar.gz ] && tar -xOzf airgap-set.tar.gz airgap_script | bash -s verify || echo "airgap-set.tar.gz が見つかりません"'" >> $HOME/.bashrc
source ~/.bashrc
mkdir -p ${NODE_HOME}ファイルの移動
オフラインのみで $HOME/cnode と $HOME/cold-keys を旧から新へ移管します($HOME は各環境のログインユーザーのホーム、通常 /home/<ユーザー名>)。
旧エアギャップ
chmod u+rx $HOME/cold-keys共有フォルダまたはゲストへマウントした USB に、cnode と cold-keys をディレクトリ単位で書き出します。
新エアギャップ
書き出した内容を $HOME/cnode と $HOME/cold-keys として配置します。
chmod a-rx $HOME/cold-keyscardano-cliのインストール
新エアギャップで実行します。
バイナリーファイルコピー に従って実行ファイルを配置してください。
Last updated on