Šta je SSH tunel i kako ga koristiti

Uvod u SSH tunelovanje
SSH tunel je tehnika koja koristi SSH protokol za kreiranje šifrovane veze između dva računara, najčešće između vašeg računara i VPS servera kroz koju se može prosleđivati mrežni saobraćaj. SSH tunelovanje poznato i kao SSH port forwarding omogućava pristup servisima koji su inače nedostupni sa interneta ili zaštitu podataka koji putuju preko nesigurne mreže. Ova tehnika je fundamentalni alat za sistem administratore, programere i sve koji rade sa udaljenim serverima.
Osnovni princip SSH tunela je jednostavan. Umesto da se direktno povežete na servis koji može biti izložen bezbednosnim rizicima, kreirate šifrovani SSH kanal kroz koji prosleđujete saobraćaj. Svi podaci koji prolaze kroz tunel su šifrovani AES enkripcijom što znači da čak i ako neko presretne mrežni saobraćaj ne može pročitati sadržaj komunikacije. SSH tuneli su posebno korisni kada radite sa bazama podataka, administrativnim panelima ili internim servisima koji ne treba da budu javno dostupni.
Kako SSH protokol funkcioniše
Autentifikacija
SSH koristi asimetrično šifrovanje za autentifikaciju klijenta i servera. Kada se prvi put povezujete na server, SSH klijent proverava fingerprint serverskog ključa i pita vaš da li mu verujete. Nakon potvrde klijent čuva ključ u known_hosts fajlu i pri svakom sledećem povezivanju automatski verifikuje identitet servera. Ovo sprečava man-in-the-middle napade gde bi napadač mogao da se predstavlja kao vaš server.
Za autentifikaciju korisnika SSH podržava lozinke i SSH ključeve. SSH ključevi su preporučen metod jer su bezbedniji i praktičniji. Par ključeva se sastoji od privatnog ključa koji čuvate na svom računaru i javnog ključa koji postavljate na server. Privatni ključ nikada ne napušta vaš računar i može biti dodatno zaštićen passphrase-om. Kada se povezujete server koristi vaš javni ključ da verifikuje da posedujete odgovarajući privatni ključ bez ikakve razmene tajnih podataka.
Šifrovani kanal
Nakon uspešne autentifikacije SSH uspostavlja šifrovani kanal koristeći simetrično šifrovanje obično AES-256. Svi podaci koji prolaze kroz ovaj kanal uključujući komande, fajlove i prosleđeni saobraćaj su zaštićeni od prisluškivanja. SSH takođe koristi HMAC za verifikaciju integriteta podataka što znači da bilo kakva modifikacija podataka u tranzitu biva detektovana. Kompresija podataka je opciona ali može poboljšati performanse na sporijim vezama.
Lokalni SSH tunel (Local Port Forwarding)
Koncept
Lokalni SSH tunel prosleđuje saobraćaj sa porta na vašem lokalnom računaru kroz SSH vezu do porta na udaljenom serveru ili mreži. Ovo je najčešće korišćeni tip tunela i služi za pristup servisima koji su dostupni samo na udaljenom serveru ili u njegovoj lokalnoj mreži. Komanda za kreiranje lokalnog tunela je ssh -L lokalni_port:cilj:ciljni_port korisnik@server.
Na primer ako imate MySQL bazu na serveru koja sluša samo na localhost-u portu 3306 možete kreirati tunel sa ssh -L 3307:localhost:3306 korisnik@server. Nakon toga se na svom računaru možete povezati na localhost:3307 i saobraćaj će biti prosljeđen do MySQL-a na serveru. Koristite drugačiji lokalni port ako već imate MySQL pokrenut lokalno. Tunel ostaje aktivan dok je SSH sesija otvorena.
Praktični primeri
Pristup administrativnom panelu koji sluša samo na localhost-u servera je čest scenario. Ako imate web aplikaciju na portu 8080 koja je dostupna samo lokalno na serveru komanda ssh -L 8080:localhost:8080 korisnik@server omogućava da otvorite http://localhost:8080 u pregledaču na svom računaru. Ovo je bezbednije od otvaranja porta na firewall-u jer pristup ima samo osoba sa SSH pristupom serveru.
Pristup servisu u privatnoj mreži iza servera je još jedan važan scenario. Ako server ima pristup internoj mreži gde se nalazi baza podataka na adresi 10.0.0.5:5432 možete kreirati tunel sa ssh -L 5432:10.0.0.5:5432 korisnik@server. Sada se sa svog računara možete povezati na localhost:5432 i pristupiti PostgreSQL bazi u privatnoj mreži. Ovo je bezbedna alternativa VPN-u za pristup pojedinačnim servisima.
Udaljeni SSH tunel (Remote Port Forwarding)
Koncept
Udaljeni tunel radi obrnuto od lokalnog. Prosleđuje saobraćaj sa porta na udaljenom serveru do porta na vašem lokalnom računaru ili mreži. Komanda je ssh -R udaljeni_port:cilj:ciljni_port korisnik@server. Ovo je korisno kada želite da učinite servis sa svog lokalnog računara dostupnim na serveru ili spolja. Na primer ako razvijate web aplikaciju lokalno na portu 3000 i želite da je pokažete klijentu bez deploy-a.
Komanda ssh -R 8080:localhost:3000 korisnik@server čini vašu lokalnu aplikaciju dostupnom na server:8080. Da bi ovo radilo za spoljni pristup, GatewayPorts opcija mora biti omogućena u sshd_config na serveru. Udaljeni tuneli su korisni za razvoj, testiranje i situacije gde vaš računar nema javnu IP adresu ali trebate dati pristup servisu na njemu.
Bezbednosna razmatranja
Udaljeni tuneli zahtevaju pažnju jer otvaraju port na serveru koji može biti dostupan spolja. Podrazumevano SSH vezuje udaljeni port samo na localhost servera što znači da je dostupan samo sa samog servera. Ako omogućite GatewayPorts port postaje dostupan sa bilo koje adrese i trebalo bi da koristite firewall pravila za ograničavanje pristupa. Nikada ne ostavljajte udaljeni tunel aktivan duže nego što je potrebno i koristite specifične IP adrese umesto wildcard bindinga.
Dinamički SSH tunel (SOCKS proxy)
Koncept
Dinamički tunel kreira SOCKS proxy server na vašem lokalnom računaru koji prosleđuje sav saobraćaj kroz SSH vezu. Za razliku od lokalnog tunela koji prosleđuje saobraćaj za jedan specifični port, dinamički tunel može prosleđivati saobraćaj za bilo koju destinaciju. Komanda je ssh -D lokalni_port korisnik@server. Na primer ssh -D 1080 korisnik@server kreira SOCKS proxy na portu 1080.
Nakon kreiranja dinamičkog tunela konfigurisete pregledač ili operativni sistem da koristi SOCKS proxy na localhost:1080. Sav internet saobraćaj tada prolazi kroz šifrovani SSH tunel do servera i izlazi na internet sa IP adrese servera. Ovo je korisno za zaštitu saobraćaja na javnim WiFi mrežama, pristup geo-ograničenom sadržaju ili anonimizaciju pregledanja. Firefox ima ugrađenu podršku za SOCKS proxy u mrežnim podešavanjima.
Kada koristiti dinamički tunel
Javne WiFi mreže u kafićima, hotelima i na aerodromima su poznate po bezbednosnim rizicima. Dinamički SSH tunel šifruje sav vaš internet saobraćaj sprečavajući prisluškivanje na nesigurnoj mreži. Za razliku od komercijalnih VPN servisa gde morate verovati provajderu, SSH tunel koristi vaš sopstveni server čime imate potpunu kontrolu nad infrastrukturom. Ovo je posebno važno za rad sa osetljivim poslovnim podacima van kancelarije.
Napredne opcije i konfiguracija
Pozadinski tuneli
Opcija -f šalje SSH u pozadinu nakon autentifikacije, a -N kaže SSH-u da ne izvršava udaljene komande. Kombinacija ssh -fN -L 3306:localhost:3306 korisnik@server kreira tunel u pozadini bez otvaranja interaktivne sesije. Za automatsko pokretanje tunela nakon restarta sistema koristite autossh alat koji automatski ponovo uspostavlja tunel ako se veza prekine. Instalira se sa apt install autossh ili yum install autossh.
SSH config fajl u ~/.ssh/config omogućava definisanje tunela koji se automatski kreiraju pri povezivanju na server. Na primer LocalForward 3306 localhost:3306 linija u Host sekciji za vaš server automatski uspostavlja tunel svaki put kad se povežete. Ovo eliminiše potrebu za pamćenjem duge komande i smanjuje mogućnost greške. Više tunela se može definisati za isti host.
Multipleksiranje veza
SSH ControlMaster opcija omogućava deljenje jedne SSH veze za više sesija i tunela. Prva veza se uspostavlja normalno a sve naredne koriste istu konekciju što ubrzava povezivanje i smanjuje opterećenje servera. Konfiguracija u SSH config fajlu uključuje ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p i ControlPersist 600 za zadržavanje veze 10 minuta nakon zatvaranja poslednje sesije.
Bezbednosne preporuke za SSH tunele
Ograničavanje pristupa
Na produkcijskim serverima ograničite koji korisnici mogu kreirati tunele korišćenjem AllowTcpForwarding opcije u sshd_config. Možete dozvoliti samo lokalno prosleđivanje sa AllowTcpForwarding local ili potpuno onemogućiti tunele sa AllowTcpForwarding no za korisnike kojima to nije potrebno. PermitOpen opcija ograničava na koje destinacije tunel može prosleđivati saobraćaj na primer PermitOpen localhost:3306 dozvoljava samo MySQL tunel.
Koristite fail2ban za zaštitu SSH servisa od brute force napada i ograničite SSH pristup samo sa poznatih IP adresa korišćenjem firewall-a. Promenite podrazumevani SSH port sa 22 na nestandarni port što smanjuje automatske skenove. Na BeoHosting serverima SSH pristup je podrazumevano zaštićen sa modernim bezbednosnim podešavanjima i naš tim može pomoći sa konfiguracijom tunela za specifične potrebe vaše infrastrukture.
Zaključak
SSH tuneli su moćan alat za bezbednu komunikaciju koji omogućava pristup udaljenim servisima, zaštitu saobraćaja na nesigurnim mrežama i kreiranje bezbednih konekcija između sistema. Lokalni tuneli za pristup udaljenim servisima, udaljeni tuneli za izlaganje lokalnih servisa i dinamički tuneli za proxy su tri osnovna tipa koji pokrivaju većinu scenarija. Razumevanje SSH tunelovanja je esencijalna veština za svakog ko radi sa serverima. Saznajte više o virtuelnim serverima i mrežnom infrastrukturom.
BeoHosting Tim
10+ godina iskustva — Stručnjaci za web hosting i infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Poslednje ažurirano: