Jūs darote prielaidą, kad SOCKS tarpinis serveris turi veikti ten, kur tinklo prieiga jau yra. OpenSSH gali pastatyti klausiklį visai kitur. Nuotolinis dinaminis persiuntimas atidaro SOCKS prievadą nuotoliniame hoste ir kiekvieną ryšį pradeda iš jūsų vietinio SSH kliento, kuris neša patvirtintą nešiojamojo kompiuterio VPN kelią. Pi gauna apribotą tarpinį serverį; jis nepaveldi jūsų tunelio ar jūsų privilegijų.

Klausiklis ir pusė, iš kurios kyla ryšys, gali skirtis

Įprastas ssh -D 1080 paleidžia klausiklį jūsų pačių mašinoje ir siunčia ryšius iš ten. Nuotolinis dinaminis persiuntimas tai apverčia: klausiklis atsiranda nuotoliniame hoste, o kiekvienas jo priimtas ryšys atidaromas iš vietinės pusės. OpenSSH kliento vadovas dokumentuoja -R be fiksuotos paskirties tiksliai kaip šią SOCKS4/5 schemą.

Palaikoma komanda iš nešiojamojo kompiuterio atrodo taip, kai paskyra, hostai ir prievadas laikomi vietos žymekliais:

ssh -NT -S none -o ExitOnForwardFailure=yes \
  -o PermitRemoteOpen=app.corp.example:443 \
  -R 1080 [email protected]

Trys detalės ten atlieka naudingą darbą. -S none laiko sesiją atokiau nuo bendro valdymo masterio, ExitOnForwardFailure greitai nepavyksta, o ne palieka jus su pusiau atvira sesija, ir PermitRemoteOpen riboja, ką gali pasiekti nuotolinis klausiklis. Naudokite įgaliotą Pi paskyrą ir patikrinkite hosto raktą prieš ką nors iš to pridėdami.

Ką nuotolinis klausiklis iš tikrųjų atskleidžia

Patikrinkite serverio persiuntimo politiką prieš pasikliaudami klausikliu. Su GatewayPorts no nuotolinis persiuntimas lieka susietas su loopback, ir tai yra ta ekspozicija, kurios norite. Serveris, sukonfigūruotas priverstinai taikyti universalųjį persiuntimą, skelbia tą patį prievadą kiekviename sąsajos taške, o tai asmeninį tarpinį serverį paverčia kažkuo, ką vietinis tinklas gali pasiekti.

Loopback taip pat nėra riba tarp naudotojų. Kitas Pi procesas gali prisijungti prie 127.0.0.1:1080, jei žino prievadą, todėl Pi vietinės paskyros ir viskas, kas jame veikia, yra jūsų prieigos dizaino dalis. Tai priežastis laikyti tikslų sąrašą siaurą, o ne priežastis praleisti politikos patikrą.

Laikykite leidžiamą paskirties vietą konkrečią tai programai, kurią bandote pasiekti. Pakeitus ją neribotu persiuntimu, kad veiktų nesusijusi programa, kelias išplečiamas kur kas toliau už problemą, su kuria pradėjote. Tikslų sąrašas taip pat užrašo, kam buvo sesija, o tai padeda tam, kas vėliau ją audituos. Užsirašykite jį šalia paskyros, kurią naudojote.

Perduokite vieną programą per tarpinį serverį

Pi esantis tarpinį serverį suprantantis klientas tada gali atlikti užklausą. Priešdėlis socks5h perduoda paskirties pavadinimą tarpiniam serveriui, todėl paieška ir ryšys vyksta abu nešiojamojo kompiuterio pusėje, ir tai atitinka įvardytą paskirties vietą PermitRemoteOpen:

curl --proxy socks5h://127.0.0.1:1080 \
  --noproxy '' https://app.corp.example/

Išlaikykite įprastą sertifikato tikrinimą ir pačios programos autentifikavimą. Tarpinis serveris pakeičia, kur užmezgamas TCP ryšys; jis nepadaro neautentifikuotos paslaugos saugios ir nepaverčia savarankiškai pasirašyto galinio taško patikimu.

Nešiojamajam kompiuteriui vis dar reikia savo maršruto ir prieigos prie sprendiklio tiek prie SSH serverio, tiek prie programos. Jo SSH kliento srautas turi būti parenkamas patvirtintos VPN politikos, o split-tunnel išimtis gali nukreipti tą srautą kitu keliu nei tas, kurį išbandėte.

Įrodykite kelią ir jį uždarykite

Patvirtinkite, kad klausiklis yra ten, kur jo tikimasi, ir kad atsako tik numatyta paskirties vieta:

$ ss -ltnp | grep 1080
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
$ curl -sS -o /dev/null -w '%{http_code}\n' \
    --proxy socks5h://127.0.0.1:1080 https://app.corp.example/

ExitOnForwardFailure gali įrodyti, kad persiuntimas buvo nustatytas, ir vis tiek negali paliudyti, kad prisijungimas prie programos pasiseks toliau. Testuokite programą, o ne tik prievadą. Klausiklis, kuris priima ir tada nepavyksta kiekviena užklausa, paprastai reiškia, kad paskirties pavadinimas arba nešiojamojo kompiuterio maršrutas yra neteisingi, o ne kad tunelis nepavyko.

Ši schema perduoda tik TCP. UDP, ICMP ir programos, ignoruojančios tarpinio serverio nustatymus, lieka už jos ribų, o persiuntimas baigiasi tą akimirką, kai baigiasi SSH sesija. Sustabdykite tą sesiją, kai baigsite, ir pašalinkite tarpinio serverio nustatymą, kurį pridėjote programai.

Nuolatinei prieigai naudokite vietoj to tinklo savininko palaikomą registraciją arba valdomus vartus. Atvirkštinis tarpinis serveris yra netinkamas įrankis apeiti VPN įrenginio ar išteklių apribojimus; naudojamas jų viduje, jis tėra vienas įgaliotas programos kelias su aiškiomis ribomis.

Susiję straipsniai