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-ревью)_
|
||||
- [Изолировать/запаролить сессионный redis Authelia](authelia-redis-isolation.md) — стор сессий SSO в общей сети без пароля; запись в него = hijack SSO всех сервисов _(sec-ревью)_
|
||||
- [Алерты на проблемные контейнеры](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
|
||||
|
||||
# Admin API слушает только loopback контейнера: на :2019 его видела бы вся
|
||||
|
||||
# web_proxy_network, и любое приложение могло бы переписать маршрутизацию
|
||||
# или снять forward_auth. Метрики вынесены в отдельный site-блок ниже, и
|
||||
# порт у него другой: сайт на :2019 перехватывал бы IPv6-петлю (admin висит
|
||||
# только на IPv4), и `caddy reload` молча ничего не применял бы.
|
||||
admin localhost:2019
|
||||
|
||||
# Enable metrics in Prometheus format
|
||||
# https://caddyserver.com/docs/metrics
|
||||
metrics
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Metrics
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# Prometheus-метрики для netdata (files/netdata/go.d/prometheus.conf).
|
||||
# Наружу порт не публикуется — доступен только внутри web_proxy_network.
|
||||
http://:2020 {
|
||||
metrics /metrics
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Snippets
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ update_every: 15
|
||||
jobs:
|
||||
|
||||
- name: caddyproxy
|
||||
url: http://caddyproxy:2019/metrics
|
||||
url: http://caddyproxy:2020/metrics
|
||||
selector:
|
||||
allow:
|
||||
- "caddy_http_*"
|
||||
|
||||
Reference in New Issue
Block a user