caddyproxy: admin API закрыт на loopback, метрики вынесены на :2020
- `admin :2019` слушал всю web_proxy_network: любой контейнер мог POST-ом в /config/ переписать маршрутизацию и снять forward_auth. Теперь `admin localhost:2019`. - Метрики для netdata отдаёт отдельный site-блок `http://:2020 { metrics /metrics }`, netdata скрейпит новый порт. - Порт для метрик именно 2020, а не 2019, как предлагала задача: сайт на :2019 перехватывает IPv6-петлю (admin висит только на IPv4), из-за чего `caddy reload` внутри контейнера возвращает 0 и молча ничего не применяет — проверено на caddy:2.11.4.
This commit is contained in:
@@ -17,7 +17,6 @@ _(sec-ревью)_ — три независимых security-ревью на м
|
|||||||
|
|
||||||
## Высокий
|
## Высокий
|
||||||
|
|
||||||
- [Закрыть admin API Caddy (localhost вместо всей сети)](caddy-admin-api-localhost.md) — `admin :2019` слушает всю docker-сеть; любой контейнер может переписать маршрутизацию и снять forward_auth _(sec-ревью)_
|
|
||||||
- [Убрать группу `docker` у сервисных пользователей](service-users-docker-group.md) — `docker` = root на хосте; ~все app-аккаунты фактически root, изоляция «юзер на сервис» обнуляется _(sec-ревью)_
|
- [Убрать группу `docker` у сервисных пользователей](service-users-docker-group.md) — `docker` = root на хосте; ~все app-аккаунты фактически root, изоляция «юзер на сервис» обнуляется _(sec-ревью)_
|
||||||
- [Изолировать/запаролить сессионный redis Authelia](authelia-redis-isolation.md) — стор сессий SSO в общей сети без пароля; запись в него = hijack SSO всех сервисов _(sec-ревью)_
|
- [Изолировать/запаролить сессионный redis Authelia](authelia-redis-isolation.md) — стор сессий SSO в общей сети без пароля; запись в него = hijack SSO всех сервисов _(sec-ревью)_
|
||||||
- [Алерты на проблемные контейнеры](container-alerts.md) — wakapi крутился в restart-loop несколько дней незамеченным; healthcheck в compose + алерты Netdata
|
- [Алерты на проблемные контейнеры](container-alerts.md) — wakapi крутился в restart-loop несколько дней незамеченным; healthcheck в compose + алерты Netdata
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
# Закрыть admin API Caddy (localhost вместо всей сети)
|
|
||||||
|
|
||||||
**Приоритет:** высокий
|
|
||||||
|
|
||||||
`files/caddyproxy/Caddyfile.template:8` — `admin :2019`: admin API слушает на всех
|
|
||||||
интерфейсах контейнера, а в `web_proxy_network` сидят все приложения. Любой
|
|
||||||
скомпрометированный контейнер (rssbridge, tududi, calibre, ...) может POST-ом в
|
|
||||||
`http://caddyproxy:2019/config/` переписать маршрутизацию, снять `forward_auth`,
|
|
||||||
перехватить трафик или сертификаты. Порт реально нужен только netdata для метрик
|
|
||||||
(`files/netdata/go.d/prometheus.conf`). Фикс: вернуть `admin localhost:2019`, а
|
|
||||||
метрики отдать отдельным site-блоком `:2019 { metrics }` — netdata продолжит
|
|
||||||
скрейпить, admin API станет недоступен из сети.
|
|
||||||
|
|
||||||
Из sec-ревью (fable, 2026-07-13).
|
|
||||||
|
|
||||||
Связано: files/caddyproxy/Caddyfile.template, files/netdata/go.d/prometheus.conf.
|
|
||||||
@@ -5,13 +5,28 @@
|
|||||||
grace_period 15s
|
grace_period 15s
|
||||||
|
|
||||||
# Admin API слушает только loopback контейнера: на :2019 его видела бы вся
|
# Admin API слушает только loopback контейнера: на :2019 его видела бы вся
|
||||||
|
# web_proxy_network, и любое приложение могло бы переписать маршрутизацию
|
||||||
|
# или снять forward_auth. Метрики вынесены в отдельный site-блок ниже, и
|
||||||
|
# порт у него другой: сайт на :2019 перехватывал бы IPv6-петлю (admin висит
|
||||||
|
# только на IPv4), и `caddy reload` молча ничего не применял бы.
|
||||||
|
admin localhost:2019
|
||||||
|
|
||||||
# Enable metrics in Prometheus format
|
# Enable metrics in Prometheus format
|
||||||
# https://caddyserver.com/docs/metrics
|
# https://caddyserver.com/docs/metrics
|
||||||
metrics
|
metrics
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
|
# Metrics
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Prometheus-метрики для netdata (files/netdata/go.d/prometheus.conf).
|
||||||
|
# Наружу порт не публикуется — доступен только внутри web_proxy_network.
|
||||||
|
http://:2020 {
|
||||||
|
metrics /metrics
|
||||||
|
}
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# Snippets
|
# Snippets
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ update_every: 15
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
- name: caddyproxy
|
- name: caddyproxy
|
||||||
url: http://caddyproxy:2019/metrics
|
url: http://caddyproxy:2020/metrics
|
||||||
selector:
|
selector:
|
||||||
allow:
|
allow:
|
||||||
- "caddy_http_*"
|
- "caddy_http_*"
|
||||||
|
|||||||
Reference in New Issue
Block a user