Kaj je SSH tunel in kako ga uporabljati

Uvod v SSH tuneliranje
SSH tunel je tehnika, ki uporablja SSH protokol za ustvarjanje šifrirane povezave med dvema računalnikoma, najpogosteje med vašim računalnikom in VPS strežnikom, skozi katero se lahko posreduje omrežni promet. SSH tuneliranje, poznano tudi kot SSH port forwarding, omogoča dostop do storitev, ki sicer niso dostopne z interneta, ali zaščito podatkov, ki potujejo prek nevarnega omrežja. Ta tehnika je temeljno orodje za sistemske administratorje, programerje in vse, ki delajo z oddaljenimi strežniki.
Osnovni princip SSH tunela je preprost. Namesto da bi se neposredno povezali na storitev, ki je lahko izpostavljena varnostnim tveganjem, ustvarite šifriran SSH kanal, skozi katerega posredujete promet. Vsi podatki, ki gredo skozi tunel, so šifrirani z AES šifriranjem, kar pomeni, da tudi če nekdo prestreže omrežni promet, ne more prebrati vsebine komunikacije. SSH tuneli so še posebej uporabni, ko delate s podatkovnimi bazami, administrativnimi paneli ali internimi storitvami, ki ne smejo biti javno dostopne.
Kako deluje SSH protokol
Avtentikacija
SSH za avtentikacijo odjemalca in strežnika uporablja asimetrično šifriranje. Ko se prvič povežete na strežnik, SSH odjemalec preveri fingerprint strežniškega ključa in vas vpraša, ali mu zaupate. Po potrditvi odjemalec shrani ključ v datoteko known_hosts in pri vsakem naslednjem povezovanju samodejno preveri identiteto strežnika. To preprečuje napade tipa man-in-the-middle, kjer bi se napadalec lahko predstavljal kot vaš strežnik.
Za avtentikacijo uporabnika SSH podpira gesla in SSH ključe. SSH ključi so priporočena metoda, saj so varnejši in bolj praktični. Par ključev je sestavljen iz zasebnega ključa, ki ga hranite na svojem računalniku, in javnega ključa, ki ga postavite na strežnik. Zasebni ključ nikoli ne zapusti vašega računalnika in je lahko dodatno zaščiten s passphrase. Pri povezovanju strežnik uporabi vaš javni ključ za preverjanje, ali imate ustrezen zasebni ključ, brez kakršne koli izmenjave tajnih podatkov.
Šifriran kanal
Po uspešni avtentikaciji SSH vzpostavi šifriran kanal z uporabo simetričnega šifriranja, običajno AES-256. Vsi podatki, ki gredo skozi ta kanal, vključno z ukazi, datotekami in posredovanim prometom, so zaščiteni pred prisluškovanjem. SSH uporablja tudi HMAC za preverjanje integritete podatkov, kar pomeni, da je vsaka modifikacija podatkov med prenosom zaznana. Kompresija podatkov je izbirna, vendar lahko izboljša zmogljivost pri počasnejših povezavah.
Lokalni SSH tunel (Local Port Forwarding)
Koncept
Lokalni SSH tunel posreduje promet z vrat na vašem lokalnem računalniku prek SSH povezave do vrat na oddaljenem strežniku ali omrežju. To je najpogosteje uporabljena vrsta tunela in služi za dostop do storitev, ki so na voljo samo na oddaljenem strežniku ali v njegovem lokalnem omrežju. Ukaz za ustvarjanje lokalnega tunela je ssh -L lokalna_vrata:cilj:ciljna_vrata uporabnik@streznik.
Na primer, če imate na strežniku MySQL bazo, ki posluša samo na localhostu na vratih 3306, lahko ustvarite tunel z ssh -L 3307:localhost:3306 uporabnik@streznik. Po tem se lahko na svojem računalniku povežete na localhost:3307 in promet bo posredovan do MySQL-a na strežniku. Uporabite drugačna lokalna vrata, če imate MySQL že zagnan lokalno. Tunel ostane aktiven, dokler je SSH seja odprta.
Praktični primeri
Dostop do administrativnega panela, ki posluša samo na localhostu strežnika, je pogost scenarij. Če imate spletno aplikacijo na vratih 8080, ki je dostopna samo lokalno na strežniku, ukaz ssh -L 8080:localhost:8080 uporabnik@streznik omogoča, da odprete http://localhost:8080 v brskalniku na svojem računalniku. To je varneje od odpiranja vrat na požarnem zidu, saj ima dostop samo oseba s SSH dostopom do strežnika.
Dostop do storitve v zasebnem omrežju za strežnikom je še en pomemben scenarij. Če ima strežnik dostop do internega omrežja, kjer se nahaja podatkovna baza na naslovu 10.0.0.5:5432, lahko ustvarite tunel z ssh -L 5432:10.0.0.5:5432 uporabnik@streznik. Sedaj se lahko z vašega računalnika povežete na localhost:5432 in dostopate do PostgreSQL baze v zasebnem omrežju. To je varna alternativa VPN-u za dostop do posameznih storitev.
Oddaljeni SSH tunel (Remote Port Forwarding)
Koncept
Oddaljeni tunel deluje obratno od lokalnega. Posreduje promet z vrat na oddaljenem strežniku do vrat na vašem lokalnem računalniku ali omrežju. Ukaz je ssh -R oddaljena_vrata:cilj:ciljna_vrata uporabnik@streznik. To je uporabno, ko želite storitev s svojega lokalnega računalnika narediti dostopno na strežniku ali navzven. Na primer, če razvijate spletno aplikacijo lokalno na vratih 3000 in jo želite pokazati stranki brez deploya.
Ukaz ssh -R 8080:localhost:3000 uporabnik@streznik naredi vašo lokalno aplikacijo dostopno na streznik:8080. Da bi to delovalo za zunanji dostop, mora biti možnost GatewayPorts omogočena v sshd_config na strežniku. Oddaljeni tuneli so uporabni za razvoj, testiranje in situacije, kjer vaš računalnik nima javnega IP naslova, vendar morate omogočiti dostop do storitve na njem.
Varnostni vidiki
Oddaljeni tuneli zahtevajo pozornost, saj odpirajo vrata na strežniku, ki so lahko dostopna navzven. Privzeto SSH veže oddaljena vrata samo na localhost strežnika, kar pomeni, da so dostopna samo s samega strežnika. Če omogočite GatewayPorts, postanejo vrata dostopna s katerega koli naslova in morali bi uporabljati pravila požarnega zidu za omejevanje dostopa. Nikoli ne pustite oddaljenega tunela aktivnega dlje, kot je potrebno, in uporabljajte specifične IP naslove namesto wildcard bindinga.
Dinamični SSH tunel (SOCKS proxy)
Koncept
Dinamični tunel ustvari SOCKS proxy strežnik na vašem lokalnem računalniku, ki posreduje ves promet prek SSH povezave. Za razliko od lokalnega tunela, ki posreduje promet za ena specifična vrata, lahko dinamični tunel posreduje promet za poljubno destinacijo. Ukaz je ssh -D lokalna_vrata uporabnik@streznik. Na primer ssh -D 1080 uporabnik@streznik ustvari SOCKS proxy na vratih 1080.
Po ustvarjanju dinamičnega tunela konfigurirate brskalnik ali operacijski sistem, da uporablja SOCKS proxy na localhost:1080. Ves internetni promet nato gre skozi šifriran SSH tunel do strežnika in izide na internet z IP naslova strežnika. To je uporabno za zaščito prometa na javnih WiFi omrežjih, dostop do geografsko omejenih vsebin ali anonimizacijo brskanja. Firefox ima vgrajeno podporo za SOCKS proxy v omrežnih nastavitvah.
Kdaj uporabiti dinamični tunel
Javna WiFi omrežja v kavarnah, hotelih in na letališčih so znana po varnostnih tveganjih. Dinamični SSH tunel šifrira ves vaš internetni promet in preprečuje prisluškovanje na nevarnem omrežju. Za razliko od komercialnih VPN storitev, kjer morate zaupati ponudniku, SSH tunel uporablja vaš lastni strežnik, s čimer imate popoln nadzor nad infrastrukturo. To je še posebej pomembno za delo z občutljivimi poslovnimi podatki izven pisarne.
Napredne možnosti in konfiguracija
Tuneli v ozadju
Možnost -f pošlje SSH v ozadje po avtentikaciji, -N pa pove SSH-u, da ne izvaja oddaljenih ukazov. Kombinacija ssh -fN -L 3306:localhost:3306 uporabnik@streznik ustvari tunel v ozadju brez odpiranja interaktivne seje. Za samodejni zagon tunela po ponovnem zagonu sistema uporabite orodje autossh, ki samodejno ponovno vzpostavi tunel, če se povezava prekine. Namesti se z apt install autossh ali yum install autossh.
SSH config datoteka v ~/.ssh/config omogoča definicijo tunelov, ki se samodejno ustvarijo ob povezovanju na strežnik. Na primer vrstica LocalForward 3306 localhost:3306 v sekciji Host za vaš strežnik samodejno vzpostavi tunel vsakič, ko se povežete. To odpravi potrebo po pomnjenju dolgega ukaza in zmanjša možnost napake. Več tunelov se lahko definira za isti gostitelj.
Multipleksiranje povezav
Možnost SSH ControlMaster omogoča deljenje ene SSH povezave za več sej in tunelov. Prva povezava se vzpostavi normalno, vse naslednje pa uporabljajo isto povezavo, kar pospeši povezovanje in zmanjša obremenitev strežnika. Konfiguracija v SSH config datoteki vključuje ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p in ControlPersist 600 za ohranjanje povezave 10 minut po zaprtju zadnje seje.
Varnostna priporočila za SSH tunele
Omejevanje dostopa
Na produkcijskih strežnikih omejite, kateri uporabniki lahko ustvarjajo tunele, z uporabo možnosti AllowTcpForwarding v sshd_config. Lahko dovolite samo lokalno posredovanje z AllowTcpForwarding local ali popolnoma onemogočite tunele z AllowTcpForwarding no za uporabnike, ki tega ne potrebujejo. Možnost PermitOpen omeji, na katere destinacije lahko tunel posreduje promet, na primer PermitOpen localhost:3306 dovoljuje samo MySQL tunel.
Uporabite fail2ban za zaščito SSH storitve pred brute force napadi in omejite SSH dostop samo z znanih IP naslovov z uporabo požarnega zidu. Spremenite privzeta SSH vrata s 22 na nestandardna vrata, kar zmanjša samodejne preglede. Na BeoHosting strežnikih je SSH dostop privzeto zaščiten z modernimi varnostnimi nastavitvami in naša ekipa lahko pomaga s konfiguracijo tunelov za specifične potrebe vaše infrastrukture.
Zaključek
SSH tuneli so močno orodje za varno komunikacijo, ki omogoča dostop do oddaljenih storitev, zaščito prometa na nevarnih omrežjih in ustvarjanje varnih povezav med sistemi. Lokalni tuneli za dostop do oddaljenih storitev, oddaljeni tuneli za izpostavljanje lokalnih storitev in dinamični tuneli za proxy so tri osnovne vrste, ki pokrivajo večino scenarijev. Razumevanje SSH tuneliranja je nujna veščina za vsakogar, ki dela s strežniki. Več o virtualnih strežnikih in omrežni infrastrukturi.
BeoHosting Ekipa
10+ let izkušenj — Strokovnjaki za spletno gostovanje in infrastrukturo
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Zadnja posodobitev: