Un client SSH se conectează la un server Secure Shell, care vă permite să executați comenzi terminale ca și cum ați fi în fața unui alt computer. Dar un client SSH vă permite, de asemenea, să "tunelați" un port între sistemul dvs. local și un server SSH la distanță.
Există trei tipuri diferite de tuneluri SSH și toate sunt utilizate în scopuri diferite. Fiecare implică utilizarea unui server SSH pentru redirecționarea traficului de la un port de rețea la altul. Traficul este trimis peste conexiunea SSH criptată, deci nu poate fi monitorizată sau modificată în timpul transportului.
Puteți face acest lucru cu ssh
comandă inclusă pe Linux, MacOS și alte sisteme de operare similare UNIX. Pe Windows, care nu include o comandă ssh încorporată, vă recomandăm instrumentul gratuit PuTTY să vă conectați la serverele SSH. Acesta susține și tunelul SSH.
"Redirecționarea portului local" vă permite să accesați resurse de rețea locale care nu sunt expuse la Internet. De exemplu, să presupunem că doriți să accesați un server de baze de date la biroul dvs. din casa dvs. Din motive de securitate, acel server de baze de date este configurat numai pentru a accepta conexiuni din rețeaua de birouri locale. Dar dacă aveți acces la un server SSH la birou și serverul SSH permite conexiuni din afara rețelei de birou, atunci vă puteți conecta la serverul SSH de acasă și puteți accesa serverul bazei de date ca și cum ați fi în birou. Acest lucru este adesea cazul, deoarece este mai ușor să asigurăm un singur server SSH împotriva atacurilor decât să asigurăm o varietate de resurse de rețea diferite.
Pentru a face acest lucru, stabiliți o conexiune SSH cu serverul SSH și spuneți-i clientului să transfere traficul de la un anumit port de la PC-ul local - de exemplu, portul 1234 - la adresa serverului bazei de date și a portului său din rețeaua de birouri. Deci, când încercați să accesați serverul bazei de date la portul 1234 PC-ul curent, "localhost", traficul este "tunelat" automat prin conexiunea SSH și trimis la serverul de bază de date. Serverul SSH se află în mijloc, redind traficul înainte și înapoi. Puteți utiliza orice linie de comandă sau instrument grafic pentru a accesa serverul bazei de date ca și cum ar fi rulat pe PC-ul local.
Pentru a utiliza redirecționarea locală, conectați-vă în mod normal la serverul SSH, dar furnizați și -L
argument. Sintaxa este:
ssh -L local_port: remote_address: remote_port [email protected]
De exemplu, să presupunem că serverul de baze de date de la biroul dvs. este situat la adresa 192.168.1.111 din rețeaua de birouri. Aveți acces la serverul SSH al biroului la ssh.youroffice.com
, iar contul dvs. de utilizator pe serverul SSH este bob
. În acest caz, comanda dvs. ar arăta astfel:
ssh-L 8888: 192.168.1.111: 1234 [email protected]
După ce executați comanda respectivă, veți putea accesa serverul bazei de date la portul 8888 la localhost. Deci, dacă serverul de baze de date a oferit acces la web, ați putea conecta http: // localhost: 8888 în browserul dvs. web pentru al accesa. Dacă aveați un instrument de linie de comandă care are nevoie de adresa de rețea a unei baze de date, ar trebui să indicați la localhost: 8888. Tot traficul trimis la portul 8888 de pe PC va fi tunelat la 192.168.1.111:1234 în rețeaua de birouri.
Este ceva mai confuz dacă doriți să vă conectați la o aplicație de server care rulează pe același sistem ca și serverul SSH. De exemplu, să presupunem că aveți un server SSH care rulează la portul 22 pe computerul dvs. de birou, dar de asemenea aveți un server de bază de date care rulează la portul 1234 pe același sistem la aceeași adresă. Doriți să accesați serverul bazei de date de la domiciliu, dar sistemul acceptă numai conexiuni SSH pe portul 22, iar paravanul de protecție nu permite alte conexiuni externe.
În acest caz, puteți rula o comandă ca cea de mai jos:
ssh -L 8888: localhost: 1234 [email protected]
Când încercați să accesați serverul bazei de date la portul 8888 pe PC-ul dvs. curent, traficul va fi trimis prin conexiunea SSH. Când ajunge pe sistemul care execută serverul SSH, serverul SSH îl va trimite la portul 1234 pe "localhost", care este același PC care rulează serverul SSH în sine. Deci, "localhost" din comanda de mai sus înseamnă "localhost" din perspectiva serverului de la distanță.
Pentru a face acest lucru în aplicația PuTTY din Windows, selectați Connection> SSH> Tunnels. Selectați opțiunea "Local". Pentru "Portul sursă", introduceți portul local. Pentru "Destinație", introduceți adresa de destinație și portul în formularul remote_address: remote_port.
De exemplu, dacă doriți să configurați același tunel SSH ca mai sus, intrați 8888
ca port sursă și localhost: 1234
ca destinație. Faceți clic pe "Adăugați" după aceea și apoi pe "Deschidere" pentru a deschide conexiunea SSH. De asemenea, va trebui să introduceți adresa și portul serverului SSH în sine pe ecranul principal "Session" înainte de conectare, desigur.
"Redirecționarea portului de la distanță" este opusul redirecționării locale și nu este folosit la fel de frecvent. Acesta vă permite să creați o resursă pe PC-ul local disponibil pe serverul SSH. De exemplu, să presupunem că rulați un server web pe PC-ul local pe care stați în fața lui. Dar PC-ul dvs. se află în spatele unui paravan de protecție care nu permite traficul de intrare către software-ul server.
Presupunând că aveți acces la un server SSH la distanță, vă puteți conecta la acel server SSH și puteți utiliza redirecționarea porturilor la distanță. Clientul dvs. SSH va spune serverului să transmită un anumit port-say, portul 1234-pe serverul SSH la o anumită adresă și port pe PC-ul curent sau pe rețeaua locală.Când cineva accesează portul 1234 de pe serverul SSH, traficul va fi "tunelat" automat prin conexiunea SSH. Oricine are acces la serverul SSH va putea accesa serverul web care rulează pe PC. Acesta este în mod eficient o modalitate de tunel prin firewall-uri.
Pentru a utiliza redirecționarea la distanță, utilizați ssh
comanda cu -R
argument. Sintaxa este în mare măsură aceeași cu cea a trimiterii locale:
ssh -R remote_port: local_address: local_port [email protected]
Să presupunem că doriți să faceți o aplicație de tip server care asculta la portul 1234 de pe PC-ul local disponibil la portul 8888 de pe serverul SSH de la distanță. Adresa serverului SSH este ssh.youroffice.com
și numele de utilizator pe serverul SSH este bob. Ați executa următoarea comandă:
ssh -R 8888: localhost: 1234 [email protected]
Cineva ar putea apoi să se conecteze la serverul SSH la portul 8888 și această conexiune va fi tunelată la aplicația server care rulează la portul 1234 de pe PC-ul local pe care ați stabilit conexiunea.
Pentru a face acest lucru în PuTTY în Windows, selectați Connection> SSH> Tunnels. Selectați opțiunea "Remote". Pentru "Portul sursă", introduceți portul la distanță. Pentru "Destinație", introduceți adresa de destinație și portul în formularul local_address: local_port.
De exemplu, dacă doriți să configurați exemplul de mai sus, intrați 8888
ca port sursă și localhost: 1234
ca destinație. Faceți clic pe "Adăugați" după aceea și apoi pe "Deschidere" pentru a deschide conexiunea SSH. De asemenea, va trebui să introduceți adresa și portul serverului SSH în sine pe ecranul principal "Session" înainte de conectare, desigur.
Oamenii ar putea apoi să se conecteze la portul 8888 pe serverul SSH și traficul lor ar fi tunelat la portul 1234 din sistemul dvs. local.
În mod implicit, serverul SSH la distanță va asculta numai conexiunile din aceeași gazdă. Cu alte cuvinte, numai persoanele din același sistem ca și serverul SSH se vor putea conecta. Aceasta este din motive de securitate. Va trebui să activați opțiunea "GatewayPorts" din sshd_config de pe serverul SSH la distanță dacă doriți să înlocuiți acest comportament.
Există, de asemenea, "redirecționare dinamică a porturilor", care funcționează similar unui proxy sau VPN. Clientul SSH va crea un proxy SOCKS pe care îl puteți configura aplicațiile pentru utilizare. Tot traficul trimis prin proxy va fi trimis prin serverul SSH. Acest lucru este similar cu redirecționarea locală - este nevoie ca traficul local să fie trimis la un anumit port de pe PC și să îl trimită pe o conexiune SSH la o locație îndepărtată.
De exemplu, să presupunem că utilizați o rețea publică Wi-Fi. Doriți să navigați în siguranță fără a fi speriat. Dacă aveți acces la un server SSH la domiciliu, puteți să vă conectați la el și să utilizați redirecționarea porturilor dinamice. Clientul SSH va crea un proxy SOCKS pe PC. Tot traficul trimis către acel proxy va fi trimis prin conexiunea serverului SSH. Nimeni care monitorizează rețeaua publică Wi-Fi nu va putea monitoriza navigarea sau cenzura site-urile pe care le puteți accesa. Din perspectiva oricăror site-uri web pe care le vizitați, va fi ca și cum ați fi așezat în fața calculatorului dvs. acasă. Acest lucru înseamnă, de asemenea, că puteți utiliza acest truc pentru a accesa site-urile Web numai în SUA în afara SUA, presupunând că aveți acces la un server SSH din SUA, desigur.
Ca un alt exemplu, este posibil să doriți să accesați o aplicație de server media pe care o aveți în rețeaua de domiciliu. Din motive de securitate, este posibil să aveți un server SSH expus la Internet. Nu permiteți conexiunile de intrare de pe Internet la aplicația server media. Aveți posibilitatea să configurați redirecționarea dinamică a porturilor, să configurați un browser web pentru a utiliza proxy-ul SOCKS și apoi să accesați serverele care rulează în rețeaua dvs. de domiciliu prin intermediul browserului web, ca și cum ați fi în fața sistemului SSH acasă. De exemplu, dacă serverul media este localizat la portul 192.168.1.123 din rețeaua dvs. de domiciliu, puteți conecta adresa 192.168.1.123
în orice aplicație care utilizează proxy-ul SOCKS și ați accesa serverul media ca și cum ați fi în rețeaua de domiciliu.
Pentru a utiliza redirecționarea dinamică, executați comanda ssh cu -D
argument, cum ar fi:
ssh -D local_port [email protected]
De exemplu, să presupunem că aveți acces la un server SSH la ssh.yourhome.com
și numele de utilizator pe serverul SSH este bob
. Doriți să utilizați redirecționarea dinamică pentru a deschide un proxy SOCKS la portul 8888 de pe PC-ul curent. Ați executa următoarea comandă:
ssh-D 8888 [email protected]
Apoi, puteți configura un browser web sau o altă aplicație pentru a utiliza adresa IP locală (127.0.01) și portul 8888. Tot traficul din acea aplicație va fi redirecționat prin tunel.
Pentru a face acest lucru în PuTTY în Windows, selectați Connection> SSH> Tunnels. Selectați opțiunea "Dinamic". Pentru "Portul sursă", introduceți portul local.
De exemplu, dacă doriți să creați un proxy SOCKS pe portul 8888, intrați 8888
ca port sursă. Faceți clic pe "Adăugați" după aceea și apoi pe "Deschidere" pentru a deschide conexiunea SSH. De asemenea, va trebui să introduceți adresa și portul serverului SSH în sine pe ecranul principal "Session" înainte de conectare, desigur.
Apoi, puteți configura o aplicație pentru a accesa proxy-ul SOCKS pe PC-ul dvs. local (adică adresa IP 127.0.0.1, care indică spre PC-ul dvs. local) și specificați portul corect.
De exemplu, puteți configura Firefox să folosească proxy-ul SOCKS. Acest lucru este deosebit de util deoarece Firefox poate avea propriile setări de proxy și nu trebuie să utilizeze setările de proxy la nivel de sistem.Firefox va trimite traficul prin tunelul SSH, în timp ce alte aplicații vor utiliza în mod normal conexiunea la Internet.
Când faceți acest lucru în Firefox, selectați "Configurare manuală proxy", introduceți "127.0.0.1" în caseta gazdă SOCKS și introduceți portul dinamic în caseta "Port". Lăsați goale casetele Proxy HTTP, Proxy SSL și Proxy FTP.
Tunelul va rămâne activ și va fi deschis pentru atâta timp cât aveți conexiunea sesiunii SSH deschisă. Când închideți sesiunea SSH și deconectați de la un server, tunelul va fi, de asemenea, închis. Trebuie doar să reconectați comanda corespunzătoare (sau opțiunile corespunzătoare din PuTTY) pentru a redeschide tunelul.