Koji promet aplikacije zapravo nosi SSH prosljeđivanje?
Ljuska, lokalno prosljeđivanje, SOCKS i način tunelskog uređaja izlažu različita sučelja. Imenujte ono koje vaša aplikacija može koristiti prije nego ga usporedite s usmjerenim VPN-om.
Terminal se povezuje, upitnik se pojavljuje i svi se slažu da SSH pristup radi. Zatim klijent baze podataka na prijenosnom računalu još uvijek ne može doći do privatnog hosta, a sesija je okrivljena. Ono što je izgrađeno bila je ljuska, a to je jedno od četiri prilično različita sučelja koja SSH može ponuditi. Prvo imenujte sučelje, zatim provjerite da ga aplikacija doista koristi. Redoslijed je važan jer svako sučelje pada na svoj način.
Imenujte sučelje prije nego što bilo što usporedite
OpenSSH korisnički priručnik razlikuje četiri mehanizma koja se lako zamijene. Ljuska ili udaljena naredba izvršava se na SSH hostu. Lokalno prosljeđivanje otvara socket za slušanje na klijentu i ostvaruje daljnju vezu s udaljene strane. Udaljeno prosljeđivanje čini obrnuto, slušajući na strani poslužitelja. Dinamičko prosljeđivanje izlaže SOCKS krajnju točku za programe koji znaju kako je koristiti.
- Ljuska: program se izvršava na udaljenom stroju, lokalno ništa ne sluša.
- Lokalno prosljeđivanje: vaše prijenosno računalo ima port, udaljeni host ostvaruje odlaznu vezu.
- Udaljeno prosljeđivanje: udaljena strana ima port, promet se vraća prema vama.
- Dinamičko: SOCKS proxy na klijentu, koriste ga samo aplikacije koje razumiju proxy.
Nijedno od ovoga ne instalira rutu. Program koji ignorira postavke proxyja, ili govori UDP, ili sam razrješava imena, nije pogođen aktivnom SSH sesijom. To nije greška u SSH-u; to je opseg sučelja koje ste odabrali.
Lokalno, udaljeno i dinamičko prosljeđivanje razlikuju se po tome ko sluša
Razlika koja odlučuje većinu slučajeva jest tko posjeduje socket za slušanje. Kod lokalnog prosljeđivanja klijent sluša i udaljeni kraj bira odredište, zato se adresa odredišta razrješava iz perspektive poslužitelja. Kod udaljenog prosljeđivanja poslužitelj sluša i veza se prenosi natrag na vašu stranu, i tako izlažete lokalnu uslugu bez izravnog objavljivanja.
ssh -N -L 5432:db.internal.example:5432 [email protected] ssh -N -D 1080 [email protected] ss -ltnp | grep -E '5432|1080'
Prva naredba veže port 5432 na prijenosnom računalu i prosljeđuje ga bazi podataka kako je vidi bastion. Druga stvara SOCKS proxy na portu 1080. Treća naredba potvrđuje koji procesi doista slušaju, i to je jedini dokaz da prosljeđivanje postoji, a nije tiho propalo zbog sukoba portova.
Dinamičko prosljeđivanje zaslužuje vlastito upozorenje: pokriva samo aplikacije koje poštuju SOCKS. Preglednik se može usmjeriti na njega, alat naredbenog retka može se uputiti da ga koristi, a upravljački program baze podataka s vlastitim slojem veza to obično ne može. Pretpostavka da svaki program na stroju sada koristi tunel najčešća je pogreška u cijelom ovom području.
Način tunelskog uređaja jedina je stvarna mrežna iznimka
OpenSSH također podržava prosljeđivanje tunelskog uređaja -w, koje prenosi sučelje od točke do točke umjesto TCP slušatelja. To je pravi mrežni tunel i namjerno se konfigurira, a nije nuspojava otvaranja ljuske.
sudo ssh -w 0:0 [email protected] ip addr show tun0
Potrebni su odgovarajući brojevi sučelja dostupni na oba kraja, ispravna konfiguracija na poslužitelju i dovoljne privilegije na klijentu za stvaranje uređaja. Potreban je i plan adresiranja i usmjeravanja, jer golo sučelje ne nosi politiku o tome koja bi odredišta trebala koristiti.
Čak i tada tunel završava na udaljenom hostu. Kakva god zaštita da ju je pružio SSH promet, ona tamo prestaje, a daljnja veza je zaseban skok. VPN pristupnik ima isti oblik granice, zato bi usporedba trebala biti o opsegu i završetku, a ne o tome koji je alat jači. Glasno imenovanje te granice također rješava raspravu o tome »šifrira li tunel sve«, jer očito ne šifrira.
Provjerite koristi li vaša aplikacija sučelje koje ste izgradili
Provjera je po aplikaciji, ne po sesiji. Radno prosljeđivanje dokazuje da je port vezan i da udaljena strana može birati; ne dokazuje da se program koji vam je važan spojio kroz njega.
curl -sS --socks5-hostname 127.0.0.1:1080 -o /dev/null -w '%{http_code}\n' https://app.internal.example/health
psql "host=127.0.0.1 port=5432 dbname=app sslmode=require" -c 'select 1'Prva naredba šalje zahtjev kroz SOCKS krajnju točku s imenom hosta razriješenim na udaljenoj strani, a druga provjerava proslijeđeni port baze podataka uz TLS koji je još uvijek obavezan. Pokrenite iste testove sa zaustavljenim prosljeđivanjem da potvrdite da padaju, jer test koji prolazi na oba načina nikada nije koristio tunel.
Zatim usporedite s usmjerenim VPN-om samo po dimenzijama koje su važne: koja su odredišta pokrivena, koji protokoli rade, gdje zaštita prestaje i ko mora odobriti pristup. Prosljeđivanje jedne usluge može biti uži i bolji odgovor, dok je VPN ispravan oblik kada mnogim aplikacijama treba isti mrežni put. Nijedno ne daje sve što je dostupno s njegove udaljene krajnje točke.