mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
lib/httpserver: add flags to specify HSTS / Frame-Options / CSP headers for httpserver (#5111)
support `Strict-Transport-Security`, `Content-Security-Policy` and `X-Frame-Options` HTTP headers in all VictoriaMetrics components. The values for headers can be specified by users via the following flags: `-http.header.hsts`, `-http.header.csp` and `-http.header.frameOptions`. Co-authored-by: hagen1778 <roman@victoriametrics.com>
This commit is contained in:
parent
29cebd82fb
commit
ad839aa492
22 changed files with 175 additions and 1 deletions
|
@ -1948,6 +1948,7 @@ VictoriaMetrics provides the following security-related command-line flags:
|
||||||
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
||||||
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
||||||
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
||||||
|
* `-http.header.hsts`, `-http.header.csp`, and `-http.header.frameOptions` for serving `Strict-Transport-Security`, `Content-Security-Policy` and `X-Frame-Options` HTTP response headers.
|
||||||
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
||||||
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
||||||
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
||||||
|
@ -2541,6 +2542,12 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1263,6 +1263,12 @@ See the docs at https://docs.victoriametrics.com/vmagent.html .
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1046,6 +1046,12 @@ The shortlist of configuration flags is the following:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -408,6 +408,12 @@ See the docs at https://docs.victoriametrics.com/vmauth.html .
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -316,6 +316,12 @@ Run `vmbackup -help` in order to see all the available options:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -450,6 +450,12 @@ command-line flags:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -353,6 +353,12 @@ The shortlist of configuration flags include the following:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -113,6 +113,12 @@ i.e. the end result would be similar to [rsync --delete](https://askubuntu.com/q
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -31,6 +31,7 @@ The sandbox cluster installation is running under the constant load generated by
|
||||||
**vmalert's cmd-line flag `datasource.queryTimeAlignment` was deprecated and will have no effect anymore. It will be completely removed in next releases. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5049) and more detailed changes below.**
|
**vmalert's cmd-line flag `datasource.queryTimeAlignment` was deprecated and will have no effect anymore. It will be completely removed in next releases. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5049) and more detailed changes below.**
|
||||||
**vmalert's cmd-line flag `datasource.lookback` will be deprecated soon. Please use `-rule.evalDelay` command-line flag instead. It will have no effect in next release and be removed in future releases. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5155).**
|
**vmalert's cmd-line flag `datasource.lookback` will be deprecated soon. Please use `-rule.evalDelay` command-line flag instead. It will have no effect in next release and be removed in future releases. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5155).**
|
||||||
|
|
||||||
|
* SECURITY: support `Strict-Transport-Security`, `Content-Security-Policy` and `X-Frame-Options` HTTP headers in all VictoriaMetrics components. The values for headers can be specified by users via the following flags: `-http.header.hsts`, `-http.header.csp` and `-http.header.frameOptions`.
|
||||||
* SECURITY: upgrade Go builder from Go1.21.1 to Go1.21.3. See [the list of issues addressed in Go1.21.2](https://github.com/golang/go/issues?q=milestone%3AGo1.21.2+label%3ACherryPickApproved) and [the list of issues addressed in Go1.21.3](https://github.com/golang/go/issues?q=milestone%3AGo1.21.3+label%3ACherryPickApproved).
|
* SECURITY: upgrade Go builder from Go1.21.1 to Go1.21.3. See [the list of issues addressed in Go1.21.2](https://github.com/golang/go/issues?q=milestone%3AGo1.21.2+label%3ACherryPickApproved) and [the list of issues addressed in Go1.21.3](https://github.com/golang/go/issues?q=milestone%3AGo1.21.3+label%3ACherryPickApproved).
|
||||||
|
|
||||||
* FEATURE: `vmselect`: improve query performance on systems with big number of CPU cores (`>=32`). Add `-search.maxWorkersPerQuery` command-line flag, which can be used for fine-tuning query performance on systems with big number of CPU cores. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5195).
|
* FEATURE: `vmselect`: improve query performance on systems with big number of CPU cores (`>=32`). Add `-search.maxWorkersPerQuery` command-line flag, which can be used for fine-tuning query performance on systems with big number of CPU cores. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5195).
|
||||||
|
|
|
@ -267,10 +267,11 @@ General security recommendations:
|
||||||
- All the VictoriaMetrics cluster components must run in protected private network without direct access from untrusted networks such as Internet.
|
- All the VictoriaMetrics cluster components must run in protected private network without direct access from untrusted networks such as Internet.
|
||||||
- External clients must access `vminsert` and `vmselect` via auth proxy such as [vmauth](https://docs.victoriametrics.com/vmauth.html)
|
- External clients must access `vminsert` and `vmselect` via auth proxy such as [vmauth](https://docs.victoriametrics.com/vmauth.html)
|
||||||
or [vmgateway](https://docs.victoriametrics.com/vmgateway.html).
|
or [vmgateway](https://docs.victoriametrics.com/vmgateway.html).
|
||||||
- The auth proxy must accept auth tokens from untrusted networks only via https in order to protect the auth tokens from eavesdropping.
|
- The auth proxy must accept auth tokens from untrusted networks only via https in order to protect the auth tokens from MitM attacks.
|
||||||
- It is recommended using distinct auth tokens for distinct [tenants](#multitenancy) in order to reduce potential damage in case of compromised auth token for some tenants.
|
- It is recommended using distinct auth tokens for distinct [tenants](#multitenancy) in order to reduce potential damage in case of compromised auth token for some tenants.
|
||||||
- Prefer using lists of allowed [API endpoints](#url-format), while disallowing access to other endpoints when configuring auth proxy in front of `vminsert` and `vmselect`.
|
- Prefer using lists of allowed [API endpoints](#url-format), while disallowing access to other endpoints when configuring auth proxy in front of `vminsert` and `vmselect`.
|
||||||
This minimizes attack surface.
|
This minimizes attack surface.
|
||||||
|
- All http-serving components also respond with reasonable default headers for HSTS, CSP and Frame-Options, configurable with flags.
|
||||||
|
|
||||||
See also [security recommendation for single-node VictoriaMetrics](https://docs.victoriametrics.com/#security)
|
See also [security recommendation for single-node VictoriaMetrics](https://docs.victoriametrics.com/#security)
|
||||||
and [the general security page at VictoriaMetrics website](https://victoriametrics.com/security/).
|
and [the general security page at VictoriaMetrics website](https://victoriametrics.com/security/).
|
||||||
|
@ -896,6 +897,12 @@ Below is the output for `/path/to/vminsert -help`:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
@ -1118,6 +1125,12 @@ Below is the output for `/path/to/vmselect -help`:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
@ -1356,6 +1369,12 @@ Below is the output for `/path/to/vmstorage -help`:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1951,6 +1951,7 @@ VictoriaMetrics provides the following security-related command-line flags:
|
||||||
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
||||||
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
||||||
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
||||||
|
* `-http.header.hsts`, `-http.header.csp`, and `-http.header.frameOptions` for serving `Strict-Transport-Security`, `Content-Security-Policy` and `X-Frame-Options` HTTP response headers.
|
||||||
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
||||||
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
||||||
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
||||||
|
@ -2544,6 +2545,12 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1959,6 +1959,7 @@ VictoriaMetrics provides the following security-related command-line flags:
|
||||||
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
* `-tls`, `-tlsCertFile` and `-tlsKeyFile` for switching from HTTP to HTTPS.
|
||||||
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
* `-httpAuth.username` and `-httpAuth.password` for protecting all the HTTP endpoints
|
||||||
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
with [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
|
||||||
|
* `-http.header.hsts`, `-http.header.csp`, and `-http.header.frameOptions` for serving `Strict-Transport-Security`, `Content-Security-Policy` and `X-Frame-Options` HTTP response headers.
|
||||||
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
* `-deleteAuthKey` for protecting `/api/v1/admin/tsdb/delete_series` endpoint. See [how to delete time series](#how-to-delete-time-series).
|
||||||
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
* `-snapshotAuthKey` for protecting `/snapshot*` endpoints. See [how to work with snapshots](#how-to-work-with-snapshots).
|
||||||
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
* `-forceMergeAuthKey` for protecting `/internal/force_merge` endpoint. See [force merge docs](#forced-merge).
|
||||||
|
@ -2552,6 +2553,12 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -160,6 +160,12 @@ Pass `-help` to VictoriaLogs in order to see the list of supported command-line
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1274,6 +1274,12 @@ See the docs at https://docs.victoriametrics.com/vmagent.html .
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -1057,6 +1057,12 @@ The shortlist of configuration flags is the following:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -419,6 +419,12 @@ See the docs at https://docs.victoriametrics.com/vmauth.html .
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -327,6 +327,12 @@ Run `vmbackup -help` in order to see all the available options:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -461,6 +461,12 @@ command-line flags:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -364,6 +364,12 @@ The shortlist of configuration flags include the following:
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -124,6 +124,12 @@ i.e. the end result would be similar to [rsync --delete](https://askubuntu.com/q
|
||||||
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem (default 2m0s)
|
||||||
-http.disableResponseCompression
|
-http.disableResponseCompression
|
||||||
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
Disable compression of HTTP responses to save CPU resources. By default, compression is enabled to save network bandwidth
|
||||||
|
-http.header.csp string
|
||||||
|
Value for 'Content-Security-Policy' header
|
||||||
|
-http.header.frameOptions string
|
||||||
|
Value for 'X-Frame-Options' header
|
||||||
|
-http.header.hsts string
|
||||||
|
Value for 'Strict-Transport-Security' header
|
||||||
-http.idleConnTimeout duration
|
-http.idleConnTimeout duration
|
||||||
Timeout for incoming idle http connections (default 1m0s)
|
Timeout for incoming idle http connections (default 1m0s)
|
||||||
-http.maxGracefulShutdownDuration duration
|
-http.maxGracefulShutdownDuration duration
|
||||||
|
|
|
@ -51,6 +51,10 @@ var (
|
||||||
shutdownDelay = flag.Duration("http.shutdownDelay", 0, `Optional delay before http server shutdown. During this delay, the server returns non-OK responses from /health page, so load balancers can route new requests to other servers`)
|
shutdownDelay = flag.Duration("http.shutdownDelay", 0, `Optional delay before http server shutdown. During this delay, the server returns non-OK responses from /health page, so load balancers can route new requests to other servers`)
|
||||||
idleConnTimeout = flag.Duration("http.idleConnTimeout", time.Minute, "Timeout for incoming idle http connections")
|
idleConnTimeout = flag.Duration("http.idleConnTimeout", time.Minute, "Timeout for incoming idle http connections")
|
||||||
connTimeout = flag.Duration("http.connTimeout", 2*time.Minute, `Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem`)
|
connTimeout = flag.Duration("http.connTimeout", 2*time.Minute, `Incoming http connections are closed after the configured timeout. This may help to spread the incoming load among a cluster of services behind a load balancer. Please note that the real timeout may be bigger by up to 10% as a protection against the thundering herd problem`)
|
||||||
|
|
||||||
|
headerHSTS = flag.String("http.header.hsts", "", "Value for 'Strict-Transport-Security' header")
|
||||||
|
headerFrameOptions = flag.String("http.header.frameOptions", "", "Value for 'X-Frame-Options' header")
|
||||||
|
headerCSP = flag.String("http.header.csp", "", "Value for 'Content-Security-Policy' header")
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -238,6 +242,15 @@ func handlerWrapper(s *server, w http.ResponseWriter, r *http.Request, rh Reques
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if *headerHSTS != "" {
|
||||||
|
w.Header().Add("Strict-Transport-Security", *headerHSTS)
|
||||||
|
}
|
||||||
|
if *headerFrameOptions != "" {
|
||||||
|
w.Header().Add("X-Frame-Options", *headerFrameOptions)
|
||||||
|
}
|
||||||
|
if *headerCSP != "" {
|
||||||
|
w.Header().Add("Content-Security-Policy", *headerCSP)
|
||||||
|
}
|
||||||
w.Header().Add("X-Server-Hostname", hostname)
|
w.Header().Add("X-Server-Hostname", hostname)
|
||||||
requestsTotal.Inc()
|
requestsTotal.Inc()
|
||||||
if whetherToCloseConn(r) {
|
if whetherToCloseConn(r) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package httpserver
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,3 +35,32 @@ func TestGetQuotedRemoteAddr(t *testing.T) {
|
||||||
f("1.2.3.4", "foo.bar", `"1.2.3.4, X-Forwarded-For: foo.bar"`)
|
f("1.2.3.4", "foo.bar", `"1.2.3.4, X-Forwarded-For: foo.bar"`)
|
||||||
f("1.2\n\"3.4", "foo\nb\"ar", `"1.2\n\"3.4, X-Forwarded-For: foo\nb\"ar"`)
|
f("1.2\n\"3.4", "foo\nb\"ar", `"1.2\n\"3.4, X-Forwarded-For: foo\nb\"ar"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHandlerWrapper(t *testing.T) {
|
||||||
|
*headerHSTS = "foo"
|
||||||
|
*headerFrameOptions = "bar"
|
||||||
|
*headerCSP = "baz"
|
||||||
|
defer func() {
|
||||||
|
*headerHSTS = ""
|
||||||
|
*headerFrameOptions = ""
|
||||||
|
*headerCSP = ""
|
||||||
|
}()
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("GET", "/health", nil)
|
||||||
|
|
||||||
|
srv := &server{s: &http.Server{}}
|
||||||
|
w := &httptest.ResponseRecorder{}
|
||||||
|
handlerWrapper(srv, w, req, func(_ http.ResponseWriter, _ *http.Request) bool {
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
if w.Header().Get("Strict-Transport-Security") != "foo" {
|
||||||
|
t.Errorf("HSTS header not set")
|
||||||
|
}
|
||||||
|
if w.Header().Get("X-Frame-Options") != "bar" {
|
||||||
|
t.Errorf("X-Frame-Options header not set")
|
||||||
|
}
|
||||||
|
if w.Header().Get("Content-Security-Policy") != "baz" {
|
||||||
|
t.Errorf("CSP header not set")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue