Pitajte tri inženjera kako doći do interne usluge i dobit ćete tri rješenja: web proxy, SSH tunel ili puni VPN. Sva tri mogu približiti udaljenu uslugu i sva tri mogu učiniti da saobraćaj izgleda kao da dolazi s drugog mjesta. Razlike se pokažu kasnije, kada protokol u upotrebi nije onaj koji odabrani alat pretpostavlja. Rješenje koje prođe brzu provjeru u pregledniku redovno padne na aplikaciji koja je potaknula zahtjev.

Odlučite na osnovu dvije činjenice: koji protokoli moraju proći i ko može razriješiti uključena imena. Sve ostalo je stvar preferencije.

Proxy prenosi samo ono što razumije

Web proxy raščlanjuje protokol za koji je napravljen. Klijent mu predaje zahtjev, a on taj zahtjev predaje dalje, pa aplikacija bez postavke proxyja uopće ne sudjeluje. Za HTTPS klijentu treba neproziran kanal, koji proxy osigurava kroz CONNECT, a ne čitanjem zahtjeva.

SSH dinamičko prosljeđivanje otvara lokalni port koji govori SOCKS, a taj port prenosi TCP tok na bilo koje odredište koje klijent navede. Protokoli zasnovani na TCP-u obično rade kroz njega. UDP ne radi, osim ako alat izričito doda podršku. Lokalno prosljeđivanje je još uže: jedan lokalni port preslikan na jedan fiksni host i port, što služi jednoj poznatoj usluzi i ničemu više.

ssh -D 1080 user@bastion
ssh -L 8443:fileserver.internal:443 user@bastion

VPN prenosi pakete. Sve što klijent usmjeri u tunel prolazi kroz njega, uključujući UDP i ICMP, zato odgovara zahtjevu mreže, a ne pojedinačne veze.

Neko mora razriješiti ime

Kada ciljno ime postoji samo u DNS-u udaljene mreže, računar koji obavlja pretragu mora vidjeti tu zonu. Web proxy sam obavlja pretragu, pa interno ime radi kroz njega čak i kada laptop ne može uopće razriješiti ime. SOCKS se može ponašati isto, ali samo ako klijent proslijedi ime umjesto da se poveže na adresu koju je već razriješio. Taj izbor je u klijentu, ne u serveru.

curl jasno pokazuje podjelu: jedan prekidač predaje ime hosta proxyju, drugi ga prvo razrješava lokalno. Uz lokalno razrješavanje ime dostupno samo iznutra pada prije nego što se dotakne ikakav tunel, a greška okrivljuje proxy za ono što je zapravo bila DNS odluka.

VPN ide trećim putem: uz rute instalira privatni razrješivač i domene za pretragu. To je zgodno i stvara poznatu iluziju: ruta koja postoji uz razrješivač koji ne odgovara izgleda baš kao mrtav tunel, iako paketi stižu na drugu stranu.

Kada mreža dopušta samo jedan izlaz

Mnoge korporativne mreže dopuštaju odlazne veze samo kroz autentificirani web proxy. OpenVPN i SSH mogu se oboje osposobiti za rad tamo: prvi tuneliranjem vlastitog transporta kroz proxy, drugi kroz proxy naredbu koja pokreće mali CONNECT pomoćnik.

Tuneli zasnovani na TCP-u preživljavaju to ograničenje, a VPN zasnovan na UDP-u ne, što objašnjava mnoge konfiguracije koje rade kod kuće i padaju u uredu. Drugu cijenu lako je previdjeti: TCP tunel nošen unutar TCP veze kroz proxy sada ima dva sloja koja ponovno šalju, a pod gubicima taj par zapne na način koji nijedan sloj sam ne proizvodi.

Lančano povezivanje posrednika je drugo pitanje od biranja sloja. Dodavanje drugog proxyja ili Tora mijenja ko šta promatra, a položaj u lancu odlučuje koji skok vidi šifrirani tekst.

Redoslijed je važniji od broja skokova. Vanjski skok gleda šifrirani tok, dok unutrašnji vidi otvoreni tekst koji on nosi, pa je lanac privatan onoliko koliko je privatna njegova najnepažljivija karika. Miješanje protokola kroz skokove to ne poboljšava automatski. Uglavnom čini načine kvara težim za razmišljanje.

Krivotvorena adresa nije jedna od opcija

Stvaranje paketa s tuđom izvornom adresom ne postiže ništa korisno: odgovori putuju pravom vlasniku, a većina mreža jednostavno odbaci takav saobraćaj. Posrednik je potreban upravo zato što se izvor ne može izmisliti, i to je iskreno opravdanje za sva tri rješenja.

To ujedno ograničava šta bilo koje od njih smije tvrditi. To što izgleda da saobraćaj dolazi s određene adrese pitanje je o tome gdje je ta adresa zakonito dodijeljena i ko njome smije usmjeravati, a ne o tome koji alat može krivotvoriti zaglavlje. Ako rješenje pretpostavlja suprotno, pretpostavka pada kod prvog provajdera koji ga filtrira. Zapišite pretpostavku da kvar bude prepoznatljiv kada dođe.

Odlučite po protokolima i imenima

Posegnite za proxyjem kada jednom web klijentu treba jedna web usluga i ima postavke proxyja. Posegnite za SSH tunelom kada je šačica poznatih TCP usluga dovoljna i SSH pristup već postoji. Posegnite za VPN-om kada nekoliko aplikacija, ne-TCP saobraćaj, privatni DNS ili put za višekratnu upotrebu čine dio zahtjeva.

Zatim provjerite pravim klijentom i pravim imenom. Učitavanje stranice kroz proxy ne uči vas ništa o UDP-u, a osposobljavanje jednog alata kroz SOCKS ne uči vas ništa o sistemskom razrješivaču. Pročitajte koju je lokalnu adresu proces vezao i koji je razrješivač odgovorio. To je razlika između puta koji radi i onoga koji je jednom slučajno radio.

Povezani članci