Apgrieztais SSH vienai ierīcei: loopback klausītājs vai maršrutēts VPN?
Viens pārvaldības ports ierīcei, kas var tikai zvanīt uz āru. Trīs nosacījumi izlemj, vai ar apgriezto tuneli pietiek, vai vajadzīgs īsts maršrutēts ceļš.
Jūsu ierīce atrodas aiz operatora NAT, tā var atvērt izejošus savienojumus un darbojas SSH serveris, kuram neviens nevar piekļūt. Ienākošais pieprasījums parasti tiek formulēts kā "dodiet tam VPN", kas ir viena atbilde no vairākām. Pirms pieņemat to, izlemiet, vai jums vajag vienu administratīvu TCP portu vai maršrutētu ceļu uz visu apakštīklu, jo tie ir dažādi projekti ar atšķirīgu pakļautību.
Apgrieztais tunelis labi atbild uz šauro versiju. Ierīce zvana uz jūsu mezglu, lūdz mezglam klausīties loopback portā un pārsūta šo portu atpakaļ uz savu SSH pakalpojumu. Pēc tam administratori sasniedz klausītāju caur mezglu, nevis caur publisko internetu.
Trīs nosacījumi, kas izlemj izvēli
Pierakstiet tos pirms jebkuras konfigurācijas. Tie ir robeža starp ierobežotu pārvaldības ieeju un tīkla paplašinājumu, un to sajaukšana ir ceļš, kā piecu rindu tunelis pārvēršas par bezsaimnieka plakanu tīklu.
| 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 |
Trešā rinda ir tā, par ko cilvēki strīdas. Tunelis uz ierīces SSH portu neieliek tās kaimiņus jūsu tīklā, un nevajadzētu likt tam izskatīties tā, it kā tas to darītu ar turpmāku pārsūtījumu ķēdi. Ja prasība tiešām ir LAN, sakiet to un projektējiet to tā vietā.
Mezglu puse: ierobežots releja konts
Dodiet katrai ierīcei savu releja kontu ar publiskās atslēgas autentifikāciju un bez interaktīvas sesijas. Match bloks, kas ierobežots ar šo kontu, uztur atļauju mazu, un privātā atslēga paliek ierīcē, kur tai jāatrodas.
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 ir interesantā rinda. Tā atsaka apvalka un apakšsistēmu sesijas, vienlaikus ļaujot pārsūtīšanu, kas ierīcei nepieciešama, tāpēc nozagtu atslēgu nevar pārvērst interaktīvā pieteikšanās reizē. PermitListen nosaka mezgla puses klausītāja adresi un portu, un GatewayPorts no patur to loopback, nevis atver to tīklā, kurā atrodas mezgls.
Pārbaudiet efektīvo konfigurāciju pirms pārlādes un šajā laikā turiet atvērtu otru sesiju. Match bloks, kas nejauši attiecas uz visiem, vai drukas kļūda opcijas nosaukumā, ir klasiskā metode, kā sevi izslēgt no mašīnas, kuru jūs nocietināt. Izgūstiet darbojošos konfigurāciju un nolasiet opcijas vēlreiz, nevis uzticieties tikko uzrakstītajai datnei. Ņemiet vērā, ka opciju atbalsts atšķiras starp būvēm, tāpēc jaunākā serverī pieņemta rinda vecākā var tikt vienkārši ignorēta.
Ierīces puse: pārsūtīšana, kas skaļi neizdodas
Ierīce atver savienojumu un pieprasa klausītāju. Abas adreses argumentā -R nozīmē dažādas lietas, un to lasīšana no kreisās uz labo ir ātrākais veids, kā atcerēties, kura ir kura.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Kreisais pāris ir vieta, kur mezglam jāklausās. Labais pāris ir tas, kam ierīce pieslēdzas, kad pienāk pieprasījums, atrisināts no pašas ierīces puses. To samainīšana rada tuneli, kas tīri paceļas un pārsūta uz nepareizo vietu, kas ir sliktāk par neveiksmi.
ExitOnForwardFailure=yes liek komandai iziet, kad pieprasīto klausītāju nevar izveidot, tāpēc restartēšanas cilpa pasaka jums patiesību, nevis atstāj pusstrādājošu sesiju. Tā neko nesaka par to, vai vietējais SSH pakalpojums vēlāk ir vesels, tāpēc savienojiet to ar procesu pārvaldnieku un laiku pa laikam īstu savienojuma testu.
Nekad neaizstājiet loopback klausīšanās adresi ar aizstājējzīmi, lai izvairītos no papildu lēciena. Šī vienīgā izmaiņa ir atšķirība starp pārvaldības ceļu un publiski sasniedzamu portu, un tā parasti notiek atkļūdošanas laikā un pēc tam paliek. Ja kolēģis nevar sasniegt portu caur mezglu, labojiet lēciena konfigurāciju, nevis paplašiniet piesaisti. Loopback ir viss šī dizaina drošības arguments.
Administratora piekļuve caur mezglu
Administrators ar parastu kontu mezglā var pārlēkt caur to uz pārsūtīto portu. Releja konts tam netiek izmantots, un tieši tā ir jēga tos turēt atsevišķi.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Pārbaudiet ierīces resursdatora atslēgu zem izvēlētā aizstājvārda, jo šī atslēga identificē ierīci ķēdes galā, un tunelis ir tikai transports. Pieteikšanās no gala līdz galam joprojām autentificē abus galus; tunelis, kas beidzas kopīgā mezglā, pats par sevi nepadara to par uzticamu ceļu.
Pārņemiet dzīves ciklu
Palaidiet ierīces komandu procesu pārvaldniekā ar tieši vienu aktīvu eksemplāru un apzināti izvēlētu restartēšanas politiku. Keepalive opcijas atklāj mirušu partneri; tās neceļ atpakaļ procesu, kas izgāja.
Pēc tam uzrakstiet ekspluatācijas pārtraukšanas procedūru. Katra ierīce iegūst savu klausītāju un savu atslēgu, tāpēc pārtraukšana nozīmē atsaukt šo kontu un noņemt šo atslēgu, nevis rotēt visai flotei kopīgu noslēpumu.
Visbeidzot atcerieties, ko loopback jums dod. Tas ierobežo tīkla pakļautību un neko nedara attiecībā uz citiem vietējiem lietotājiem kopīgā mezglā, tāpēc paša mezgla piekļuves politikai joprojām jābūt pareizai. sshd_config atsauce dokumentē katru iepriekš izmantoto opciju, un ir vērts pilnībā izlasīt pārsūtīšanas sadaļas, pirms paplašināt jebkuru no tām.