Title here
Summary here
The profile.yaml file is located in the same directory as the justserver binary (typically dist/). It defines all server parameters including network configuration, authentication, TLS, and plugin loading.
Teamserver:
interface: "0.0.0.0"
port: 4321
endpoint: "/endpoint"
password: "MySecurePassword123!"
only_password: true
operators:
operator1: "pass1"
operator2: "pass2"
cert: "server.rsa.crt"
key: "server.rsa.key"
extenders:
- "extenders/beacon_listener_http/config.yaml"
- "extenders/beacon_listener_smb/config.yaml"
- "extenders/beacon_listener_tcp/config.yaml"
- "extenders/beacon_listener_dns/config.yaml"
- "extenders/beacon_agent/config.yaml"
- "extenders/gopher_listener_tcp/config.yaml"
- "extenders/gopher_agent/config.yaml"
axscripts:
# - "Extension-Kit/extension-kit.axs"
access_token_live_hours: 12
refresh_token_live_hours: 168
HttpServer:
error:
status: 404
headers:
Content-Type: "text/html; charset=UTF-8"
Server: "nginx/1.26.2"
page: "404page.html"
http:
max_header_bytes: 8192
read_header_timeout_sec: 0
read_timeout_sec: 0
write_timeout_sec: 0
idle_timeout_sec: 0
request_timeout_sec: 300
request_timeout_message: "504 Gateway Timeout"
disable_keep_alives: false
enable_http2: true
tls:
min_version: "TLS1.2"
max_version: "TLS1.3"
prefer_server_cipher_suites: false
cipher_suites:
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
- "TLS_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_RSA_WITH_AES_256_GCM_SHA384"| Field | Type | Default | Description |
|---|---|---|---|
interface | string | "0.0.0.0" | IP address to bind the server to. Use 0.0.0.0 for all interfaces or a specific IP to restrict access. |
port | int | 4321 | TCP port for the teamserver’s HTTPS API and WebSocket endpoint. |
endpoint | string | "/endpoint" | URL path prefix for all API routes. All client requests go to https://host:port/endpoint/.... Changing this helps avoid fingerprinting. |
| Field | Type | Default | Description |
|---|---|---|---|
password | string | required | Master password for the teamserver. Used when only_password is true. |
only_password | bool | true | If true, any username is accepted with the master password. If false, each operator must use their specific username/password from the operators map. |
operators | map | {} | Map of username: password pairs. Only used when only_password is false. |
When only_password: true, operators connect with any username and the shared master password. This is simpler but provides no per-operator accountability.
When only_password: false, each operator must authenticate with their specific username and password from the operators map. This provides individual accountability and allows the server to track which operator executed each action.
| Field | Type | Description |
|---|---|---|
cert | string | Path to the TLS certificate file (PEM format), relative to the server binary location. |
key | string | Path to the TLS private key file (PEM format), relative to the server binary location. |
| Field | Type | Description |
|---|---|---|
extenders | list | Paths to extender config.yaml files, relative to the server binary location. Each extender is loaded at startup. |
axscripts | list | Paths to AxScript extension files (.axs). |
| Field | Type | Default | Description |
|---|---|---|---|
access_token_live_hours | int | 12 | How many hours an access JWT token remains valid. |
refresh_token_live_hours | int | 168 | How many hours a refresh JWT token remains valid (default: 7 days). |
See
HTTP Server Configuration for the detailed HttpServer reference.
"pass" in productiononly_password: false and define individual credentials/endpoint with a custom, non-obvious path