mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 09:55:10 +00:00
openspec: archive fix-trusted-proxies, merge trusted-proxies spec
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# gotosocial/trusted-proxies Specification
|
||||
|
||||
## Purpose
|
||||
Обеспечить корректную работу rate-limiting и федеризации GoToSocial за реверс-прокси:
|
||||
инстанс должен доверять реальному адресу прокси и брать клиентский IP из
|
||||
`X-Forwarded-For` / `X-Real-IP`, а не видеть все запросы с одного адреса.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: Trusted-proxies включает реальный адрес реверс-прокси
|
||||
|
||||
- **MUST**: В `docker-compose.yml` (env `GTS_TRUSTED_PROXIES`) и `config.yaml`
|
||||
(`trusted-proxies`) включены:
|
||||
- `10.8.0.4/32` — WireGuard-адрес vps02 (Caddy, реверс-прокси)
|
||||
- `127.0.0.1/32` и `::1` — локальные адреса
|
||||
- `172.30.0.1/16` — шлюз docker-сети gotosocial
|
||||
- **MUST**: Рабочим конфигом является env в docker-compose.yml (`GTS_*`);
|
||||
`config.yaml` — reference и держится синхронным
|
||||
- **SHOULD**: Предупреждение о trusted-proxies на главной странице инстанса отсутствует
|
||||
|
||||
#### Scenario: Предупреждение исчезло
|
||||
|
||||
- **GIVEN** инстанс запущен с обновлённым `GTS_TRUSTED_PROXIES`
|
||||
- **WHEN** открыть главную страницу `https://social.dedinit.ru/`
|
||||
- **THEN** на странице нет текста «Warning! It looks like trusted-proxies is not set correctly»
|
||||
|
||||
#### Scenario: Конфиг синхронизирован
|
||||
|
||||
- **GIVEN** обновлён docker-compose.yml
|
||||
- **WHEN** выполнить `docker compose config | grep TRUSTED`
|
||||
- **THEN** в выводе присутствуют `10.8.0.4/32`, `127.0.0.1/32`, `::1`, `172.30.0.1/16`
|
||||
|
||||
### Requirement: Rate limiting использует реальный клиентский IP
|
||||
|
||||
- **MUST**: После настройки GtS определяет IP клиента из заголовков прокси, а не из
|
||||
source-адреса docker-gateway
|
||||
- **SHOULD**: Все внешние запросы к инстансу логируются с реальным IP клиента
|
||||
|
||||
#### Scenario: Логи содержат реальный клиентский IP
|
||||
|
||||
- **GIVEN** инстанс пересоздан с новой конфигурацией
|
||||
- **WHEN** `docker compose logs gotosocial --since 5m | grep -i 'GET /' | tail -5`
|
||||
- **THEN** записи содержат IP клиента, отличный от `172.30.x.x` (для внешних запросов)
|
||||
Reference in New Issue
Block a user