proksi serverTakéForward proxy, Reverse proxy, HTTP proxy, Transparent proxyPokročilý
Definice
Proxy server je síťový prostředník, který přijímá požadavky od klientů, odesílá je dál k cílovým službám a vrací odpovědi zpět. Používá se k filtrování provozu, logování, cachování, anonymizaci, řízení přístupu nebo jako vstupní brána před webovou aplikací. Mění trasu komunikace, ale nemusí měnit samotný obsah dat.
Prostředník, který vidí cestu požadavku
Proxy server přijme požadavek od klienta, provede s ním vlastní práci a teprve potom komunikuje s cílovou službou. Klient tedy nemluví přímo s cílem, ale s prostředníkem. Podle nastavení může proxy jen předat data, upravit hlavičky, rozhodnout o povolení požadavku, uložit odpověď do mezipaměti nebo vybrat jiný cílový server.
V HTTP komunikaci vystupuje proxy jako samostatný účastník. Cílový server může vidět adresu proxy místo skutečné IP adresy klienta, případně dostane informaci v hlavičkách typu Forwarded nebo X-Forwarded-For. Důvěřovat těmto hlavičkám je bezpečné jen tehdy, když je vytváří infrastruktura pod kontrolou provozovatele.
Forward proxy: odchozí provoz uživatele
Forward proxy stojí blíž klientovi. Prohlížeč, operační systém nebo aplikace posílá požadavky na proxy, která rozhodne, zda je pustí ven. Firemní síť tak může blokovat rizikové domény, logovat provoz, vyžadovat autentizaci nebo přidat jednotný bod pro audit.
Forward proxy se používá také při vývoji a testování. Vývojář může sledovat požadavky aplikace, simulovat síťová omezení nebo směrovat provoz přes konkrétní prostředí. Proxy ale není automatická anonymita: cílová služba může poznat uživatele podle účtu, cookie, otisku prohlížeče nebo chování.
Reverse proxy: veřejná tvář aplikace
Reverse proxy stojí před serverovou aplikací. Návštěvník zná adresu proxy, zatímco interní backendy zůstávají skryté v privátní síti. Takové zapojení je běžné u Nginx, Apache HTTP Serveru, cloudových ingressů nebo API hran před mikroslužbami.
Reverse proxy často ukončuje TLS pro HTTPS, směruje požadavky podle domény a cesty, komprimuje odpovědi, nastavuje bezpečnostní hlavičky a předává provoz na více backendů. Funkčně se může překrývat s load balancerem, ale hlavní role proxy je zprostředkovat a řídit aplikační komunikaci, ne pouze rozdělovat zátěž.
Proxy, šifrování a důvěra
HTTPS omezuje, co běžná proxy uvidí. Při tunelování metodou CONNECT proxy obvykle zná cílový hostitel a objem přenesených dat, ale ne samotný obsah požadavků a odpovědí. Obsah zůstává chráněný mezi klientem a serverem.
Inspekční proxy může obsah HTTPS číst jen tehdy, když klient důvěřuje její certifikační autoritě a proxy vytvoří nové TLS spojení na obě strany. Takové nasazení vyžaduje jasnou správu certifikátů, informování uživatelů a právní i bezpečnostní pravidla.
Kde proxy rozbije aplikaci
Aplikace za reverse proxy může špatně určit schéma, hostitele nebo klientskou adresu, pokud framework nepočítá s předávanými hlavičkami. Výsledkem bývají chybné absolutní odkazy, přesměrování z HTTPS na HTTP, špatné limity podle IP adresy nebo matoucí záznamy v logu.
Další riziko vzniká u dlouhých spojení, streamování a WebSocketů. Ne každá proxy správně předává upgrade spojení, timeouty nebo průběžné odpovědi. Cache na proxy vrstvě zase může vrátit starou odpověď, pokud aplikace nepoužívá přesné hlavičky pro platnost a sdílení obsahu.
Příklady z praxe
Odchozí proxy při volání API
Vývojář v interní síti spouští diagnostický požadavek přes firemní odchozí proxy. Proxy ověří, že uživatel smí kontaktovat externí API, zapíše požadavek do logu a teprve potom ho odešle dál. Pokud doména není povolená, curl dostane chybovou odpověď z proxy, ne z cílového API.
curl -x http://proxy.intra.example:3128 https://api.example.com/statusReverse proxy před webovou aplikací
Nginx přijímá veřejný HTTPS provoz a předává ho lokální aplikaci běžící na portu 3000. Backend nemusí přímo obsluhovat TLS ani být vystavený do internetu. Aplikace zároveň dostane hlavičky, ze kterých může správně odvodit původní hostitele, protokol a klientskou adresu.
server { listen 443 ssl; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
Časté omyly
- MýtusProxy server mě vždycky anonymizuje.
- Ve skutečnostiProxy server může skrýt klientovu IP adresu před cílovým serverem, ale anonymita tím nekončí. Uživatel může být rozpoznán podle účtu, cookie, otisku prohlížeče, DNS úniků nebo logů u provozovatele proxy.
- MýtusKdyž používám HTTPS, proxy server do komunikace nemůže nijak zasáhnout.
- Ve skutečnostiHTTPS chrání obsah před běžnou proxy, ale proxy pořád může blokovat spojení, vidět cílový hostitel, měřit objem dat nebo ukončovat spojení. Inspekční proxy s důvěryhodným firemním certifikátem může obsah dešifrovat a znovu zašifrovat.
Časté dotazy
- Kdy proxy server nenahradí VPN?
- Proxy server nenahradí VPN v situaci, kdy má být veškerý provoz zařízení směrován přes šifrovaný síťový tunel. Proxy obvykle pracuje jen pro konkrétní aplikaci, protokol nebo nastavený typ provozu. VPN naopak mění síťovou cestu na úrovni operačního systému a hodí se pro přístup do privátní sítě. Proxy je vhodnější pro filtrování, audit nebo aplikační směrování konkrétních požadavků.
- Může proxy server číst obsah HTTPS komunikace?
- Proxy server může číst obsah HTTPS komunikace jen za určitých podmínek. Běžná HTTP proxy při metodě CONNECT předává šifrovaný tunel a nevidí tělo požadavků ani odpovědí. Inspekční proxy obsah přečte pouze tehdy, když klient důvěřuje její certifikační autoritě a proxy vytváří samostatná TLS spojení. Takové řešení je silný zásah do soukromí i bezpečnostního modelu.
- Proč aplikace za reverse proxy vidí IP adresu proxy?
- Aplikace za reverse proxy vidí IP adresu proxy proto, že síťové spojení skutečně přichází od proxy serveru. Původní adresa klienta se obvykle předává v hlavičkách, například Forwarded nebo X-Forwarded-For. Framework musí být nakonfigurovaný tak, aby těmto hlavičkám důvěřoval jen od známých proxy. Jinak může útočník podvrhnout IP adresu a obejít logování nebo limity.
- Je proxy server bezpečnostní nástroj, nebo jen síťová pomůcka?
- Proxy server může být bezpečnostní nástroj i běžná síťová součást. Bezpečnostní roli plní při filtrování domén, vynucení autentizace, kontrole hlaviček, omezení přístupu nebo oddělení backendů od internetu. Samotná přítomnost proxy ale aplikaci nezabezpečí. Špatně nastavená proxy může naopak odhalit interní služby, důvěřovat podvrženým hlavičkám nebo vytvořit otevřený relay.
Zdroje
- HTTP Semantics(otevře se v novém okně)
- HTTP/1.1(otevře se v novém okně)
- The Proxy-Status HTTP Response Header Field(otevře se v novém okně)
- Proxy server(otevře se v novém okně)