diff --git a/docs/backlog/README.md b/docs/backlog/README.md index adc2c46..a85dcf9 100644 --- a/docs/backlog/README.md +++ b/docs/backlog/README.md @@ -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 diff --git a/docs/backlog/caddy-admin-api-localhost.md b/docs/backlog/caddy-admin-api-localhost.md deleted file mode 100644 index 88e1c9b..0000000 --- a/docs/backlog/caddy-admin-api-localhost.md +++ /dev/null @@ -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. diff --git a/files/caddyproxy/Caddyfile.template b/files/caddyproxy/Caddyfile.template index 00ef4d7..fa0a638 100644 --- a/files/caddyproxy/Caddyfile.template +++ b/files/caddyproxy/Caddyfile.template @@ -5,13 +5,28 @@ { grace_period 15s - admin :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 # https://caddyserver.com/docs/metrics metrics } +# ------------------------------------------------------------------- +# Metrics +# ------------------------------------------------------------------- + +# Prometheus-метрики для netdata (files/netdata/go.d/prometheus.conf). +# Наружу порт не публикуется — доступен только внутри web_proxy_network. +http://:2020 { + metrics /metrics +} + # ------------------------------------------------------------------- # Snippets # ------------------------------------------------------------------- diff --git a/files/netdata/go.d/prometheus.conf b/files/netdata/go.d/prometheus.conf index 1e713fd..7482b8f 100644 --- a/files/netdata/go.d/prometheus.conf +++ b/files/netdata/go.d/prometheus.conf @@ -3,7 +3,7 @@ update_every: 15 jobs: - name: caddyproxy - url: http://caddyproxy:2019/metrics + url: http://caddyproxy:2020/metrics selector: allow: - "caddy_http_*"