SOCKS proxy kasutamine
Sisukord
Sissejuhatus
SOCKS on nö üldotstarbeline vahendamise (ingl. k. proxy) protokoll, mis võimaldab klientarvutist kasutada mitmeid olulisi võrguteenuseid, üldiselt üle TCP, kuid teatud juhtumitel ka UDP protokolli kasutavaid teenuseid, nt nimeteenust. SOCKS protokolli on implementeeritud nii iseseisvate klient-server rakendustena kui muu tarkvara koosseisus. Käesolev tekst keskendub sellistele komponentidele
- SOCKS server on realiseeritud OpenSSH vahenditega (SOCKS v. 4 ja 5)
- SOCKS klient sisaldab otseselt SOCKS tuge (nt Firefox ehk Iceweasel brauser)
- klientprogrammi jaoks asendatakse osa võrku puudutavaid syscall'isid LD_PRELOAD keskkonnamuutujaga laaditud tsocks (transparent socks) teegi abil vastavate SOCKS funktsioonidega, põhimõtteliselt saab seejärel kasutada programme tavalisel moel (nt telnet, ssh, vnc), kuid peab arvestama, et UDP protokolli kasutavad nimelahendused ei toimu üle SOCKS kanali
Teatud mõttes pakub SOCKS sarnast teenust nagu NAT.
Tööpõhimõte
Põhimõtteliselt töötab SOCKS lahenduse kasutamine selliselt
- klientarvutist ei saa otse pöörduda üle avaliku interneti skeemil kujutatud VNC ega HTTPS serverite poole
- tulemüürist saab pöörduda VNC ja HTTPS serverite poole
Klient ___ | | |___| | .. internet .. | | _|_ 192.168.102.35, valis.loomaaed.tartu.ee | | tulemüür, SOCKS proxy |___| VNC server 1 | HTTPS server 2 ___ | ___ | |----------------|----------------| | |___| |___| 10.0.5.25:5901/tcp 10.0.5.90:443/tcp
Kasutaja jaoks on SOCKS proxy kasutamise kogemus sarnane HTTP proxy kasutamisega, kuid SOCKS proxy kasutamisel lisandub asjaolu, et proxy töötab mitmesuguste rakenduse taseme protokollidega, st lisaks HTTPle nt SMTP, VNC jt. SOCKS klient ja SOCKS server suhtlevad omavahel kasutades SOCKS protokolli. Selleks, et klient saaks VNC ja HTTPS teenustele ligi pääseda, peab ta kasutama SOCKS toega tarkvara, näidates klientprogrammides ära SOCKS proxy aadressi ning autentides ennast sellele proxile. Seejärel klientprogrammid pääsevad teenustele ligi, andmevahetus toimub läbi SOCKS proxy.
Käesolevas tekstis käsitletakse juhtumit, kus SOCKS proxy serverina ei kasutata spetsiaalselt SOCKS serveri tarkvara, vaid nö tavalise OpenSSH võimalusi, sellisel lahendusel on mitmeid eeliseid
- ei ole tarvis hallata spetsiaalset SOCKS serveri tarkvara
- andmevahetus on krüptitud ning kasutajate autentimine toimub tuttaval viisil
Praktiliselt sobib SOCKS proxyt kasutada mõlemas suunas toimuva kasutusjuhu jaoks (ehk mitte tingimata sama proxy installatsiooni)
- klient asub kohtvõrgus ja proxy abil tehakse ühendusi kohtvõrgust avalikku võrgu teenuste poole
- klient asub avalikus võrgus ja proxy abil tehakse talle kättesaadavaks nt tulemüüri taga (sisevõrgus) töötavaid teenuseid
OpenSSH SOCKS proxy käivitamine
OpenSSH SOCKS proxy funktsionaalsuse kasutamiseks peab klient logima OpenSSH serverisse kasutades -D võtit, nt selliselt
$ ssh -D 1080 valis.loomaaed.tartu.ee
Tulemusena kuulab ssh kliendi arvutis pordil 1080/tcp, mida saab kasutada SOCKS proxy serverina
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program tcp 0 0 127.0.0.1:1080 0.0.0.0:* LISTEN 6040/ssh
Sellise kasutuse eelduseks on, et OpenSSH serveris on TCP pordi edasisuunamine lubatud, selliselt
AllowTcpForwarding yes
Seda asjakorraldust võiks ettekujutada selliselt, et loogilises mõttes on SOCKS server nö määrdunud üle kahe arvuti, ssh kliendi ja ssh serveri, SOCKS proxy poole pöördutakse ühes arvutis ja SOCKS proxyst väljuvad ühendused teises arvutis.
Iceweaseli kasutamine SOCKS proxyga
SOCKS tuge sisaldavad mitmed erinevaid protokolle kasutavad kliendid, nt veebibrauserid. Nt Iceweasel brauseris toimub SOCKS serveri kirjeldamine valides
Edit -> Properties -> Advanced -> Network -> Settings
ning täites lahtrid nt selliselt
Eeldusel, et eelmises punktis esitatud ssh ühendus on loodud, saab kasutada brauserit, ning teenuste jaoks kuhu pöördutakse, paistavad pöördumised tulemüüri vastava võrgu poolse võrguseadme ip aadressilt.
Iceweasel kasutamisel tuleb tähele panna, et vaikimisi toimub andmevahetus küll üle SOCKS proxy, kuid nimelahenduseks kasutatakse kohaliku arvuti resolverit. Selleks, et nimelahendusega tegeleks samuti SOCKS proxy tuleb Iceweaseli seadistamiseks avada nt about:config (kirjutades nii aadressireale) ja seada parameeter
network.proxy.socks_remote_dns = true
tsocks teegi kasutamine
tsocks (transparent socks) http://tsocks.sourceforge.net/ teegi kasutamise idee seisnab selles, et klientprogrammi jaoks asendatakse osa võrku puudutavaid syscall'isid LD_PRELOAD keskkonnamuutujaga laaditud tsocks (transparent socks) teegi abil vastavate SOCKS funktsioonidega. Põhimõtteliselt saab seejärel kasutada programme tavalisel moel (nt telnet, ssh, vnc), kuid peab arvestama, et UDP protokolli kasutavad nimelahendused ei toimu üle SOCKS kanali, st tsocks töötab vaid TCP protokolliga.
Tarkvara paigaldamiseks operatsioonisüsteemiga Debian Lenny tuleb öelda
# apt-get install tsocks
tsocks teekide kasutamist kontrollib seadistusfail /etc/tsocks.conf, nt sellise sisuga seadistusfail
local = 127.0.0.1/255.255.255.255 path { reaches = 10.0.5.0/24 server = 127.0.0.1 server_port = 1080 server_type = 5 } fallback = yes
mis ütleb, et
- local - 127.0.0.1 aadressi kasutamine toimub ilma SOCKSita, st otse
- path - kirjeldab komplekti, mis määrab, et 10.0.5.0/24 võrgu kasutamine toimub üle 127.0.0.1:1080 pordil töötava versioon 5 SOCKS proxy
- fallback - pöördumised aadressidele, mis pole ülalpool kirjeldatud toimuvad otse
Kasutamiseks eeldame et üle-eelmises punktis esitatud moel on ssh ühendus loodud ning sobib öelda nt
$ tsocks vncviewer 10.0.5.25:5901
kus tsocks on iseenesest keskkonnamuutujatega tegelev skript, veendumiseks sobib sisse vaadata või küsida
$ file /usr/bin/tsocks /usr/bin/tsocks: POSIX shell script text executable
Otsekohesemalt kasutades aga ka nt selliselt
$ export LD_PRELOAD="/usr/lib/libtsocks.so" $ vncviewer 10.0.5.25:5901
Kasutamise lõpetamiseks tuleb öelda
$ unset LD_PRELOAD
Kuna tsocks funktsionaalsuse sisselülitamiseks tegutsetakse käsureal, siis lülitamine toimib ainult vastavas konkreetses shellis.
SOCKS serveri kontrollimiseks sobib öelda
$ inspectsocks 127.0.0.1 1080 Reply indicates server is a version 5 socks server
Märkused
- tsocks lahendus ei tööta staatiliselt kompileeritud programmidega