Reverzný SSH pre jedno zariadenie: loopback poslucháč alebo routovaná VPN?
Jeden správcovský port pre zariadenie, ktoré vie len vytáčať von. Tri podmienky rozhodujú, či reverzný tunel stačí alebo potrebujete skutočnú routovanú cestu.
Vaše zariadenie sedí za NAT operátora, vie otvárať odchádzajúce spojenia a prevádzkuje SSH server, ku ktorému sa nikto nedostane. Požiadavka, ktorá prichádza, býva formulovaná ako "dajte mu VPN", čo je jedna z viacerých odpovedí. Než ju prijmete, rozhodnite, či potrebujete jeden správcovský TCP port alebo routovanú cestu do celej podsiete, pretože to sú rôzne projekty s rôznou expozíciou.
Reverzný tunel dobre odpovedá na úzku verziu. Zariadenie vytáča vaše centrum, požiada ho, aby počúvalo na loopback porte, a preposiela ten port späť na vlastnú SSH službu. Potom sa správcovia dostanú k poslucháčovi cez centrum, nie cez verejný internet.
Tri podmienky, ktoré rozhodujú voľbu
Zapíšte si ich pred akoukoľvek konfiguráciou. Sú hranicou medzi obmedzeným správcovským vstupom a rozšírením siete, a ich zámena je cesta, ako sa z tunela o piatich riadkoch stane plochá sieť bez vlastníka.
| 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 |
Tretí riadok je ten, o ktorom sa ľudia hádajú. Tunel k SSH portu zariadenia nepripája jeho susedov do vašej siete a nemalo by sa to tak vydávať reťazou ďalších presmerovaní. Ak je požiadavka skutočne LAN, povedzte to a navrhnite radšej ju.
Strana centra: obmedzený relay účet
Dajte každému zariadeniu vlastný relay účet s autentizáciou verejným kľúčom a bez interaktívnej relácie. Match blok obmedzený na tento účet drží oprávnenie malé a súkromný kľúč zostáva na zariadení, kam patrí.
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 zaujímavý riadok. Odmieta relácie shellu a subsystémov, a pritom povoľuje presmerovanie, ktoré zariadenie potrebuje, takže ukradnutý kľúč nemožno premeniť na interaktívne prihlásenie. PermitListen pripína adresu a port poslucháča na strane centra a GatewayPorts no drží ho na loopbacku, miesto aby ho otvoril sieti, v ktorej centrum stojí.
Otestujte efektívnu konfiguráciu pred opätovným načítaním a nechajte počas toho otvorenú druhú reláciu. Match blok, ktorý sa omylom vzťahuje na všetkých, alebo preklep v názve voľby, je klasický spôsob, ako sa zamknúť von zo stroja, ktorý spevňujete. Vypíšte bežiacu konfiguráciu a prečítajte si voľby znova, miesto aby ste verili súboru, ktorý ste práve napísali. Všimnite si, že podpora volieb sa medzi buildmi líši, takže riadok prijatý novším serverom môže starší jednoducho ignorovať.
Strana zariadenia: presmerovanie, ktoré hlasno zlyhá
Zariadenie otvára spojenie a žiada poslucháča. Dve adresy v argumente -R znamenajú rôzne veci a čítanie zľava doprava je najrýchlejší spôsob, ako si zapamätať, ktorá je ktorá.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Ľavá dvojica je miesto, kde má centrum počúvať. Pravá dvojica je to, kam sa zariadenie pripája, keď dorazí požiadavka, riešené z jeho vlastnej strany. Ich prehodenie vytvorí tunel, ktorý sa čisto zdvihne a presmeruje na nesprávne miesto, čo je horšie ako zlyhanie.
ExitOnForwardFailure=yes prinúti príkaz ukončiť sa, keď požadovaný poslucháč nemožno ustanoviť, takže reštartovacia slučka vám povie pravdu, miesto aby nechala napoly funkčnú reláciu. Nič nehovorí o tom, či je lokálna SSH služba neskôr zdravá, preto ho spojte so správcom procesov a občasným skutočným testom spojenia.
Nikdy nenahrádzajte počúvaciu loopback adresu zástupným znakom, aby ste sa vyhli ďalšiemu skoku. Táto jediná zmena je rozdiel medzi správcovskou cestou a verejne dostupným portom a zvyčajne sa stane pri ladení a potom zostane. Ak sa kolega k portu cez centrum nedostane, opravte konfiguráciu skoku, miesto aby ste rozširovali väzbu. Loopback je celý bezpečnostný argument tohto návrhu.
Prístup správcu cez centrum
Správca s bežným účtom na centre môže cez neho skočiť na presmerovaný port. Relay účet sa na to nepoužíva, a práve o to ide, keď ich držíte oddelené.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Overte kľúč hostiteľa zariadenia pod zvoleným aliasom, pretože ten kľúč identifikuje zariadenie na konci reťaze a tunel je len preprava. Prihlásenie od konca po koniec stále overuje oba konce; tunel, ktorý končí na zdieľanom centre, z neho sám o sebe nerobí dôveryhodnú cestu.
Vlastnite životný cyklus
Spúšťajte príkaz zariadenia pod správcom procesov s práve jednou aktívnou inštanciou a reštartovacou politikou, ktorú ste zvolili vedome. Voľby keepalive odhalia mŕtveho partnera; neoživia proces, ktorý skončil.
Potom napíšte postup vyradenia. Každé zariadenie má vlastného poslucháča a vlastný kľúč, takže vyradenie znamená odvolať ten účet a odstrániť ten kľúč, nie rotovať tajomstvo spoločné celej flotile.
Nakoniec si pamätajte, čo vám loopback kupuje. Obmedzuje sieťovú expozíciu a nerobí nič s ostatnými miestnymi používateľmi na zdieľanom centre, takže vlastná prístupová politika centra musí byť stále správna. Referencia sshd_config dokumentuje každú z vyššie použitých volieb a vyplatí sa prečítať si časti o presmerovaní celé, než ktorúkoľvek z nich rozšírite.