INFINIUS

SSH kao proxy [SSH specijal]

Networking Switch
[Creative Commons Licensephoto credit: felixtriller.]

Zamislite sljedeću situaciju: trebate pokazati klijentu koji ne može doći do vas kako će mu izgledati web stranica koju razvijate, no imate je pokrenutu na svojem računalu a ne na serveru na internetu. Mogli bi eventualno dati pristup postavljanjem prosljeđivanja porta na internet ruteru, no vaš mrežni administrator (opravdano) to ne prihvaća kao mogućnost. Naizgled nemoguća misija koja je putem SSH protokola vrlo lako rješiva…

SSH prosljeđivanje portova

SSH protokol ima mogućnost proslijediti pakete s mrežnih portova prema računalima na strani računala na koje se spajamo, ali isto tako i računala s vaše lokalne mreže prema računalima u mreži gdje ste spojeni. Zvuči kompliciranije nego što jest, stoga bolje opisati preko praktičnih primjera:

Prosljeđivanje portova s udaljenog računala

Da ostanemo pri primjeru s web stranicama – web server je dostupan samo unutar LAN-a udaljenog računala preko lokalne adrese webserver.loc. SSH server računala na koji se spajate je ipak dostupan preko interneta i on unutar svoje lokalne mreže može do webserver.loc, adresa tog računala sa SSH serverom na internetu je sshserver.remote. Kako bi mogli pogledati web stranice koje se nalaze na web serveru (napominjem još jednom, direktno s interneta se ne može doći do tog web servera, čak štoviše, taj web server ne mora ni imati pristup na internet) moguće je napraviti ovo:

ssh -L 8000:webserver.loc:80 sshserver.remote

Nakon što ste se uspješno prijavili, otvorite svoj internet preglednik na adresi http://localhost:8000 i pred vama će se pojaviti stranice koje ste željeli vidjeti u udaljenoj mreži. Što se dogodilo putem gore navedene komande: sav promet prema portu 8000 na računalu na kojem radite se prosljeđuje preko SSH tunela i udaljenog računala na koje ste spojeni prema računalu (webserver.loc) u udaljenoj mreži na port 80 te odgovor putuje istim putem i natrag.

Prosljeđivanje portova na udaljeno računalo

Isti princip koji smo primjenili prosljeđivanjem portova s udaljenog računala možemo primijeniti i u obrnutom smjeru – računalima u udaljenoj mreži računala na koje se spajate SSH protokolom možete omogućiti pristup u svoju lokalnu mrežu:

ssh -R 8000:mojwebserver.loc:80 sshserver.remote

Na ovaj način će s računalima u udaljenoj mreži biti omogućen pristup na port 80 vašeg lokalnog web servera preko adrese http://sshserver.loc:8000 (lokalne adrese u mreži računala na koje se spajate).

SOCKS proxy

Uz mogućnost dvosmjerne proxy funkcije za pojedinačne portove (naravno, možete ih navesti i više, nije ograničeno samo na jedan) SSH je moguće upotrijebiti i kao SOCKS proxy (većina internet preglednika i e-mail klijenata), tj. dinamičko proslijeđivanje portova.

ssh -D 1234 sshserver.remote

Komanda će na vašem lokalnom računalu otvoriti SOCKS (v4/5) proxy koji će omogućiti aplikacijama koje razumiju SOCKS protokol da ih usmjerite na navedeni port 1234. Na primjer, ako svoj internet preglednik uputite na port svojeg SSH SOCKS proxy-a moći ćete pristupati web serveru na udaljenoj mreži i preko njegove lokalne adrese na http://webserver.loc (naravno, subnet lokalnih mreža mora biti različit da bi ovo radilo).

Poor man’s VPN tj. VPN za siromahe

Način na koji je SSH protokol u mogućnosti proslijediti servise na udaljenu mrežu i natrag je toliko jednostavan da ga gornji termin najbolje opisuje. Uz par komandi je moguće vrlo lako i brzo postaviti tunele preko SSH konekcije i omogućiti sigurnu (svi ovi tuneli unutar SSH konekcije su naravno enkriptirani) vezu između dvije odvojene lokalne mreže. Naravno, ovdje se ne radi o “punokrvnom” VPN-u jer nije dostupna puna TCP/IP interkonekcija između mreža, no za neke jednostavnije primjene je ovo i više nego dovoljno, a i rješava problem potrebnih dodatnih vatrozida (ako omogućujete pristup samo na jedan port jedne adrese do ostalih se ionako neće moći te nije potreban vatrozid da ih štiti).

Za kraj, napomena za korisnike koji SSH koriste preko putty-a – sve ovo je dostupno i preko tog programa, samo se odaberu potrebne opcije unutar GUI-a (ssh meni).




Tagovi: , ,

 
  • http://twitter.com/olujicz Zoran Olujić

    Da, ssh je mnogo moćan, koristim ga svakodnevno. Ssh tunel je sjajna opcija, pogotovo kada vam na fakultetu filtriraju portove, zbog čega mi je ova mogućnost dobro poslužila. :)

    Ono što sam hteo da dodam je da na Linuxu postoji jednostavan gui za povezivanje pod nazivom gstm. Jednom podesite a zatim se konektujete na klik.

    I naravno, moja podrška za ovakve tekstove.

  • http://www.infinius.hr/blog/ darkmares

    Zahvaljujem na podršci i na preporuci za gstm, nisam imao prilike s njim raditi ali izgleda zanimljivo za automatizaciju tunela.