tcp listener
tcp listener
The TCP listener configures Boundary to listen on a TCP address/port.
listener "tcp" {
purpose = "api"
address = "127.0.0.1:9200"
}
The listener stanza may be specified more than once to make Boundary listen on
multiple interfaces; however, only one listener marked for cluster purpose is
allowed.
Listener's custom response headers
Boundary supports defining custom HTTP response headers for all requests on any Boundary controller.
Headers are defined based on the returned status code. For example, you can define a list of
custom response headers for the 200 status code, and another list of custom response headers for
the 307 status code, and so on. You can also define headers based on the hundred-level status
code. For example, a list of headers applied to the 4xx code will be applied to 400, 401, 404, and
all other 400-level status codes. The more specific the status, the higher priority it has.
Default headers are overwritten by hundred-level headers, which are overwritten by status-specific
headers.
There are two different config parameters that define headers: custom_api_response_headers and
custom_ui_response_headers. API headers apply to API endpoints, currently all paths starting
with /v1/. UI headers apply to all other paths. This allows for configuring headers specifically
for serving content to a web browser, such as CSP headers.
tcp listener parameters
Refer to the following sections for tcp listener parameters.
General parameters
custom_api_response_headers parameters
custom_ui_response_headers parameters
TLS
The tls parameters are valid for api and ops listeners. The cluster
and proxy connections use their own ephemeral TLS stacks. For more
information, refer to TLS in Boundary.
tcp listener examples
Refer to the following sections for examples of tcp listeners.
Configure TLS
This example shows enabling a TLS listener.
listener "tcp" {
purpose = "api"
tls_cert_file = "/etc/certs/Boundary.crt"
tls_key_file = "/etc/certs/Boundary.key"
}
Configure custom http response headers
This example shows configuring custom http response headers. Operators can configure
"custom_api_response_headers" and "custom_ui_response_headers" sub-stanzas in the listener stanza to
set custom http headers that are appropriate to their applications. Examples of such headers are
"Strict-Transport-Security" and "Content-Security-Policy" which are known HTTP headers, and could be
configured to harden the security of an application communicating with the Boundary endpoints. Note that
vulnerability scans often examine such security related HTTP headers. In addition, you can configure
application-specific custom headers. For example, "X-Custom-Header" has been configured in the example
below.
listener "tcp" {
custom_api_response_headers {
"default" = {
"Strict-Transport-Security" = ["max-age=31536000; includeSubDomains"],
"X-Custom-Header" = ["Custom Header Default Value"],
},
"2xx" = {
"X-Custom-Header" = ["Custom Header Value 1", "Custom Header Value 2"],
},
"301" = {
"Strict-Transport-Security" = ["max-age=31536000"],
},
}
custom_ui_response_headers {
"default" = {
"Strict-Transport-Security" = ["max-age=31536000; includeSubDomains"],
"Content-Security-Policy" = ["default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; frame-src 'self'; font-src 'self'; connect-src 'self'; img-src 'self' data:; style-src 'self'; media-src 'self'; manifest-src 'self'; style-src-attr 'self'; frame-ancestors 'self'"],
"X-Custom-Header" = ["Custom Header Default Value"],
},
"2xx" = {
"X-Custom-Header" = ["Custom Header Value 1", "Custom Header Value 2"],
},
"301" = {
"Strict-Transport-Security" = ["max-age=31536000"],
"Content-Security-Policy" = ["default-src 'none'; script-src 'none'; connect-src 'none'"],
},
}
}
Note that Boundary requires script-src 'wasm-unsafe-eval' for playback of session recordings.
In situations where a header is defined under several status code subsections,
Boundary returns the header matching the most specific response code. For example,
with the config example below, a 307 response would return 307 Custom header value,
while a 306 would return 3xx Custom header value.
listener "tcp" {
custom_api_response_headers {
"default" = {
"X-Custom-Header" = ["default Custom header value"]
},
"3xx" = {
"X-Custom-Header" = ["3xx Custom header value"]
},
"307" = {
"X-Custom-Header" = ["307 Custom header value"]
}
}
}
There may also be situations where default or collective status headers have been defined, but you do not want them returned for a specific status code. You can unset headers at any level by defining the headers as an empty list.
listener "tcp" {
custom_api_response_headers {
"default" = {
"X-Custom-Header" = ["default Custom header value"]
},
"3xx" = {
"X-Custom-Header" = ["3xx Custom header value"]
},
"307" = {
// Do not return this header for 307 responses
"X-Custom-Header" = []
}
}
}
Listen on multiple interfaces
This example shows Boundary listening on a private interface, as well as localhost.
listener "tcp" {
purpose = "api"
address = "127.0.0.1:9200"
}
listener "tcp" {
purpose = "cluster"
address = "10.0.0.5:9201"
}
Edit this page on GitHub