Kuinka käänteinen SSH-tunnelointi toimii?

Kuten ymmärrän, palomuurit (oletusasetukset olettaen) estävät kaiken saapuvan liikenteen, jolla ei ole aiemmin vastaavaa lähtevää liikennettä.

Perustuu SSH-yhteyden peruuttaminen ja SSH-tunnelointi on helppoa , käänteistä SSH-tunnelointia voidaan käyttää ärsyttävien palomuurirajoitusten ympärillä.

Haluan suorittaa komentotulkikomennot etäkoneella. Etäkoneella on oma palomuuri ja se on ylimääräisen palomuurin (reitittimen) takana. Sillä on IP-osoite, kuten 192.168.1.126 (tai jotain vastaavaa). En ole palomuurin takana ja tiedän etäkoneen IP-osoitteen Internetistä (ei 192.168.1.126-osoitetta). Lisäksi voin pyytää jotakuta suorittamaan ssh (something) ensin etäkoneen pääkäyttäjänä.

Voisiko kukaan selittää minulle askel askeleelta, kuinka käänteinen SSH-tunnelointi toimii palomuurien (paikallisten ja etäkoneiden palomuurien ja niiden välisen lisäpalomuurin) kiertämiseksi?

Mikä on kytkinten rooli (-R, -f, -L, -N)?

Kommentit

Vastaa

Rakastan selittää tällaista asiaa visualisoimalla. 🙂

Ajattele SSH-yhteyksiäsi putkina. Suuret putket. Normaalisti saavutat näiden putkien kautta suorittaaksesi kuoren etätietokoneella. Kuori toimii virtuaalisessa päätelaitteessa (tty). Mutta tiedät tämän osan jo.

Ajattele tunneliasi putkena putkessa. Sinulla on vielä iso SSH-yhteys, mutta -L tai -R -vaihtoehdon avulla voit asettaa pienemmän putken sen sisälle.

Jokaisella putkella on alku ja loppu. Iso putki, SSH-yhteytesi, aloitit SSH-asiakkaasi kanssa ja päätyy SSH-palvelimeen, johon olet muodostanut yhteyden. Kaikilla pienemmillä putkilla on samat päätepisteet, paitsi että ”alku” – tai ”loppu” -rooli määräytyy sen mukaan, käytitkö -L tai -R (vastaavasti) niiden luomiseksi.

(Et ole sanonut, mutta aion olettaa että mainitsemasi ”etäkone”, palomuurin takana, voi käyttää Internetiä käyttämällä verkko-osoitekäännöstä (NAT). Tämä on tavallaan tärkeää, joten korjaa tämä oletus, jos se on väärä.)

Kun luot tunnelin, määrität mainoksen mekko ja satama, johon se vastaa, sekä osoite ja satama, johon se toimitetaan. Vaihtoehto -L käskee tunnelin vastaamaan tunnelin paikallisella puolella (isäntä, joka hoitaa asiakasta). -R -vaihtoehto käskee tunnelia vastaamaan etäpuolella (SSH-palvelin).

ssh-tunnelin ohjeet

Joten … Jotta voisit SSH: n Internetistä palomuurin takana olevaan koneeseen, tarvitset kyseisen koneen avaamaan SSH-yhteyden ulkomaailmaan ja sisällyttämään -R tunneli, jonka” sisääntulopiste ”on hänen yhteydensa” kauko-osa ”.

Edellä olevista kahdesta mallista haluat oikean.

Palomuurin isännältä:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com 

Tämä käskee asiakasta perustamaan tunnelin -R emote-merkinnällä kohta. Mikä tahansa, joka liittyy tunnelin kauimmassa olevaan porttiin 22222, tavoittaa ”paikallisen isännän portin 22”, missä ”paikallinen isäntä” on tunnelin poistumispisteen (eli ssh-asiakkaasi) näkökulmasta.

Muut vaihtoehdot ovat:

  • -f kertoo ssh: n taustalle itsensä todentamisen jälkeen, joten sinun ei tarvitse istua juoksemassa jotain etäpalvelin, jotta tunneli pysyy hengissä.
  • -N sanoo, että haluat SSH-yhteyden, mutta et todellakaan halua suorittaa mitään etäkomentoja. Jos kaikki, mitä luot, on tunneli, tämän vaihtoehdon sisällyttäminen säästää resursseja.
  • -T poistaa pseudo-tty-varauksen käytöstä, mikä on tarkoituksenmukaista, koska et ole yritetään luoda interaktiivinen kuori.

Salasanahaaste tulee olemaan, ellet ole määrittänyt DSA- tai RSA-avaimia salasanattomalle kirjautumiselle.

Huomaa, että se on VAHVA suositteli, että käytät heittotiliä (älä omaa kirjautumistunnustasi), jonka olet määrittänyt juuri tälle tunnelille / asiakkaalle / palvelimelle.

Nyt komentoriviltäsi yourpublichost , muodosta yhteys palomuuri-isäntään tunnelin kautta:

ssh -p 22222 username@localhost 

Sinä ”ll Hanki isännän avainhaaste, koska et ole koskaan ennen lyönyt tätä isäntää. Sitten saat salasanahaasteen username -tilille (ellet ole määrittänyt avaimia salasanattomalle kirjautumiselle).

Jos aiot käyttää tätä isäntää säännöllisesti, voit myös yksinkertaistaa käyttöä lisäämällä muutama rivi ~/.ssh/config -tiedostoon:

host remotehostname User remoteusername Hostname localhost Port 22222 

Säädä remotehostname ja remoteusername sopivaksi. remoteusername -kentän on vastattava käyttäjänimiä etäpalvelimessa, mutta remotehostname voi olla mikä tahansa sinulle sopiva isäntänimi, sen ei tarvitse vastata mitään ratkaistavaa.

Katso myös:

Kommentit

  • entäs ssh -D. Selitä samalla menetelmällä.
  • SOCKS-välityspalvelimet eivät ole samat kuin tunnelit. Jos sinulla on kysyttävää niiden käytöstä, kysy se .
  • I ’ Minulla on erittäin vaikeaa noudattaa tätä selitystä johtuen termien löyhästä käytöstä: palvelin, asiakas, paikallinen kone, etäkone, isäntä, oma julkaisijasi, paikallinen isäntä, etätunnuksen nimi. Kaikilla näillä löyhillä ja määrittelemättömillä termeillä voidaan olettaa, että joku tarvitsee jopa 8 tietokonetta tämän asettamiseksi. Sanon tämän, koska se näyttää kaikilta muilta osin erittäin hyvältä selitykseltä. Pienennä ja määritä termejä.
  • @ Rucent88, en ’ ole varma, mikä supistaminen olisi mahdollista. Asiakas muodostaa yhteyden palvelimeen. Se ’ on yhteinen terminologia kaikkialla verkossa. Paikalliset ja etäkoneet näyttävät melko itsestään selviltä. Jos olet ’ hämmentynyt SSH: sta tai yleisestä unix-terminologiasta lukiessasi dokumentaatiota, olen ’ varma, että ’ Ei ole vaikeuksia löytää täältä ihmisiä, jotka ovat halukkaita vastaamaan kaikkiin kysymyksiisi.
  • @ghoti Se ’ on todellakin hämmentävää, koska paikallinen ja etäkoneet ovat suhteellisia. Kun istun työpaikalla, kotitietokoneeni on kaukosäädin, kun istun kotona, työpaikatietokone on etäinen. Palvelin ja asiakas ovat myös hämmentäviä puhuessaan tunneloinnista. Esimerkiksi, jos muodostan yhteyden kotiin töistä ssh -R: llä. Liityn työhöni kotitietokoneesta yhdistämällä localhost. Joten pistorasioiden näkökulmasta palvelin on itse kotitietokone. Mutta loogisesti yhdistin työtietokoneeni. Se ’ on hämmentävää.

Vastaa

Olen piirtänyt joitain luonnoksia

Kone, johon ssh-tunnelikomento kirjoitetaan, kutsutaan »isäntäsi« .

ssh-tunneli alkaen paikallisesta


ssh-tunneli kaukosäätimestä alkaen

Johdanto

  1. paikallinen: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost tarkoittaa: muodosta yhteys ssh: ään connectToHost ja välitä kaikki yhteysyritykset paikalliseen sourcePort porttiin onPort koneella, jonka nimi on forwardToHost, johon pääsee connectToHost -laitteesta.

  2. kaukosäädin: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost tarkoittaa: muodosta yhteys ssh: ään connectToHost, ja välitä kaikki yhteysyritykset -kaukosäätimeen sourcePort porttiin onPort koneella nimeltä forwardToHost, johon pääsee paikalliselta koneeltasi.

Lisävaihtoehdot

  • -f kertoo ssh: n itselleen taustaksi todentamisen jälkeen, joten sinun ei tarvitse istua juoksemalla jotain etäpalvelimessa, jotta tunneli pysy hengissä.
  • -N sanoo, että haluat SSH-yhteyden, mutta et todellakaan halua suorittaa mitään etäkomentoja. Jos kaikki, mitä luot, on tunneli, tämän vaihtoehdon sisällyttäminen säästää resursseja.
  • -T poistaa pseudo-tty-varauksen käytöstä, mikä on tarkoituksenmukaista, koska et ole yritetään luoda interaktiivinen kuori.

Esimerkkisi

Kolmas kuva edustaa tätä tunnelia. Mutta sininen tietokone nimeltä isäntäsi edustaa tietokonetta, jossa joku aloittaa ssh-tunnelin, tässä tapauksessa palomuuri.

Pyydä siis jotakuta aloittamaan ssh-tunneliyhteys koneeseesi. Komennon tulisi periaatteessa näyttää tältä:

ssh -R 12345:localhost:22 YOURIP 

Nyt tunneli on avattu.Voit nyt muodostaa yhteyden ssh: n kautta palomuuriin koneeseen tunnelin kautta komennolla

ssh -p 12345 localhost 

joka muodostaa yhteyden omaan localhost (koneesi) portissa 12345, mutta portti 12345 välitetään tunnelin kautta palomuurin paikallisen isännän porttiin 22. tietokone (eli itse palomuuri tietokone).

Kommentit

  • @erik, Kuinka piirtit nämä kuvat?
  • I käytin avoimen lähdekoodin vektoripiirustustyökalua nimeltä Inkscape ja hiiriäni (no, itse asiassa se on ohjauspallo: Marble FX Logitechiltä).
  • @ghoti: Palvelimen kuunteluliitin (-R-kuvassani keltainen etäisäntä) on oletusarvoisesti sidottu vain loopback- käyttöliittymään . Tämä voidaan ohittaa määrittämällä bind_address. Tyhjä sidososoite tai osoite ’*’ osoittaa, että etäpistorasian tulisi kuunnella kaikkia liitäntöjä. – Kokeile vain: Käynnistä sininen tietokone ssh -R 1234:localhost:8000 yellowcomputer. Ja myös sinisellä koneella käynnistä python -m SimpleHTTPServer (yksinkertainen verkkopalvelin portissa 8000). Avaa sitten keltaisen koneen verkkoselaimessa URL-osoite http://localhost:1234 ja näet sen toimivan.
  • @erik, ah, sekava osa johtuu siitä, että silmäni ovat huono – En nähnyt ’ t nähdä tilaa remotehost ennen komentojasi. Tarkastellessani tarkemmin huomaan, että kaaviot eivät ’ t osoittavat lainkaan valinnaista bind_address-osoitetta. Anteeksi sekaannuksesta.
  • @briankip Kyllä, tietysti. Ainakin, jos haluat muodostaa ssh-yhteyden palomuurin takana olevaan tietokoneeseen (tunnelin läpi tai suoraan, jos palomuuri sen sallii). Eli: palomuuri-tietokoneelle kirjoittamasi ssh-komento avaa vain tunnelin, mutta ei käynnisty tai toimi ssh-daemon / -server -palvelimena. Seuraava kysymyksesi tulisi olla, miten SSD käynnistetään ilman pääkäyttöoikeuksia (jos se on sinun ongelmasi). 🙂

Vastaa

ssh-tunnelointi toimii käyttämällä jo luotua ssh-yhteyttä ylimääräisen liikenteen lähettämiseen.

Kun muodostat yhteyden etäpalvelimeen, sinulla on yleensä vain yksi kanava normaalia käyttäjän vuorovaikutusta varten (tai 3 kanavaa, jos pidät STDIN / STDOUT / STDERR erillisinä). Milloin tahansa paikallinen tai etäinen ssh-prosessi voi avata lisäkanavia olemassa olevassa yhteydessä. Nämä kanavat lähettävät / vastaanottavat sitten tunneliliikennettä. Kun lähetät tai vastaanotat liikennettä, ssh-prosessi yksinkertaisesti sanoo ”tämä liikenne on kanavan foobarille”.

Se toimii olennaisesti näin:

  1. Käsket ssh: tä aloittamaan kuuntelun portissa XXXX ja että kaikki vastaanotettu liikenne olisi tunneloitava ja asetettava sitten arvoon YYYY portissa ZZZZ.
  2. Paikallinen ssh alkaa kuunnella portissa XXXX (yleensä 127.0.0.1, mutta sitä voidaan muuttaa).
  3. Jotkut sovellukset avaavat yhteyden paikallisen koneen porttiin XXXX.
  4. Paikallinen ssh avaa kanavan etä-ssh: lle ja sanoo ”kaikki liikenne” tällä kanavalla menee YYYY: ZZZZ
  5. Kaukosäädin muodostaa yhteyden YYYY: ZZZZ -palveluun ja lähettää takaisin ”OK, kanava on auki”
  6. Nyt kaikki liikenne, joka lähetetään portin yhteyden kautta XXXX paikallisessa koneessa on ssh: n välityksellä YYYY: ZZZZ.

Tämä prosessi on täsmälleen sama sekä eteen- että taaksepäin kulkeville tunneleille (vaihda vain sanat ”paikallinen” ja ”kauko” Kumpikin puoli voi aloittaa tunnelin Ei tarvitse edes olla, kun aloitat ssh: n. Voit avata tunneleita, kun ssh on jo käynnissä (katso ESCAPE CHARACTERS, erityisesti ~C).

-R, -f, -L ja -N, sinun pitäisi vain tutustua man-sivuun, se antaa sinulle parhaan mahdollisen selityksen. Mutta mainitsen -R ja -L.
-R kertoo etä-SSH: lle kuunnella yhteyksiä ja että paikallisen ssh: n tulisi muodostaa yhteys todelliseen määränpäähän. -L käskee paikallista ssh: tä kuuntelemaan yhteyksiä ja että etäshsh: n tulisi muodostaa yhteys todelliseen kohteeseen.

Huomaa, tämä on erittäin karkea kuvaus, mutta sen pitäisi antaa sinulle tarpeeksi tietoa tietääksesi mitä tapahtuu

Vastaa

Tämä selitetään SSH-käsikirjassa, etenkin erojen -L (paikallinen) ja -R (kaukosäädin).


-L

-L [bind_address:]port:host:hostport

Määrittää, että -portti paikallisessa (asiakas) isännässä on välitettävä annetulle isännälle ja etäsivun portti .

Tämä toimii jakamalla liitäntä paikallisen puolen portin kuunteluun, joka on valinnaisesti sidottu määritettyyn bind_osoitteeseen.

Aina kun muodostetaan yhteys tähän porttiin, yhteys välitetään suojatun kanavan kautta ja muodostetaan yhteys kohteeseen host portti hostport etäkoneelta .

Seuraava esimerkki tunneli IRC-istunnon asiakaskoneelta 127.0.0.1 (localhost) porttia 1234 käyttäen etäpalvelimelle server.example.com:

$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 

Huomaa: Vaihtoehto -f taustat ssh ja kauko-komento sleep 10 on määritetty antamaan aika tunneloitavan palvelun käynnistämiseen.

Esimerkki:

ssh `-N` -L 22000:localhost:11000 remote.server.com 
  • -N Kun olet muodostanut yhteyden, ripusta siellä (et saa komentokehotetta)

    Älä suorita etäkomentoa.

  • -L 22000 Yhteys syntyy henkilökohtaisen porttisi 22000, L okaalikone

  • localhost:11000remote.server.com varmistaa, että tunnelin toinen pää on localhost, portti 11000

ssh -N -L 22000: 192.168.1.2: 11000 remote.server.com

Lähde: Kuvitettu opas, opetusohjelma, ohjeet ssh-tunnelointiin .


-R

-R [bind_address:]port:host:hostport

Määrittää, että etäpalvelimen (palvelimen) isännän -portti on välitettävä g: lle. iven-isäntä ja portti paikallisella puolella .

Tämä toimii jakamalla liitäntä port päälle etäpuolella, ja aina kun yhteys muodostetaan tähän porttiin, yhteys välitetään edelleen suojatun kanavan kautta ja yhteys tehdään host -porttiin hostport paikallisesta koneesta .

Esimerkki:

ssh -N -R 22000:localhost:11000 remote.server.com 
  • -N Kun olet muodostanut yhteyden, ripusta vain siellä (et saa komentokehotetta)

    Älä suorita etäkomentoa.

  • -R 22000 Yhteys syntyy R emote-tietokoneen portissa 22000 (tässä tapauksessa remote.server.com)

  • henkilökohtainen tietokoneesi varmistaa, että tunnelin toinen pää on localhost, portti 11000

ssh -N -R 22000: paikallinen isäntä: 11000 remote.server.com

Lähde: Kuvitettu opas, opetusohjelma, ohjeet ssh-tunnelointiin .

kommentit

  • korva ja suu tekevät kristallinkirkkaiksi kuka ’ puhuu ja kuka ’ kuuntelee!
  • Rakastan kuviasi!

Vastaa

Verkkoliitäntöihin sitoutuminen käänteisten SSH-tunnelien muodostamisen yhteydessä selitetään tässä viestissä . Tässä on esimerkki neljästä tietokoneesta, jotka asuvat kahdessa eri verkossa:

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *