Vaša naprava stoji za NAT operaterja, lahko odpira odhodne povezave in poganja SSH strežnik, do katerega ne more nihče. Zahteva, ki prispe, je običajno oblikovana kot "dajte mu VPN", kar je eden od več odgovorov. Preden jo sprejmete, se odločite, ali potrebujete ena upravljalna vrata TCP ali usmerjeno pot do celega podomrežja, ker so to različni projekti z različno izpostavljenostjo.

Povratni tunel dobro odgovori na ozko različico. Naprava pokliče vaše središče, ga prosi, naj posluša na vratih loopback, in ta vrata preusmeri nazaj v svojo lastno storitev SSH. Nato administratorji dosežejo poslušalca prek središča, ne prek javnega interneta.

Trije pogoji, ki odločijo izbiro

Zapišite jih pred vsako konfiguracijo. So meja med omejenim upravljalnim vstopom in razširitvijo omrežja, njihovo mešanje pa je pot, po kateri tunel s petimi vrsticami postane lastniško prazno ravno omrežje.

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

Tretja vrstica je tista, o kateri se ljudje prepirajo. Tunel do vrat SSH naprave ne postavi njenih sosedov v vaše omrežje in ne bi smel biti prikazan, kot da to počne prek verige nadaljnjih preusmeritev. Če je zahteva res LAN, povejte to in raje načrtujte tega.

Stran središča: omejen račun releja

Vsaki napravi dajte njen lastni račun releja s preverjanjem javnega ključa in brez interaktivne seje. Match blok, omejen na ta račun, drži dovoljenje majhno, zasebni ključ pa ostane na napravi, kamor spada.

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 je zanimiva vrstica. Zavrne seje lupine in podsistemov, hkrati pa dovoli preusmeritev, ki jo naprava potrebuje, zato ukradenega ključa ni mogoče spremeniti v interaktivno prijavo. PermitListen pritrdi naslov in vrata poslušalca na strani središča in GatewayPorts no ga drži na loopbacku, namesto da bi ga odprl omrežju, v katerem stoji središče.

Preizkusite dejansko konfiguracijo pred ponovnim nalaganjem in med tem držite odprto drugo sejo. Match blok, ki se pomotoma uporabi za vse, ali tipkarska napaka v imenu možnosti, je klasičen način, da se zaklenete iz stroja, ki ga utrjujete. Izpišite delujočo konfiguracijo in znova preberite možnosti, namesto da bi zaupali datoteki, ki ste jo pravkar napisali. Upoštevajte, da se podpora možnosti razlikuje med gradnjami, zato lahko vrstico, sprejeto v novejšem strežniku, starejši preprosto prezre.

Stran naprave: preusmeritev, ki glasno odpove

Naprava odpre povezavo in zahteva poslušalca. Dva naslova v argumentu -R pomenita različne stvari, branje od leve proti desni pa je najhitrejši način, da si zapomnite, kateri je kateri.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

Levi par je kraj, kjer mora središče poslušati. Desni par je tisto, s čimer se naprava poveže, ko prispe zahteva, razrešeno z njene lastne strani. Če ju zamenjate, dobite tunel, ki se čisto dvigne in preusmeri na napačen kraj, kar je slabše od neuspeha.

ExitOnForwardFailure=yes prisili ukaz, da se konča, ko zahtevanega poslušalca ni mogoče vzpostaviti, zato vam zanka ponovnega zagona pove resnico, namesto da bi pustila napol delujočo sejo. Ne pove nič o tem, ali je lokalna storitev SSH pozneje zdrava, zato jo povežite z upraviteljem procesov in občasnim resničnim preizkusom povezave.

Nikoli ne zamenjajte naslova poslušanja loopback z nadomestnim znakom, da bi se izognili dodatnemu skoku. Ta ena sprememba je razlika med upravljalno potjo in javno dosegljivimi vrati in običajno se zgodi med odpravljanjem napak, nato pa ostane. Če sodelavec ne doseže vrat prek središča, popravite konfiguracijo skoka, namesto da bi razširili vezavo. Loopback je celoten varnostni argument te zasnove.

Dostop administratorja prek središča

Administrator z običajnim računom na središču lahko skoči prek njega na preusmerjena vrata. Račun releja se za to ne uporablja, in prav to je smisel, da ju držite ločeno.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

Preverite ključ gostitelja naprave pod izbranim vzdevkom, ker ta ključ prepozna napravo na koncu verige, tunel pa je le prenos. Prijava od konca do konca še vedno overi oba konca; tunel, ki se konča na skupnem središču, tega sam po sebi ne naredi zaupanja vredne poti.

Prevzemite življenjski cikel

Zaženite ukaz naprave pod upraviteljem procesov s točno eno dejavno instanco in politiko ponovnega zagona, ki ste jo izbrali zavestno. Možnosti keepalive zaznajo mrtvega partnerja; ne oživijo procesa, ki je končal.

Nato napišite postopek razgradnje. Vsaka naprava dobi svojega poslušalca in svoj ključ, zato razgradnja pomeni preklic tega računa in odstranitev tega ključa, ne vrtenje skrivnosti, ki jo deli cela flota.

Na koncu se spomnite, kaj vam daje loopback. Omejuje omrežno izpostavljenost in ne naredi ničesar glede drugih lokalnih uporabnikov na skupnem središču, zato mora biti politika dostopa samega središča še vedno pravilna. Referenca sshd_config dokumentira vsako od zgoraj uporabljenih možnosti, in vredno je prebrati razdelke o preusmerjanju v celoti, preden katero od njih razširite.

Sorodni članki