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

Struktur Objek Actions

Actions dapat digunakan untuk membuat tool secara dinamis dari spesifikasi OpenAPI. Struktur objek actions memungkinkan Anda untuk menentukan domain yang diizinkan untuk tindakan agen/asisten.

Info lebih lanjut: Agents - Actions

Contoh

# 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

Kunci:

KeyTypeDescriptionExample
allowedDomainsArray of StringsDaftar yang menentukan domain yang diizinkan untuk tindakan agen/asisten.When configured, only listed domains are allowed. When not configured, SSRF targets are blocked but all other domains are allowed.

Opsional

Konteks Keamanan (Perlindungan SSRF)

LibreChat menyertakan perlindungan SSRF (Server-Side Request Forgery) dengan perilaku berikut:

Ketika allowedDomains TIDAK dikonfigurasi:

  • Target yang rentan terhadap SSRF diblokir secara default
  • Semua domain eksternal lainnya diizinkan

Saat allowedDomains DIKONFIGURASIKAN:

  • Hanya domain yang ada di dalam daftar yang diizinkan
  • Target Internal/SSRF dapat diizinkan dengan menambahkannya secara eksplisit ke dalam daftar

Target SSRF yang diblokir meliputi:

  • Alamat Localhost (localhost, 127.0.0.1, ::1)
  • Rentang IP privat (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  • Alamat link-local (169.254.0.0/16, mencakup IP metadata cloud)
  • TLD Internal (.internal, .local, .localhost)
  • Nama layanan internal umum (redis, mongodb, postgres, api, dll.)

Jika tindakan Anda perlu mengakses layanan internal, tambahkan layanan tersebut ke daftar putih allowedDomains yang ketat, atau biarkan allowedDomains tidak disetel dan tambahkan layanan privat yang tepat ke allowedAddresses.

Format Pola

Array allowedDomains mendukung beberapa format:

  1. Hanya domain - Mengizinkan semua protokol dan port:

    allowedDomains:
      - "api.example.com"
  2. Dengan protokol - Membatasi ke protokol tertentu:

    allowedDomains:
      - "https://api.example.com"
  3. Dengan protokol dan port - Membatasi ke protokol dan port tertentu:

    allowedDomains:
      - "https://api.example.com:8443"
  4. Alamat internal (harus diizinkan secara eksplisit):

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

Contoh:

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

allowedAddresses

allowedAddresses adalah daftar pengecualian untuk blokir IP privat SSRF — bukan daftar putih domain. Ini adalah alat yang tepat jika Anda ingin mengizinkan satu atau dua layanan privat/internal tertentu tanpa membatasi apa yang dapat dijangkau oleh Actions Anda di internet publik.

Kapan menggunakannya sebagai pengganti allowedDomains

allowedDomains adalah daftar putih yang ketat: jika diatur, hanya entri yang terdaftar yang dapat dijangkau. Menambahkan IP privat ke dalamnya untuk mengizinkan, misalnya, API internal yang di-host sendiri, juga akan memblokir setiap endpoint tindakan publik yang tidak Anda cantumkan.

allowedAddresses hanya digunakan ketika allowedDomains tidak dikonfigurasi. Pengaturan ini mengizinkan target host:port privat tertentu sambil tetap membiarkan sisa internet publik dapat diakses melalui kebijakan SSRF default.

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.

Jika allowedDomains dikonfigurasi, maka konfigurasi tersebut bersifat otoritatif: layanan privat harus dicantumkan di sana alih-alih mengandalkan allowedAddresses.

Entri yang dapat diterima

  • Nama host dengan port: host.docker.internal:11434, ollama.internal:8080, localhost:11434
  • Literal IPv4 privat dengan port: 10.0.0.5:8080, 127.0.0.1:11434, 192.168.1.10:443, 169.254.169.254:80
  • Literal IPv6 privat dalam kurung dengan port: [::1]:11434, [fc00::1]:8080, [fe80::1]:8080

Entri yang ditolak (divalidasi saat pemuatan konfigurasi)

  • URL / path / rentang CIDR: http://10.0.0.5, 10.0.0.0/24, /path
  • Nama host atau IP mentah: localhost, 10.0.0.5, ::1, [::1] — setiap entri harus menyertakan port
  • Port tidak valid: localhost:0, localhost:65536, localhost:http
  • Literal IP publik: 8.8.8.8:53, 1.1.1.1:53, [2001:4860::8888]:443 — kolom ini dicakup untuk ruang IP privat; IP publik bukanlah target SSRF dan pengecualian IP publik tidak memiliki tujuan pertahanan

Kepercayaan hostname

Entri hostname memercayai IP apa pun yang di-resolve oleh hostname tersebut saat runtime pada port yang tercantum. Jika DNS untuk hostname yang tercantum dirotasi atau dibajak untuk mengarah ke IP privat yang berbeda, pengecualian tersebut akan mengikuti. Hanya cantumkan hostname yang DNS-nya Anda kendalikan. Utamakan penggunaan IP literal jika memungkinkan.

Bagaimana panduan ini?