OpenClawのGatewayサービスはデフォルトで18789ポートで動作しますが、セキュリティの観点から、公式はこのポートを絶対にインターネットに直接公開しないよう明確に推奨しています。正しいアプローチは、NginxをリバースプロキシとしてフロントエンドでSSL暗号化とアクセス制御を処理し、リクエストをOpenClawのGatewayに転送することです。このチュートリアルでは、その設定手順を一通りご説明します。
なぜリバースプロキシが必要なのか
OpenClawの18789ポートを直接公開すると、複数のリスクがあります。
- 暗号化なしの通信: GatewayはデフォルトでHTTPを使用しており、チャット内容やAPIキーが中間者に傍受される恐れがあります
- アクセス制御の欠如: 誰でもGatewayのインターフェースにアクセスを試みることができます
- ドメイン名が使えない: 多くのチャットプラットフォームのWebhookはHTTPSアドレスを必要とします
Nginxリバースプロキシを導入することで、SSL暗号化、リクエストフィルタリング、レート制限など多層的な保護が得られます。セキュリティに関する詳細な推奨事項はOpenClaw公式ドキュメントをご参照ください。
前提条件
- OpenClawがデプロイ済みのLinuxサーバー(Ubuntu 22.04/24.04 推奨)
- サーバーのIPに紐づけ済みのドメイン名(例:
ai.example.com) - OpenClawのGatewayがローカルで正常に稼働していること
ステップ1:Nginxをインストールする
sudo apt update
sudo apt install -y nginx
Nginxの起動を確認します。
sudo systemctl status nginx
sudo systemctl enable nginx
ステップ2:Nginx設定ファイルを作成する
OpenClaw専用のNginxサイト設定を作成します。
sudo nano /etc/nginx/sites-available/openclaw
以下の設定内容を記述します。
upstream openclaw_gateway {
server 127.0.0.1:18789;
keepalive 64;
}
server {
listen 80;
server_name ai.example.com;
# certbotが後でHTTPSリダイレクトを自動追加します
location / {
proxy_pass http://openclaw_gateway;
proxy_http_version 1.1;
# WebSocketサポート(OpenClawの一部機能がWebSocketに依存)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 実際のクライアント情報を転送
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# タイムアウト設定(AIの生成には時間がかかる場合があります)
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# バッファリング設定
proxy_buffering off;
proxy_cache off;
}
}
サイト設定を有効にします。
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
sudo nginx -t # 設定の文法チェック
sudo systemctl reload nginx
nginx -t コマンドで syntax is ok および test is successful と表示されれば、設定は正しいです。
ステップ3:SSL証明書を取得する
Let's Encryptの無料SSL証明書を、Certbotツールで自動的に取得・設定します。
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ai.example.com
Certbotは以下の処理を自動で行います。
- ドメインの所有権を検証
- SSL証明書を取得
- Nginx設定を変更し、HTTPSリスナーとHTTPからHTTPSへの自動リダイレクトを追加
- 証明書の自動更新を設定
証明書のデフォルト有効期間は90日間で、Certbotが自動更新のタイマーを設定します。更新が正常に動作するか手動で確認できます。
sudo certbot renew --dry-run
ステップ4:OpenClawの信頼済みプロキシを設定する
リバースプロキシを使用する場合、OpenClawに信頼するプロキシを伝え、クライアントの実際のIPアドレスを正しく取得できるようにする必要があります。OpenClawの設定を編集します。
nano ~/.config/openclaw/openclaw.json5
信頼済みプロキシの設定を追加します。
{
gateway: {
// ローカルのNginxからのリクエストを信頼
trustedProxies: ["127.0.0.1", "::1"],
// ローカルにバインドし、外部からの直接リクエストを受け付けない
host: "127.0.0.1",
port: 18789,
}
}
host を 127.0.0.1 に設定することで、Gatewayはローカルからの接続のみを受け付けるようになります。ファイアウォールの設定に不備があっても、外部から直接18789ポートにアクセスすることはできません。
Gatewayを再起動して設定を反映させます。
openclaw gateway restart
ステップ5:ファイアウォールを設定する
UFWで必要なポートのみを開放します。
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP(証明書検証とリダイレクト用)
sudo ufw allow 443/tcp # HTTPS
sudo ufw deny 18789/tcp # Gatewayポートへの直接アクセスを明示的に拒否
sudo ufw enable
sudo ufw status
ステップ6:エンドツーエンドで動作確認する
すべての設定が完了したら、全体の動作を検証します。
# Nginxが正しくプロキシしているか確認
curl -I https://ai.example.com
# OpenClaw Gatewayの状態を確認
openclaw doctor
# 18789ポートが外部に公開されていないことを確認
# 別のマシンから実行:
curl http://あなたのサーバーIP:18789 # 接続が拒否されるはずです
上級編:レート制限を追加する
悪用を防ぐため、Nginxにレート制限を追加できます。http ブロック(通常 /etc/nginx/nginx.conf 内)に以下を追加します。
# レート制限ゾーンを定義
limit_req_zone $binary_remote_addr zone=openclaw_limit:10m rate=10r/s;
次に、サイト設定の location ブロック内で参照します。
location / {
limit_req zone=openclaw_limit burst=20 nodelay;
proxy_pass http://openclaw_gateway;
# ... その他の設定はそのまま
}
これにより、各IPアドレスのリクエスト頻度が毎秒10リクエストに制限され、最大20リクエストのバーストが許可されます。
まとめ
NginxリバースプロキシとSSL証明書により、OpenClawのGatewayに信頼性の高いセキュリティ保護が加わりました。すべての通信が暗号化され、Gatewayポートは公開されず、Nginxのさまざまなセキュリティ機能を柔軟に追加できます。Caddyなど他のWebサーバーを使う場合も設定の考え方は同様です。具体的な構文についてはOpenClaw公式ドキュメントのデプロイガイドを参照してください。設定に関する問題はOpenClaw GitHub リポジトリでコミュニティのサポートを受けられます。