Proxy
Pojęciem proxy określamy serwer pośredniczący w ruchu sieciowym. Nasłuchuje na wybranym gnieździe i przesyła ruch dalej. Odbiorca widzi, że to ruch z serwer proxy a nie z „prawdziwego” klienta. Dawnymi czasy proxy dla WWW były bardzo popularne ponieważ pozwalały zaoszczędzić cenne pasmo łącza do Internetu. Serwer proxy uruchamiało się na granicy swojej sieci LAN. Wiem bo kiedy byłem dostawca Internetu takowy proxy, a dokładnie Squid uruchomiłem. Zasada proxy była taka: jak ktoś pobiera stronę WWW to proxy ją zapisuje w swoim buforze (RAM + dysk) i jeśli za chwilę inny użytkownik tej samej sieci będzie sięgał do Internetu po tą samą stronę to zostanie ona mu przesłana z proxy. Dzięki temu można było zaoszczędzić pasmo. Na początku mojej przygody bycia ISP miałem łącze DSL 1 MBps i dzieliłem go na 30 osób… Dziś ten sposób wykorzystania proxy już stracił sens ze względu na ogromne szybkości łącz jakie są dostępne, responsywne WWW, wideo na żądanie i inne treści multimedialne generowane dynamicznie. Pozostały oczywiście inne zalety takie jak: filtrowanie ruchu, podmiana adresu IP a tym samym geolokalizacji i inne.
Zasada działania proxy jest prosta: uruchamiamy jakiś proxy i na kliencie wpisujemy jego adres oraz port. Historycznie był to port 8080 TCP. Przykładem może być przeglądarka. W Firefox (jak i innych) mamy sekcję właśnie dla Proxy:
W tym wypadku każda strona jaka załaduje użytkownik będzie pobierana przez komputer 192.168.53.110. To może powodować problemy bo serwer WWW klienta będzie widział pod innym adresem. Oczywiście jeśli pracujemy w sieci z której na świat wychodzimy za pomocą NAT to adresu tegoż proxy nam nie zmienia. W każdym wypadku komputer klienta jest „za” proxy zatem jest to jakiś rodzaj filtra.
Tunel SSH + dynamiczne proxy
W przypadku SSH wykorzystamy ta funkcjonalność do czegoś innego. Wyobraźmy sobie, że pracujemy w sieci LAN, która ma dość rygorystyczne zasady filtrowania ruchu wychodzącego. Sieć nasza pozwala nam tylko na wybrane typy połączeń np: TCP port 443 i 22. Nic więcej. To jest możliwe, bo taka siec może posiadać swój wewnętrzny serwer DNS i w sumie nic więcej nie trzeba do brodzenia po Internecie. Co wtedy robić? Jak żyć? Oczywiście można odpalić VPN (TCP/443) ale co jak go nie mamy i nie wolno instalować? Z pomocą przyjdzie nam SSH! Wykonamy połączenie SSH do zewnętrznego serwera (oczywiście trzeba mieć takowy np. jakiś VPS albo w serwer domu) i przez ten serwer będziemy swobodnie korzystać z Internetu (nie tylko z www). Oczywiście jak sieć blokuje port 22 to trzeba to jakoś obejść ale to inny temat (port SSH na serwerze nie 22 ale 443, VPN itp.).
Schemat połączenia będzie wyglądał jak niżej:
Poniżej opis sieci i sytuacji:
- pracujemy na PC1, mamy tam zainstalowane ssh
- za jego pomocą łączymy się z serwerem ssh na zdalnej maszynie np. 83.123.87.23 (zwykłe połączenie ssh) ale z opcją utworzenie dynamicznego mapowania portu lokalnego (opcja -D), w tym przypadku na maszynie lokalnej, na jej interfejsie pętli zwrotnej (ang. loopback) otwiera się port 8080.
- wszystko co wpada do portu 8080 jest przekazywane do maszyny zdalnego serwera ssh i stamtąd dopiero wysyłane dalej (do Internetu)
- na swojej przeglądarce konfigurujemy proxy: adres 127.0.0.1 (lokalny bo tu nasłuchuje ssh) i podajemy nasz port 8080
- teraz cały ruch z przeglądarki (nieważne na jaki IP, nieważne na jaki port) jest kierowany szyfrowanym tunelem SSH do zdalnego serwera i dopiero ta maszyna przesyła go dalej
- pamiętaj, że bazowe połączenie SSH jest wykonane na protokół i port TCP/22 na maszynie zdalnej – jeśli to masz w swojej sieci zablokowane to musisz kombinować zapewne z innym portem
Poleceniem dla ssh uruchomienie się w taki sposób jest
#ssh nazwa@adresIP -D port_lokalny
Co jest istotne: to rozwiązanie wymaga aby port docelowy 22 był „przepuszczany” na lokalnym firewall. Jeśli tak nie jest to można na zdalnej maszynie skonfigurować serwer SSH tak, aby nasłuchiwał na wybranym porcie np. 443 (oczywiście jeśli nie ma konfliktu z webserwerem).
#ssh nazwa@adresIP -D port_lokalny -p 443
Podobnie możemy użyć programu typu PuTTY, podajemy adres i port serwera SSH:
W sekcji Tunel wybieramy Dynamic i wpisujemy lokalny port na jakim SSH będzie nasłuchiwać:
Po kliknięciu w Add należy się połączyć (Open) i można korzystać z proxy socks. Jak sprawdzić czy przekierowanie ruchu działa:
#netstat -aon | find "8080"
Dla Linux:
#netstat -aon | grep 8080
Opcje -D pochodzi on dynamic ponieważ na tym etapie nie wiadomo z jakich portów będzie korzystała przeglądarka. Wszelkie porty są pakowane do tunelu pracującego na lokalnym porcie 8080 i dopiero na zdalnej maszynie są wysyłane w świat żądania danego adresu IP i portu. Takie rozwiązanie zapewnia dużą elastyczność i niezależność od zabezpieczeń czy ograniczeń sieci lokalnej.






