← AIの8つの安全装置 デプロイ手順 →

セキュリティ設計

OpenClaw Stack のセキュリティ設計における技術的判断と実装内容をまとめた文書です。 Defense in Depth(多層防御)の実践例として参照できます。

設計判断: Defense in Depth(多層防御)

AIエージェントはユーザーの権限で動作するため、乗っ取られると重大な被害が発生します:

単一のセキュリティ対策では不十分であり、各層が独立して機能する多重防御を採用しています。

実装した4層防御

レイヤー1: ネットワーク層(UFW ファイアウォール)

脅威: ポートスキャンによるサービス発見、直接攻撃

# UFW ルール
ufw default deny incoming
ufw allow 80/tcp      # HTTP(Caddy用)
ufw allow 443/tcp     # HTTPS(Caddy用)
ufw limit 22/tcp      # SSH(レート制限付き)
ufw deny 18789        # Gateway ポート(明示的拒否)

設計判断:

レイヤー2: トランスポート層(TLS/HTTPS暗号化)

脅威: 通信傍受、中間者攻撃(MITM)、データ漏洩

example.com {
    encode gzip
    # CaddyがLet's Encryptから自動で証明書を取得・更新
    # 明示的なTLS設定不要(Auto HTTPS)
}

設計判断:

レイヤー3: アプリケーション層(HTTP BasicAuth)

脅威: URL漏洩による不正アクセス

# パスワードハッシュの生成
echo "$PASSWORD" | docker run -i --rm caddy:2 hash-password
example.com {
    basicauth {
        deployer $HASHED_PASSWORD
    }
}

設計判断:

レイヤー4: サービス層(Gateway Token + デバイスペアリング)

脅威: 認証突破後の不正操作、端末の乗っ取り

設計判断:

graph TD INET["🌐 インターネット"] --> UFW["🧱 UFW
80/443のみ許可"] UFW --> CADDY_TLS["🔐 Caddy
TLS終端 + Auto HTTPS"] CADDY_TLS --> CADDY_AUTH["🔑 Caddy
BasicAuth認証"] CADDY_AUTH --> NET["📦 Docker Network
172.30.0.0/24"] NET --> GW["🤖 OpenClaw Gateway
Token + デバイスペアリング"] GW --> LLM["☁️ LLM API"]

アーキテクチャ図

環境別セキュリティ比較

VPSとローカルPCでは、脅威モデルが異なるため異なるセキュリティ構成を採用しています。

セキュリティ層 VPS(本番) ローカルPC(開発)
UFW ファイアウォール あり(80/443のみ公開) 不要(ローカルネットのみ)
TLS/HTTPS あり(Caddy Auto HTTPS) 不要(ローカル通信のみ)
HTTP BasicAuth あり(Caddy経由) 不要(Caddyなし)
Gateway Token あり あり
デバイスペアリング あり 設定可能(未使用)

脅威モデルの違い

項目 VPS(本番) ローカルPC(開発)
公開状態 インターネット全体に公開 ローカルネットワーク内のみ
攻撃対象範囲 全世界からの攻撃が届く 同じネットワーク内の人のみ
想定攻撃者 不特定多数の外部攻撃者 同一ネットワーク内の侵入者

ローカルPCのセキュリティ構成

ローカルPCはインターネットに公開されていないため、4層防御のうちレイヤー1〜3は不要です。

ローカルネットワーク / Tailscale VPN
    |
    v
[SSH] 鍵認証(パスワード認証無効)
    |
    v
[ネットワーク分離] 127.0.0.1 バインド
    |
    v
[OpenClaw Gateway] Token認証

使用技術スタック

技術 用途 選定理由
UFW ホストファイアウォール Ubuntu標準、シンプルなルール定義
Caddy リバースプロキシ + TLS終端 Auto HTTPS、設定ファイルが最小
Docker Compose コンテナオーケストレーション ネットワーク分離、ポートマッピング制御
OpenClaw AIエージェントプラットフォーム Token認証 + デバイスペアリング機能が内蔵