serwer proxy
| Po angielsku | proxy server |
|---|---|
| Którą formą pisać | po angielsku Polski odpowiednik istnieje, ale w praktyce nikt tak nie pisze. Zostaw angielski, polski trzymaj jako synonim. |
| Inne formy | serwer pośredniczący · pośrednik w ruchu HTTP/HTTPS |
| Kategoria | Sieć i infrastruktura obronna |
Serwer proxy to serwer pośredniczący, który przyjmuje żądania klientów i przekazuje je dalej do docelowych zasobów, a odpowiedzi odsyła z powrotem. Specyfikacja HTTP definiuje proxy jako agenta przekazującego wiadomości, wybranego przez klienta, zwykle przez lokalną konfigurację, który przyjmuje żądania i próbuje je obsłużyć przez interfejs HTTP [1]. Pośrednik widzi cały ruch, który przez niego płynie, więc może go filtrować, zapisywać i przyspieszać. Może też ukrywać adres klienta przed serwerem docelowym [2].
Jak działa
Klient nie łączy się z serwerem docelowym bezpośrednio, lecz z proxy. Proxy nawiązuje własne połączenie z serwerem, pobiera odpowiedź i przekazuje ją klientowi. Po drodze może sprawdzić adres, zablokować niedozwoloną stronę, zapisać odpowiedź w pamięci podręcznej albo dopisać nagłówki.
Dla ruchu HTTPS przeglądarka używa metody CONNECT, która otwiera przez proxy dwukierunkowy tunel do serwera, zwykle na porcie 443 [2]. Specyfikacja HTTP opisuje tunel jako ślepy przekaźnik między dwoma połączeniami, który nie zmienia wiadomości [1]. Proxy nie widzi wtedy treści zaszyfrowanej przez TLS, chyba że sam rozszyfrowuje ruch.
Przeglądarka może dostać ustawienia pośrednika z pliku PAC. To funkcja JavaScript, która dla każdego adresu decyduje, czy łączyć się bezpośrednio, czy przez wskazany serwer proxy [2].
Rodzaje
Specyfikacja HTTP rozróżnia pośredników według tego, po czyjej stronie działają [1]. MDN opisuje proxy przekazujące jako obsługujące klientów, a odwrotne jako działające w imieniu serwerów i ukrywające ich tożsamość [2].
| Rodzaj | Kogo reprezentuje | Typowe zastosowania |
|---|---|---|
| Proxy przekazujące (forward) | klienta [1] | filtrowanie, pamięć podręczna, ukrycie adresu [2] |
| reverse proxy (bramka) | serwer źródłowy [1] | równoważenie obciążenia, pamięć podręczna, kompresja [2] |
| Tunel | nikogo, przekazuje bajty [1] | HTTPS przez CONNECT [2] |
| Proxy przechwytujące | testera | analiza i modyfikacja żądań [8] |
Proxy przechwytujące to narzędzie testowe. Sekurak opisuje ZAP, rozwijany przez OWASP na zasadach open source, jako program pośredniczący w ruchu HTTP i HTTPS, który pozwala zatrzymywać, edytować i odrzucać żądania wysyłane z przeglądarki [8]. Tego typu narzędzia są podstawą testów penetracyjnych aplikacji internetowych.
Pokrewnymi usługami są VPN, który tuneluje cały ruch urządzenia, a nie tylko HTTP, oraz CDN, czyli rozproszona sieć serwerów działających jak odwrotne proxy.
W WordPressie
WordPress spotyka proxy w dwóch rolach.
Proxy dla ruchu wychodzącego. WordPress łączy się z internetem, żeby sprawdzać aktualizacje i pobierać wtyczki. Na serwerach, które nie mają bezpośredniego wyjścia do sieci, ruch ten można skierować przez pośrednika. Klasa WP_HTTP_Proxy, obecna od wersji 2.8.0, obsługuje stałe definiowane w wp-config.php [5]:
define( 'WP_PROXY_HOST', 'proxy.example.com' );
define( 'WP_PROXY_PORT', '8080' );
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, *.example.com' );
Stała WP_PROXY_HOST włącza obsługę pośrednika, WP_PROXY_PORT nie ma wartości domyślnej i musi być zdefiniowana, a WP_PROXY_BYPASS_HOSTS wskazuje hosty, które mają omijać proxy [5]. Dostępne są też WP_PROXY_USERNAME i WP_PROXY_PASSWORD; dokumentacja zaznacza, że większość transportów obsługuje tylko uwierzytelnianie BASIC [5]. Taki pośrednik pozwala ograniczyć, dokąd serwer może się łączyć, co utrudnia wysyłanie danych przez webshell albo wtyczkę ze złośliwym kodem.
Proxy przed stroną. Gdy witryna stoi za odwrotnym proxy albo CDN, serwer widzi adres pośrednika, a adres odwiedzającego dostaje w nagłówku. Standardem jest Forwarded z RFC 7239, który pozwala pośrednikom ujawnić informacje utracone w trakcie pośredniczenia, na przykład pierwotny adres IP [4]. W praktyce częściej używa się nagłówka X-Forwarded-For [2]. Wtyczki liczące próby logowania albo blokujące adresy muszą odczytać go poprawnie; problem opisuje sekcja o zagrożeniach.
Zagrożenia i skutki
Fałszywe nagłówki. RFC 7239 ostrzega, że nagłówek Forwarded może zostać zmieniony, przez pomyłkę albo celowo, przez każdy węzeł na drodze do serwera, łącznie z klientem [4]. MDN dodaje, że wartości X-Forwarded-For nie wolno używać do celów bezpieczeństwa, takich jak rate limiting czy kontrola dostępu, jeśli nie pochodzą od znanych, zaufanych pośredników; przy serwerze dostępnym wprost z internetu żadna część tej listy nie jest wiarygodna [3]. Wtyczka, która ufa temu nagłówkowi bez sprawdzenia, pozwala obejść limit prób logowania albo białą listę adresów IP.
Podstawiony pośrednik. Kto kontroluje proxy, widzi i może modyfikować ruch klienta, czyli zajmuje pozycję man-in-the-middle (MITM). Niebezpiecznik w 2016 roku opisał ataki na protokół WPAD: podstawienie w sieci lokalnej pliku PAC wskazującego na serwer proxy atakującego pozwala mu przechwytywać cały niezaszyfrowany ruch ofiary [6]. Ryzyko jest największe w niezaufanych sieciach, takich jak publiczne hotspoty [6]; zob. zagrożenia publicznych sieci Wi-Fi.
Podatności samego proxy. Pośrednik jest oprogramowaniem i ma własne błędy. Sekurak w październiku 2024 roku opisał podatność CVE-2024-45802 w obsłudze języka ESI przez popularne proxy Squid, pozwalającą doprowadzić do wyczerpania pamięci serwera [7]. Skutek dotyczył wszystkich domen obsługiwanych przez proxy i wszystkich podłączonych klientów, a w chwili publikacji nie było poprawki zachowującej obsługę ESI [7].
Otwarte proxy. Źle skonfigurowany pośrednik, który przyjmuje żądania od dowolnych klientów, może posłużyć innym do ukrycia adresu podczas ataków, scrapingu czy rozsyłania spamu.
Dobre praktyki
- Ufać nagłówkom
ForwardediX-Forwarded-Fortylko od zaufanych pośredników, z listą ich adresów albo znaną liczbą warstw [3]. - Wyłączyć automatyczne wykrywanie proxy przez WPAD tam, gdzie nie jest potrzebne [6].
- Aktualizować oprogramowanie pośrednika i wyłączać nieużywane funkcje, takie jak ESI [7].
- Dla serwerów WWW rozważyć wyjście do internetu tylko przez proxy z listą dozwolonych hostów [5], zgodnie z zasadą najmniejszych uprawnień.
- Nie wystawiać proxy do internetu bez uwierzytelniania i ograniczenia adresów klientów.
Przypisy
8- [1] RFC 9110: HTTP Semantics, 3.7 Intermediaries · IETF
- [2] Proxy servers and tunneling · MDN Web Docs
- [3] X-Forwarded-For header · MDN Web Docs
- [4] RFC 7239: Forwarded HTTP Extension · IETF
- [5] WP_HTTP_Proxy — Class · WordPress.org
- [6] Wyłączcie protokół WPAD na swoich Windowsach · Niebezpiecznik
- [7] Nierozwiązana podatność w proxy squid dotycząca przetwarzania języka ESI · Sekurak
- [8] Wprowadzenie do narzędzia Zed Attack Proxy (ZAP) · Sekurak