Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Actionsオブジェクト構造

Actionsを使用すると、OpenAPI仕様からツールを動的に作成できます。actionsオブジェクトの構造により、エージェント/アシスタントのアクションに対して許可するドメインを指定できます。

詳細情報: Agents - Actions

# Example Actions Object Structure
actions:
  # Strict whitelist mode:
  # allowedDomains:
  #   - "swapi.dev"
  #   - "librechat.ai"
  #   - "google.com"
  #   - "https://api.example.com:8443"  # With protocol and port
 
  # Default SSRF mode with private service exemptions:
  allowedAddresses:
    - "host.docker.internal:11434"    # Permit one private host on one port
    - "10.0.0.5:8080"                 # Permit one private IP on one port

allowedDomains

キー:

KeyTypeDescriptionExample
allowedDomainsArray of Stringsエージェント/アシスタントのアクションに対して許可されるドメインを指定するリスト。When configured, only listed domains are allowed. When not configured, SSRF targets are blocked but all other domains are allowed.

任意

セキュリティコンテキスト (SSRF保護)

LibreChatには、以下の動作を伴うSSRF(Server-Side Request Forgery)保護が含まれています:

allowedDomains が設定されていない場合:

  • SSRFの影響を受けやすいターゲットはデフォルトでブロックされています
  • その他のすべての外部ドメインは許可されています

allowedDomains が設定されている場合:

  • リストにあるドメインのみが許可されます
  • 内部/SSRFターゲットは、リストに明示的に追加することで許可できます。

ブロックされたSSRFターゲットは以下の通りです:

  • Localhost アドレス (localhost, 127.0.0.1, ::1)
  • プライベートIP範囲 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  • リンクローカルアドレス (169.254.0.0/16、クラウドメタデータIPを含む)
  • 内部 TLD (.internal, .local, .localhost)
  • 一般的な内部サービス名 (redis, mongodb, postgres, api など)

アクションが内部サービスにアクセスする必要がある場合は、それらを厳格な allowedDomains ホワイトリストに追加するか、allowedDomains を設定しないままにして、対象のプライベートサービスを allowedAddresses に正確に追加してください。

パターンフォーマット

allowedDomains 配列は、いくつかの形式をサポートしています:

  1. ドメインのみ - すべてのプロトコルとポートを許可します:

    allowedDomains:
      - "api.example.com"
  2. プロトコル付き - 特定のプロトコルに制限します:

    allowedDomains:
      - "https://api.example.com"
  3. プロトコルとポートを指定する場合 - 特定のプロトコルとポートに制限します:

    allowedDomains:
      - "https://api.example.com:8443"
  4. 内部アドレス (明示的に許可する必要があります):

    allowedDomains:
      - "192.168.1.100"
      - "internal-api.local"

例:

allowedDomains:
  - "swapi.dev"
  - "librechat.ai"
  - "google.com"
  - "https://secure-api.example.com:443"
  - "192.168.1.50"  # Internal service (explicitly allowed)

allowedAddresses

allowedAddresses は、SSRFのプライベートIPブロックに対する除外リストであり、ドメインのホワイトリストではありません。これは、Actionsがパブリックインターネット上で到達できる範囲を制限することなく、特定のプライベート/内部サービスを1つか2つ許可したい場合に適したツールです。

allowedDomains の代わりに使用すべき場合

allowedDomains は厳格なホワイトリストです。設定されると、リストに記載されたエントリのみが到達可能になります。例えば、セルフホストされた内部APIを許可するためにプライベートIPを追加すると、リストに含めなかったすべてのパブリックなアクション endpoint もブロックされます。

allowedAddresses は、allowedDomains が設定されていない場合にのみ使用されます。これは、特定のプライベートな host:port ターゲットへのアクセスを許可しつつ、それ以外についてはデフォルトの SSRF ポリシーを通じてパブリックインターネットへのアクセスを維持します。

actions:
  allowedAddresses:
    - "host.docker.internal:11434"
    - "10.0.0.5:8080"
  # allowedDomains is intentionally not set — public destinations
  # remain reachable, only listed private host:port services are exempted.

allowedDomains が設定されている場合、それが優先されます。プライベートサービスは allowedAddresses に頼るのではなく、そこにリストアップする必要があります。

許容されるエントリ

  • ポート番号付きホスト名: host.docker.internal:11434, ollama.internal:8080, localhost:11434
  • ポート付きプライベートIPv4リテラル: 10.0.0.5:8080, 127.0.0.1:11434, 192.168.1.10:443, 169.254.169.254:80
  • ポート付きの角括弧で囲まれたプライベートIPv6リテラル: [::1]:11434, [fc00::1]:8080, [fe80::1]:8080

拒否されたエントリ(設定読み込み時に検証)

  • URL / パス / CIDR 範囲: http://10.0.0.5, 10.0.0.0/24, /path
  • ベアホスト名またはIP: localhost10.0.0.5::1[::1] — すべてのエントリにはポートを含める必要があります
  • 無効なポート: localhost:0, localhost:65536, localhost:http
  • パブリックIPリテラル: 8.8.8.8:531.1.1.1:53[2001:4860::8888]:443 — このフィールドはプライベートIP空間に限定されています。パブリックIPはSSRFのターゲットではなく、パブリックIPの除外設定には防御上の目的はありません。

ホスト名の信頼 (Hostname trust)

ホスト名エントリは、実行時にそのホスト名が解決されるIPアドレス(指定されたポート上)を信頼します。リストされたホスト名のDNSがローテーションされたり、ハイジャックされて別のプライベートIPを指すようになった場合、その免除も追従します。自身でDNSを管理しているホスト名のみをリストしてください。可能な場合はリテラルIPを使用することを推奨します。

このガイドはいかがでしたか?