Zmerit i to, jak nas vidi vlastni proxy

Echo sluzba na internetu odpovi verejnou adresu. Jenze volani na vlastni
domenu se otaci zpatky na tentyz stroj a reverse proxy pak vidi neco jineho,
typicky adresu docker bridge. A prave tu porovnava seznam povolenych IP
u sluzeb za toutez proxy, takze verejna adresa muze byt povolena a volani
z containeru presto skonci na 403.

Zmeri se to tak, ze portal zavola svoji vlastni verejnou adresu
(PUBLIC_ORIGIN + ROOT_PATH + /whoami) a precte si, jak k nemu volani doslo.
Kruh sam pres sebe, ale nic jineho tuhle adresu nezjisti: mezi container
a server se tim dostane ta sama proxy, kterou prochazi volani na sousedni
sluzby.

Novy /api/whoami je zamerne bez prihlaseni. Vraci volajicimu jeho vlastni
adresu, tedy nic, co by uz nevedel, stejne jako kterakoliv echo sluzba.

Obe mereni bezi naraz a jsou videt na strance Konektory vedle sebe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-25 07:33:46 +02:00
co-authored by Claude Opus 5
parent 4545de8076
commit 6a2e0dc424
7 changed files with 228 additions and 21 deletions
+44
View File
@@ -1657,6 +1657,34 @@ export function buildOpenApiDocument() {
responses: { '204': { description: 'Smazano' }, '404': { description: 'Neexistuje' } },
},
},
'/api/whoami': {
get: {
tags: ['Systém'],
summary: 'Jak nas vidi ten, kdo nam vola',
description:
'Vraci volajicimu jeho vlastni adresu tak, jak dorazila k serveru. Zni to ' +
'zbytecne, ale je to jediny zpusob, jak zmerit, s jakou zdrojovou adresou ' +
'doruci reverse proxy volani, ktere vyslo z naseho containeru. Bez prihlaseni ' +
'zamerne - volajici dostane svoji vlastni adresu, nic navic.',
responses: {
'200': {
description: 'Adresa volajiciho',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
ip: { type: 'string', nullable: true },
forwardedFor: { type: 'string', nullable: true },
remoteAddress: { type: 'string', nullable: true },
},
},
},
},
},
},
},
},
'/api/dashboard/connectors/egress-ip': {
get: {
tags: ['Konektory'],
@@ -1679,6 +1707,22 @@ export function buildOpenApiDocument() {
source: { type: 'string' },
checkedAt: { type: 'string', format: 'date-time' },
error: { type: 'string' },
viaProxy: {
type: 'object',
nullable: true,
description:
'Jak nas vidi nase vlastni reverse proxy. Zmeri se volanim na ' +
'vlastni verejnou adresu (PUBLIC_ORIGIN + ROOT_PATH + /whoami), ' +
'ktere se otoci zpatky na tentyz stroj. Byva jina nez ta verejna ' +
'a prave ji porovnava seznam povolenych IP u sluzeb za toutez proxy.',
properties: {
ip: { type: 'string', nullable: true },
forwardedFor: { type: 'string', nullable: true },
remoteAddress: { type: 'string', nullable: true },
url: { type: 'string' },
error: { type: 'string' },
},
},
},
},
},