Watter app-verkeer dra ’n SSH-aanstuur eintlik?
’n Skulp, ’n plaaslike aanstuur, SOCKS en tonneltoestel-modus bied verskillende koppelvlakke. Noem die een wat jou app kan gebruik voordat jy dit met ’n gerouteerde VPN vergelyk.
Die terminaal koppel, die opdragprompt verskyn, en almal stem saam dat die SSH-toegang werk. Dan kan ’n databasis-kliënt op die skootrekenaar steeds nie die privaat gasheer bereik nie, en die sessie kry die skuld. Wat gebou is, was ’n skulp, en dit is een van vier heel verskillende koppelvlakke wat SSH kan bied. Noem eers die koppelvlak en toets dan dat die toepassing dit werklik gebruik. Die volgorde maak saak, want elke koppelvlak misluk op sy eie manier.
Noem die koppelvlak voordat jy enigiets vergelyk
Die OpenSSH-kliënthandleiding onderskei vier meganismes wat maklik verwar word. ’n Skulp of afgeleë opdrag voer op die SSH-gasheer uit. ’n Plaaslike aanstuur open ’n luisterende sok op die kliënt en maak die verdere verbinding van die afgeleë kant af. ’n Afgeleë aanstuur doen die omgekeerde en luister aan die bedienerkant. Dinamiese aanstuur bied ’n SOCKS-eindpunt vir programme wat weet hoe om een te gebruik.
- Skulp: die program loop op die afgeleë masjien, niks luister plaaslik nie.
- Plaaslike aanstuur: jou skootrekenaar het ’n poort, die afgeleë gasheer maak die uitgaande verbinding.
- Afgeleë aanstuur: die afgeleë kant het ’n poort, verkeer kom terug na jou toe.
- Dinamies: ’n SOCKS-volmag op die kliënt, net deur volmagbewuste toepassings gebruik.
Nie een van hierdie installeer ’n roete nie. ’n Program wat volmaginstellings ignoreer, of UDP praat, of name self opsoek, word nie deur ’n aktiewe SSH-sessie geraak nie. Dit is nie ’n fout in SSH nie; dit is die omvang van die koppelvlak wat jy gekies het.
Plaaslike, afgeleë en dinamiese aansture verskil in wie luister
Die onderskeid wat die meeste gevalle beslis, is wie die luisterende sok besit. Met ’n plaaslike aanstuur luister die kliënt en die verre kant skakel die bestemming, daarom word die bestemmingsadres uit die bediener se oogpunt opgelos. Met ’n afgeleë aanstuur luister die bediener en die verbinding word terug na jou kant gedra, en dit is hoe jy ’n plaaslike diens blootstel sonder om dit direk te publiseer.
ssh -N -L 5432:db.internal.example:5432 [email protected] ssh -N -D 1080 [email protected] ss -ltnp | grep -E '5432|1080'
Die eerste opdrag bind poort 5432 op die skootrekenaar en stuur dit aan na die databasis soos dit van die bastion gesien word. Die tweede skep ’n SOCKS-volmag op poort 1080. Die derde opdrag bevestig watter prosesse werklik luister, en dit is die enigste bewys dat die aanstuur bestaan eerder as dat dit stilweg op ’n poortkonflik gefaal het.
Dinamiese aanstuur verdien sy eie waarskuwing: dit dek net toepassings wat SOCKS eerbiedig. ’n Blaaier kan daarop gerig word, ’n opdraglyngereedskap kan gesê word om dit te gebruik, en ’n databasisdrywer met sy eie verbindingsstapel kan dit gewoonlik nie. Om te aanvaar dat elke program op die masjien nou die tonnel gebruik, is die algemeenste fout in hierdie hele gebied.
Tonneltoestel-modus is die enigste werklike netwerk-uitsondering
OpenSSH ondersteun ook -w tonneltoestel-aanstuur, wat ’n punt-tot-punt-koppelvlak deurgee eerder as ’n TCP-luisteraar. Dit is ’n egte netwerktonnel, en dit word doelbewus opgestel, nie ’n newe-effek van die oopmaak van ’n skulp nie.
sudo ssh -w 0:0 [email protected] ip addr show tun0
Dit benodig die ooreenstemmende koppelvlaknommers wat aan beide kante beskikbaar is, die regte opstelling op die bediener, en genoeg voorreg op die kliënt om die toestel te skep. Dit benodig ook ’n adresserings- en roetebeplan, want ’n kaal koppelvlak dra geen beleid oor watter bestemmings dit moet gebruik nie.
Selfs dan eindig die tonnel by die verre gasheer. Watter beskerming die SSH-vervoer ook gebied het, eindig daar, en die verdere verbinding is ’n aparte sprong. ’n VPN-gateway het dieselfde vorm van grens, en daarom behoort die vergelyking oor omvang en beëindiging te gaan eerder as oor watter gereedskap sterker is. Om daardie grens hardop te noem, besleg ook die argument oor of ’n tonnel “alles versleutel”, want dit doen duidelik nie.
Toets dat jou toepassing die koppelvlak gebruik wat jy gebou het
Verifikasie is per toepassing, nie per sessie nie. ’n Werkende aanstuur bewys dat die poort gebind is en die verre kant kan skakel; dit bewys nie dat die program waaroor jy gaan, daardeur gekoppel het nie.
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'Die eerste opdrag stuur ’n versoek deur die SOCKS-eindpunt met die gasheernaam afgeleë opgelos, en die tweede oefen die aangestuurde databasispoort met TLS steeds vereis. Hardloop dieselfde toetse met die aanstuur gestop om te bevestig dat hulle faal, want ’n toets wat beide kante slaag, het nooit die tonnel gebruik nie.
Vergelyk dan met ’n gerouteerde VPN net op die dimensies wat saak maak: watter bestemmings gedek word, watter protokolle werk, waar beskerming eindig, en wie die toegang moet goedkeur. ’n Enkeldiens-aanstuur kan die nouer en beter antwoord wees, terwyl ’n VPN die regte vorm is wanneer baie toepassings dieselfde netwerkpad nodig het. Nie een gee alles wat van sy verre eindpunt bereikbaar is nie.