tcp Listener
The TCP listener configures Vault to listen on a TCP address/port.
listener "tcp" { address = "127.0.0.1:8200"}
The listener
stanza may be specified more than once to make Vault listen on
multiple interfaces. If you configure multiple listeners you also need to
specify api_addr
and cluster_addr
so Vault will
advertise the correct address to other nodes.
tcp
Listener Parameters
address
(string: "127.0.0.1:8200")
– Specifies the address to bind to for listening.cluster_address
(string: "127.0.0.1:8201")
– Specifies the address to bind to for cluster server-to-server requests. This defaults to one port higher than the value ofaddress
. This does not usually need to be set, but can be useful in case Vault servers are isolated from each other in such a way that they need to hop through a TCP load balancer or some other scheme in order to talk.http_idle_timeout
(string: "5m")
- Specifies the maximum amount of time to wait for the next request when keep-alives are enabled. Ifhttp_idle_timeout
is zero, the value ofhttp_read_timeout
is used. If both are zero, the value ofhttp_read_header_timeout
is used. This is specified using a label suffix like"30s"
or"1h"
.http_read_header_timeout
(string: "10s")
- Specifies the amount of time allowed to read request headers. This is specified using a label suffix like"30s"
or"1h"
.http_read_timeout
(string: "30s")
- Specifies the maximum duration for reading the entire request, including the body. This is specified using a label suffix like"30s"
or"1h"
.http_write_timeout
string: "0")
- Specifies the maximum duration before timing out writes of the response and is reset whenever a new request's header is read. The default value of"0"
means inifinity. This is specified using a label suffix like"30s"
or"1h"
.max_request_size
(int: 33554432)
– Specifies a hard maximum allowed request size, in bytes. Defaults to 32 MB if not set or set to0
. Specifying a number less than0
turns off limiting altogether.max_request_duration
(string: "90s")
– Specifies the maximum request duration allowed before Vault cancels the request. This overridesdefault_max_request_duration
for this listener.proxy_protocol_behavior
(string: "")
– When specified, enables a PROXY protocol version 1 behavior for the listener. Accepted Values:- use_always - The client's IP address will always be used.
- allow_authorized - If the source IP address is in the
proxy_protocol_authorized_addrs
list, the client's IP address will be used. If the source IP is not in the list, the source IP address will be used. - deny_unauthorized - The traffic will be rejected if the source IP
address is not in the
proxy_protocol_authorized_addrs
list.
proxy_protocol_authorized_addrs
(string: <required-if-enabled> or array: <required-if-enabled> )
– Specifies the list of allowed source IP addresses to be used with the PROXY protocol. Not required ifproxy_protocol_behavior
is set touse_always
. Source IPs should be comma-delimited if provided as a string. At least one source IP must be provided,proxy_protocol_authorized_addrs
cannot be an empty array or string.tls_disable
(string: "false")
– Specifies if TLS will be disabled. Vault assumes TLS by default, so you must explicitly disable TLS to opt-in to insecure communication.tls_cert_file
(string: <required-if-enabled>, reloads-on-SIGHUP)
– Specifies the path to the certificate for TLS. It requires a PEM-encoded file. To configure the listener to use a CA certificate, concatenate the primary certificate and the CA certificate together. The primary certificate should appear first in the combined file. OnSIGHUP
, the path set here at Vault startup will be used for reloading the certificate; modifying this value while Vault is running will have no effect forSIGHUP
s.tls_key_file
(string: <required-if-enabled>, reloads-on-SIGHUP)
– Specifies the path to the private key for the certificate. It requires a PEM-encoded file. If the key file is encrypted, you will be prompted to enter the passphrase on server startup. The passphrase must stay the same between key files when reloading your configuration usingSIGHUP
. OnSIGHUP
, the path set here at Vault startup will be used for reloading the certificate; modifying this value while Vault is running will have no effect forSIGHUP
s.tls_min_version
(string: "tls12")
– Specifies the minimum supported version of TLS. Accepted values are "tls10", "tls11", "tls12" or "tls13".Warning: TLS 1.1 and lower are generally considered insecure.
tls_cipher_suites
(string: "")
– Specifies the list of supported ciphersuites as a comma-separated-list. The list of all available ciphersuites is available in the Golang TLS documentation.tls_prefer_server_cipher_suites
(string: "false")
– Specifies to prefer the server's ciphersuite over the client ciphersuites.tls_require_and_verify_client_cert
(string: "false")
– Turns on client authentication for this listener; the listener will require a presented client cert that successfully validates against system CAs.tls_client_ca_file
(string: "")
– PEM-encoded Certificate Authority file used for checking the authenticity of client.tls_disable_client_certs
(string: "false")
– Turns off client authentication for this listener. The default behavior (when this is false) is for Vault to request client certificates when available.x_forwarded_for_authorized_addrs
(string: <required-to-enable>)
– Specifies the list of source IP CIDRs for which an X-Forwarded-For header will be trusted. Comma-separated list or JSON array. This turns on X-Forwarded-For support. If for example Vault receives connections from the load balancer's IP of1.2.3.4
, adding1.2.3.4
tox_forwarded_for_authorized_addrs
will result in theremote_address
field in the audit log being populated with the connecting client's IP, for example3.4.5.6
. Note this requires the load balancer to send the connecting client's IP in theX-Forwarded-For
header.x_forwarded_for_hop_skips
(string: "0")
– The number of addresses that will be skipped from the rear of the set of hops. For instance, for a header value of1.2.3.4, 2.3.4.5, 3.4.5.6
, if this value is set to"1"
, the address that will be used as the originating client IP is2.3.4.5
.x_forwarded_for_reject_not_authorized
(string: "true")
– If set false, if there is an X-Forwarded-For header in a connection from an unauthorized address, the header will be ignored and the client connection used as-is, rather than the client connection rejected.x_forwarded_for_reject_not_present
(string: "true")
– If set false, if there is no X-Forwarded-For header or it is empty, the client address will be used as-is, rather than the client connection rejected.
telemetry
Parameters
unauthenticated_metrics_access
(bool: false)
- If set to true, allows unauthenticated access to the/v1/sys/metrics
endpoint.
profiling
Parameters
unauthenticated_pprof_access
(bool: false)
- If set to true, allows unauthenticated access to the/v1/sys/pprof
endpoint.
tcp
Listener Examples
Configuring TLS
This example shows enabling a TLS listener.
listener "tcp" { tls_cert_file = "/etc/certs/vault.crt" tls_key_file = "/etc/certs/vault.key"}
Listening on Multiple Interfaces
This example shows Vault listening on a private interface, as well as localhost.
listener "tcp" { address = "127.0.0.1:8200"} listener "tcp" { address = "10.0.0.5:8200"} # Advertise the non-loopback interfaceapi_addr = "https://10.0.0.5:8200"cluster_addr = "https://10.0.0.5:8201"
Configuring unauthenticated metrics access
This example shows enabling unauthenticated metrics access.
listener "tcp" { telemetry { unauthenticated_metrics_access = true }}
Configuring unauthenticated profiling access
This example shows enabling unauthenticated profiling access.
listener "tcp" { profiling { unauthenticated_pprof_access = true }}
Listening on all IPv6 & IPv4 Interfaces
This example shows Vault listening on all IPv4 & IPv6 interfaces including localhost.
listener "tcp" { address = "[::]:8200" cluster_address = "[::]:8201"}
Listening to specific IPv6 address
This example shows Vault only using IPv6 and binding to the interface with the IP address: 2001:1c04:90d:1c00:a00:27ff:fefa:58ec
listener "tcp" { address = "[2001:1c04:90d:1c00:a00:27ff:fefa:58ec]:8200" cluster_address = "[2001:1c04:90d:1c00:a00:27ff:fefa:58ec]:8201"} # Advertise the non-loopback interfaceapi_addr = "https://[2001:1c04:90d:1c00:a00:27ff:fefa:58ec]:8200"cluster_addr = "https://[2001:1c04:90d:1c00:a00:27ff:fefa:58ec]:8201"