Käänteinen SSH yhdelle laitteelle: loopback-kuuntelija vai reititetty VPN?
Yksi hallintaportti laitteelle, joka osaa vain soittaa ulos. Kolme ehtoa ratkaisee, riittääkö käänteinen tunneli vai tarvitsetko aidon reititetyn polun.
Laitteesi on operaattorin NAT:n takana, se voi avata lähteviä yhteyksiä ja se pyörittää SSH-palvelinta, johon kukaan ei pääse. Saapuva pyyntö muotoillaan yleensä muotoon "antakaa sille VPN", mikä on yksi vastaus monien joukossa. Ennen kuin hyväksyt sen, päätä tarvitsetko yhden hallinnollisen TCP-portin vai reititetyn polun kokonaiseen aliverkkoon, koska ne ovat eri projekteja erilaisella altistumisella.
Käänteinen tunneli vastaa kapeaan versioon hyvin. Laite soittaa keskitimeesi, pyytää keskitintä kuuntelemaan loopback-portilla ja välittää portin takaisin omaan SSH-palveluunsa. Sen jälkeen ylläpitäjät tavoittavat kuuntelijan keskitimen kautta, eivät julkisen internetin kautta.
Kolme ehtoa, jotka ratkaisevat valinnan
Kirjoita ne muistiin ennen mitään määritystä. Ne ovat raja rajatun hallintasisäänkäynnin ja verkon laajennuksen välillä, ja niiden sekoittaminen on se tapa, jolla viiden rivin tunnelista tulee omistajaton litteä verkko.
| Condition | Reverse tunnel fits | Something else is needed |
|---|---|---|
| How many services must be reachable? | One, or a small fixed set on loopback | Anything that needs many ports or dynamic discovery |
| Who connects, and how are they authenticated? | Named administrators with their own hub accounts | Third parties, or anything needing per-flow audit you do not control |
| Does the device's own LAN need to be reachable? | No | Yes, so a routed VPN or a managed platform is the honest answer |
Kolmas rivi on se, josta ihmiset väittelevät. Tunneli laitteen SSH-porttiin ei tuo sen naapureita verkkoosi, eikä sitä pidä saada näyttämään siltä lisäedelleenvälitysten ketjulla. Jos vaatimus on todella LAN, sano se ja suunnittele se sen sijaan.
Keskitimen puoli: rajattu rele-tili
Anna jokaiselle laitteelle oma rele-tilinsä julkisen avaimen todennuksella ja ilman interaktiivista istuntoa. Match lohko, joka on rajattu tuohon tiliin, pitää oikeuden pienenä, ja yksityinen avain pysyy laitteella, minne se kuuluu.
Match User relay-dev-7
AuthenticationMethods publickey
PubkeyAuthentication yes
AllowTcpForwarding remote
PermitListen 127.0.0.1:21022
GatewayPorts no
MaxSessions 0
PermitTTY no
X11Forwarding no
AllowAgentForwarding no
MaxSessions 0 on kiinnostava rivi. Se kieltää kuori- ja alijärjestelmäistunnot ja sallii silti välityksen, jonka laite tarvitsee, joten varastettua avainta ei voi muuttaa interaktiiviseksi kirjautumiseksi. PermitListen kiinnittää keskitimen puolen kuuntelijan osoitteen ja portin, ja GatewayPorts no pitää sen loopbackilla sen sijaan, että avaisi sen verkolle, jossa keskitin on.
Testaa tehokas määritys ennen uudelleenlatausta ja pidä toinen istunto auki sen aikana. Match lohko, joka vahingossa koskee kaikkia, tai kirjoitusvirhe valitsimen nimessä, on klassinen tapa lukita itsensä ulos laatikosta, jota kovennat. Tulosta käynnissä oleva määritys ja lue valinnat takaisin sen sijaan, että luottaisit juuri kirjoittamaasi tiedostoon. Huomaa, että valintojen tuki vaihtelee buildien välillä, joten uudemmassa palvelimessa hyväksytty rivi voi yksinkertaisesti jäädä vanhemmassa huomiotta.
Laitteen puoli: välitys, joka epäonnistuu äänekkäästi
Laite avaa yhteyden ja pyytää kuuntelijan. Argumentin kaksi osoitetta -R tarkoittavat eri asioita, ja niiden lukeminen vasemmalta oikealle on nopein tapa muistaa, kumpi on kumpi.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Vasen pari on se, missä keskitimen pitäisi kuunnella. Oikea pari on se, mihin laite yhdistää, kun pyyntö saapuu, laitteen omalta puolelta ratkaistuna. Niiden vaihtaminen tuottaa tunnelin, joka nousee puhtaasti ja välittää väärään paikkaan, mikä on pahempaa kuin epäonnistuminen.
ExitOnForwardFailure=yes saa komennon poistumaan, kun pyydettyä kuuntelijaa ei voi muodostaa, joten uudelleenkäynnistyssilmukka kertoo sinulle totuuden sen sijaan, että jättäisi puoliksi toimivan istunnon. Se ei kerro mitään siitä, onko paikallinen SSH-palvelu myöhemmin kunnossa, joten yhdistä se prosessinhallintaan ja satunnaiseen oikeaan yhteystestiin.
Älä koskaan korvaa loopback-kuunteluosoitetta jokerimerkillä välttääksesi ylimääräisen hypyn. Se yksittäinen muutos on ero hallintapolun ja julkisesti tavoitettavan portin välillä, ja se tapahtuu yleensä virheenkorjauksen aikana ja jää sitten. Jos kollega ei pääse porttiin keskitimen kautta, korjaa hyppyn määritys sen sijaan, että laajentaisit sidontaa. Loopback on koko tämän suunnittelun turva-argumentti.
Ylläpitäjän pääsy keskitimen kautta
Ylläpitäjä, jolla on tavallinen tili keskitimessä, voi hypätä sen kautta välitettyyn porttiin. Rele-tiliä ei käytetä tähän, ja juuri siinä on pointti pitää ne erillään.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Varmista laitteen isäntäavain valitsemasi aliaksen alla, koska se avain tunnistaa laitteen ketjun päässä ja tunneli on vain siirtoa. Päästä päähän -kirjautuminen todentaa edelleen molemmat päät; jaettuun keskitimeen päättyvä tunneli ei tee siitä itsestään luotettua polkua.
Ota elinkaari haltuun
Aja laitteen komento prosessinhallinnan alla täsmälleen yhdellä aktiivisella instanssilla ja uudelleenkäynnistyskäytännöllä, jonka valitsit tietoisesti. Keepalive-valinnat havaitsevat kuolleen vastapuolen; ne eivät herätä henkiin prosessia, joka on poistunut.
Kirjoita sitten käytöstäpoistomenettely. Jokainen laite saa oman kuuntelijansa ja oman avaimensa, joten käytöstäpoisto tarkoittaa kyseisen tilin peruuttamista ja kyseisen avaimen poistamista, ei koko laivaston jakaman salaisuuden kierrättämistä.
Muista lopuksi, mitä loopback sinulle antaa. Se rajoittaa verkon altistumista eikä tee mitään muiden paikallisten käyttäjien suhteen jaetussa keskitimessä, joten keskitimen oman käyttöoikeuskäytännön on edelleen oltava oikein. sshd_config-viite dokumentoi jokaisen yllä käytetyn valinnan, ja kannattaa lukea välitysosiot kokonaan ennen kuin laajennat mitään niistä.