ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
セキュリティ運用

OpenClawのアクセス制御とセキュリティ強化チュートリアル

· 18 分で読了

はじめに

OpenClaw は複数のチャットプラットフォームを接続する AI ゲートウェイとして、セキュリティが非常に重要です。未認可のユーザーによる不正利用が発生すると、高額な API 費用が発生するだけでなく、機密情報の漏洩にもつながりかねません。本チュートリアルでは、ダッシュボードの認証、ユーザーアクセス制御、レート制限、監査ログなど、複数の観点から OpenClaw のセキュリティを強化する方法をご紹介します。

セキュリティ脅威の概要

脅威タイプ リスクレベル 説明
ダッシュボードへの未認可アクセス 攻撃者が設定を変更したり、会話を閲覧したりする可能性
API Key の漏洩 他者が API クレジットを不正使用する可能性
ユーザーによる濫用 認可ユーザーの過度な使用による高額費用
会話内容の漏洩 会話記録への未認可アクセス
DDoS 攻撃 悪意のあるリクエストによるサービス停止
インジェクション攻撃 悪意のあるプロンプトで AI の動作を操作

ステップ1:ダッシュボードの認証

1.1 パスワード認証の有効化

デフォルトではダッシュボードにパスワード保護がない場合があります。直ちに設定してください:

{
  dashboard: {
    enabled: true,
    port: 18789,
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",  // 環境変数を使用
    }
  }
}

環境変数を設定します:

# 強力なパスワードを生成
openssl rand -base64 32
# 出力例:K7x9mP2vQ4wR1tY6uI3oA8sD5fG0hJ=

# 環境変数に追加
echo 'export OPENCLAW_DASHBOARD_PASSWORD="K7x9mP2vQ4wR1tY6uI3oA8sD5fG0hJ="' >> ~/.bashrc
source ~/.bashrc

1.2 セッション管理の設定

{
  dashboard: {
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",
      session: {
        timeout: 3600,           // セッション有効期限(秒)、1時間
        maxSessions: 3,          // 同時ログイン数の上限
        secureCookie: true,      // HTTPS 経由のみ Cookie を送信
      }
    }
  }
}

1.3 マルチユーザー管理

チームで OpenClaw を管理する必要がある場合:

{
  dashboard: {
    auth: {
      enabled: true,
      users: [
        {
          username: "admin",
          password: "${ADMIN_PASSWORD}",
          role: "admin",          // 完全な制御権限
        },
        {
          username: "operator",
          password: "${OPERATOR_PASSWORD}",
          role: "operator",       // ログとステータスの閲覧可能、設定の変更は不可
        },
        {
          username: "viewer",
          password: "${VIEWER_PASSWORD}",
          role: "viewer",         // 読み取り専用権限
        }
      ]
    }
  }
}

ロール別の権限比較:

権限 admin operator viewer
ダッシュボードの閲覧
ログの閲覧
会話記録の閲覧
設定の変更
ユーザー管理
サービスの再起動

ステップ2:API Key の保護

2.1 環境変数での保存(必須)

API Key を設定ファイルに平文で記述してはいけません:

// 悪い例 ✗
{
  models: {
    openai: {
      apiKey: "sk-proj-abc123..."   // このように書かないでください!
    }
  }
}

// 正しい方法 ✓
{
  models: {
    openai: {
      apiKey: "${OPENAI_API_KEY}"   // 環境変数で参照
    }
  }
}

2.2 ファイルパーミッションの制御

# 設定ファイルのパーミッションを制限
chmod 600 ~/.config/openclaw/openclaw.json5

# ファイル所有者を確認
chown $(whoami) ~/.config/openclaw/openclaw.json5

# パーミッションを確認
ls -la ~/.config/openclaw/openclaw.json5
# -rw------- と表示されるはず(所有者のみ読み書き可能)

2.3 Git からの除外

Git で設定を管理している場合、機密ファイルが除外されていることを確認してください:

# .gitignore に追加
echo "openclaw.json5" >> ~/.config/openclaw/.gitignore
echo ".env" >> ~/.config/openclaw/.gitignore
echo "*.key" >> ~/.config/openclaw/.gitignore
echo "*.pem" >> ~/.config/openclaw/.gitignore

ステップ3:ユーザーホワイトリスト / ブラックリスト

3.1 ユーザーホワイトリスト(推奨)

指定したユーザーのみ AI アシスタントの使用を許可します:

{
  accessControl: {
    mode: "whitelist",            // whitelist または blacklist
    whitelist: {
      telegram: [
        "123456789",              // Telegram ユーザー ID
        "987654321",
      ],
      whatsapp: [
        "+8613800138000",         // WhatsApp 電話番号
        "+8613900139000",
      ],
      discord: [
        "112233445566778899",     // Discord ユーザー ID
      ]
    },
    denyMessage: "抱歉,你没有使用该助手的权限。请联系管理员。",
  }
}

3.2 ユーザーブラックリスト

大部分のユーザーが使用可能で、個別のユーザーのみブロックする場合:

{
  accessControl: {
    mode: "blacklist",
    blacklist: {
      telegram: [
        "111111111",              // ブロックされたユーザー
      ],
      global: [
        "[email protected]",   // 全チャンネルでブロック
      ]
    },
    blockMessage: "你的访问权限已被暂停。",
  }
}

3.3 グループ権限の制御

グループ内のボットについて、使用を許可するグループを制限できます:

{
  accessControl: {
    groups: {
      telegram: {
        allowedGroups: [
          "-1001234567890",       // 許可されたグループ ID
          "-1009876543210",
        ],
        allowPrivate: true,       // プライベートチャットを許可
      },
      discord: {
        allowedServers: [
          "1234567890123456",     // 許可されたサーバー ID
        ],
        allowedChannels: [
          "9876543210987654",     // 許可されたチャンネル ID(より細かい制御)
        ]
      }
    }
  }
}

ステップ4:レート制限

4.1 グローバルレート制限

単一ユーザーの過度な使用を防止します:

{
  rateLimit: {
    global: {
      maxRequestsPerMinute: 30,     // グローバルで1分あたり最大30リクエスト
      maxRequestsPerHour: 500,      // グローバルで1時間あたり最大500リクエスト
      maxRequestsPerDay: 5000,      // グローバルで1日あたり最大5000リクエスト
    }
  }
}

4.2 ユーザー別レート制限

{
  rateLimit: {
    perUser: {
      maxRequestsPerMinute: 5,      // ユーザーあたり1分に5回
      maxRequestsPerHour: 60,       // ユーザーあたり1時間に60回
      maxRequestsPerDay: 500,       // ユーザーあたり1日に500回
      cooldownMessage: "你发送消息太频繁了,请稍后再试。",
    }
  }
}

4.3 階層別レート制限

異なるユーザーグループに異なる制限を設定します:

{
  rateLimit: {
    tiers: {
      vip: {
        users: ["123456789", "+8613800138000"],
        maxRequestsPerMinute: 20,
        maxRequestsPerDay: 2000,
      },
      standard: {
        default: true,               // 未指定のユーザーはこのレベルを使用
        maxRequestsPerMinute: 5,
        maxRequestsPerDay: 200,
      },
      restricted: {
        users: ["987654321"],
        maxRequestsPerMinute: 1,
        maxRequestsPerDay: 20,
      }
    }
  }
}

ステップ5:IP 制限

5.1 ダッシュボードの IP ホワイトリスト

特定の IP のみダッシュボードへのアクセスを許可します:

{
  dashboard: {
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",
    },
    ipWhitelist: [
      "203.0.113.0/24",            // オフィスの IP レンジ
      "198.51.100.1",              // 自宅の IP
      "127.0.0.1",                 // ローカルアクセス
    ]
  }
}

5.2 ファイアウォールによる制限

システムレベルの IP 制限はより確実です:

# ufw を使用(Ubuntu)
sudo ufw allow from 203.0.113.0/24 to any port 18789
sudo ufw deny 18789

# iptables を使用
sudo iptables -A INPUT -p tcp --dport 18789 -s 203.0.113.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 18789 -j DROP

5.3 Fail2ban によるブルートフォース対策

Fail2ban を設定して、ログイン失敗が続く IP を自動的にブロックします:

sudo apt install fail2ban

OpenClaw 用の Fail2ban ルールを作成します:

sudo nano /etc/fail2ban/jail.d/openclaw.conf
[openclaw]
enabled = true
port = 18789
filter = openclaw
logpath = /var/log/openclaw/access.log
maxretry = 5
findtime = 600
bantime = 3600

フィルターの作成:

sudo nano /etc/fail2ban/filter.d/openclaw.conf
[Definition]
failregex = ^.*authentication failed.*from <HOST>.*$
ignoreregex =
sudo systemctl restart fail2ban

ステップ6:監査ログ

6.1 詳細ログの有効化

{
  logging: {
    level: "info",                   // debug, info, warn, error
    file: "/var/log/openclaw/openclaw.log",
    audit: {
      enabled: true,
      file: "/var/log/openclaw/audit.log",
      events: [
        "auth.login",                // ログインイベント
        "auth.failed",               // ログイン失敗
        "config.change",             // 設定変更
        "user.blocked",              // ユーザーブロック
        "rateLimit.exceeded",        // レート制限トリガー
        "message.received",          // メッセージ受信(任意、大量になる場合あり)
      ]
    }
  }
}

6.2 ログローテーション

ログファイルの無限増大を防止します:

sudo nano /etc/logrotate.d/openclaw
/var/log/openclaw/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 openclaw openclaw
    postrotate
        openclaw restart > /dev/null 2>&1 || true
    endscript
}

6.3 監査ログの確認

# 最近の監査イベントを確認
openclaw logs --audit --since 24h

# ログイン失敗イベントのフィルタリング
openclaw logs --audit --filter "auth.failed"

# 特定ユーザーのアクティビティを確認
openclaw logs --audit --user "123456789"

ステップ7:セキュリティのベストプラクティスチェックリスト

デプロイ前のチェック

# セキュリティチェックを実行
openclaw doctor --security

セキュリティチェックリスト

チェック項目 状態 説明
ダッシュボードのパスワードが設定済み 最低16文字の強力なパスワードを使用
API Key が環境変数で管理されている 設定ファイルに平文で保存しない
設定ファイルのパーミッションが 600 所有者のみ読み書き可能
HTTPS が有効化されている 本番環境では必須
ユーザーホワイトリストが設定済み 誰が使用できるかを制限
レート制限が有効化されている 濫用を防止
監査ログが有効化されている 重要な操作を記録
ファイアウォールが設定済み 必要なポートのみ開放
自動更新が有効化されている セキュリティ脆弱性を速やかに修正
定期バックアップ データ消失を防止

定期的なセキュリティメンテナンス

# 毎週:監査ログの異常を確認
openclaw logs --audit --since 7d --filter "auth.failed"

# 毎月:OpenClaw を最新バージョンに更新
npm update -g openclaw@latest

# 毎月:ダッシュボードのパスワードをローテーション
# 環境変数のパスワードを更新後に再起動

# 四半期:ホワイトリストを見直し、非アクティブユーザーを削除

よくある質問

ダッシュボードのパスワードを忘れた場合

# 環境変数のパスワードを直接変更
export OPENCLAW_DASHBOARD_PASSWORD="新しいパスワード"
openclaw restart

自分の IP を誤ってブロックしてしまった場合

# SSH でサーバーにログイン後
# Fail2ban によるブロックの場合
sudo fail2ban-client set openclaw unbanip あなたのIP

# 設定ファイルの IP ホワイトリストの場合
# 設定ファイルを編集して IP を追加し、再起動
openclaw restart

レート制限が厳しすぎる場合

ログの rateLimit.exceeded イベントの頻度を観察し、適切に調整します:

openclaw logs --audit --filter "rateLimit.exceeded" --since 24h

実際の使用状況に応じて制限値を調整してください。

まとめ

セキュリティ強化は、本番レベルの OpenClaw インスタンスを運用するための必須ステップです。核心的な対策は、ダッシュボード認証の有効化、環境変数による API Key の保護、ユーザーホワイトリストの設定、レート制限の有効化、監査ログの有効化です。これらの対策は複雑ではありませんが、セキュリティを大幅に向上させます。本記事のセキュリティチェックリストに沿って一つずつ確認・設定し、AI アシスタントが安全で管理された環境で動作するようにしてください。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応