Terminalas prisijungia, raginimas pasirodo, ir visi sutinka, kad SSH prieiga veikia. Tada duomenų bazės klientas nešiojamajame kompiuteryje vis dar nepasiekia privataus prieglobos serverio, ir kaltinama sesija. Tai, kas buvo sukurta, yra apvalkalas, ir tai yra viena iš keturių gana skirtingų sąsajų, kurias SSH gali pasiūlyti. Pirma įvardykite sąsają, tada patikrinkite, ar programa ja tikrai naudojasi. Tvarka svarbi, nes kiekviena sąsaja nepavyksta savaip.

Įvardykite sąsają prieš ką nors lygindami

OpenSSH kliento vadovas išskiria keturis lengvai supainiojamus mechanizmus. Apvalkalas arba nuotolinė komanda vykdoma SSH prieglobos serveryje. Vietinis persiuntimas atidaro klausantį lizdą kliente ir tolesnį ryšį užmezga iš nuotolinės pusės. Nuotolinis persiuntimas daro priešingai, klausydamas serverio pusėje. Dinaminis persiuntimas atveria SOCKS galinį tašką programoms, kurios moka juo naudotis.

  • Apvalkalas: programa vykdoma nuotoliniame kompiuteryje, vietoje niekas neklauso.
  • Vietinis persiuntimas: jūsų nešiojamajame kompiuteryje yra prievadas, nuotolinis prieglobos serveris užmezga išeinantį ryšį.
  • Nuotolinis persiuntimas: nuotolinėje pusėje yra prievadas, srautas grįžta jums.
  • Dinaminis: SOCKS tarpinė serveris kliente, naudojamas tik proxy suprantančių programų.

Nė vienas iš jų neįdiegia maršruto. Programa, kuri nepaiso tarpinio serverio nustatymų, arba kalba UDP, arba pati sprendžia vardus, nėra veikiama aktyvios SSH sesijos. Tai ne SSH klaida; tai jūsų pasirinktos sąsajos apimtis.

Vietinis, nuotolinis ir dinaminis persiuntimas skiriasi tuo, kas klauso

Skirtumas, lemiantis daugumą atvejų, yra tai, kam priklauso klausantis lizdas. Vietiniame persiuntime klauso klientas, o tolimas galas renka tikslą, todėl tikslo adresas sprendžiamas serverio požiūriu. Nuotoliniame persiuntime klauso serveris, o ryšys pernešamas atgal į jūsų pusę, ir taip atskleidžiate vietinę paslaugą tiesiogiai jos neskelbdami.

ssh -N -L 5432:db.internal.example:5432 [email protected]
ssh -N -D 1080 [email protected]
ss -ltnp | grep -E '5432|1080'

Pirmoji komanda susieja 5432 prievadą nešiojamajame kompiuteryje ir persiunčia jį į duomenų bazę taip, kaip ji matoma iš bastiono. Antroji sukuria SOCKS tarpinį serverį 1080 prievade. Trečioji komanda patvirtina, kurie procesai iš tikrųjų klauso, ir tai vienintelis įrodymas, kad persiuntimas egzistuoja, o ne tyliai nepavyko dėl prievadų konflikto.

Dinaminis persiuntimas vertas atskiro įspėjimo: jis apima tik programas, kurios gerbia SOCKS. Naršyklę galima nukreipti į jį, komandinės eilutės įrankiui galima pasakyti jį naudoti, bet duomenų bazės tvarkyklė su savo ryšio kamšu paprastai to negali. Prielaida, kad dabar kiekviena kompiuterio programa naudoja tunelį, yra dažniausia klaida visoje šioje srityje.

Tunelio įrenginio režimas yra vienintelė tikra tinklo išimtis

OpenSSH taip pat palaiko -w tunelio įrenginio persiuntimą, kuris perduoda taškas į tašką sąsają, o ne TCP klausytoją. Tai tikras tinklo tunelis, ir jis konfigūruojamas sąmoningai, o ne kaip apvalkalo atidarymo šalutinis poveikis.

sudo ssh -w 0:0 [email protected]
ip addr show tun0

Jam reikia atitinkamų sąsajos numerių abiejuose galuose, tinkamos konfigūracijos serveryje ir pakankamų teisių kliente įrenginiui sukurti. Jam taip pat reikia adresų ir maršrutizavimo plano, nes plika sąsaja neturi jokios politikos, kurie tikslai turėtų ją naudoti.

Net tada tunelis baigiasi nuotoliniame prieglobos serveryje. Kokia bebūtų SSH transporto suteikta apsauga, ji baigiasi ten, o tolesnis ryšys yra atskiras šuolis. VPN tarpinė turi tokią pačią ribos formą, todėl palyginimas turėtų būti apie apimtį ir pabaigą, o ne apie tai, kuri priemonė stipresnė. Šios ribos garsiai įvardijimas taip pat išsprendžia ginčą, ar tunelis «šifruoja viską», nes akivaizdžiai nešifruoja.

Patikrinkite, ar jūsų programa naudoja jūsų sukurtą sąsają

Tikrinama kiekvienai programai, o ne sesijai. Veikiantis persiuntimas įrodo, kad prievadas susietas ir tolimas galas gali rinkti; jis neįrodo, kad jums svarbi programa prisijungė per jį.

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'

Pirmoji komanda siunčia užklausą per SOCKS galinį tašką su nuotoliniu būdu išspręstu prieglobos vardu, o antroji išbando persiųstą duomenų bazės prievadą, kai TLS vis dar reikalaujamas. Paleiskite tuos pačius testus su sustabdytu persiuntimu, kad patvirtintumėte, jog jie nepavyksta, nes testas, kuris praeina abiem būdais, niekada nenaudojo tunelio.

Tada palyginkite su maršrutizuotu VPN tik tais matmenimis, kurie svarbūs: kurie tikslai aprėpti, kurie protokolai veikia, kur baigiasi apsauga ir kas turi patvirtinti prieigą. Vienos paslaugos persiuntimas gali būti siauresnis ir geresnis atsakymas, o VPN yra tinkama forma, kai daugeliui programų reikia to paties tinklo kelio. Nė vienas iš jų nesuteikia visko, kas pasiekiama iš jo nuotolinio galinio taško.

Susiję straipsniai