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.

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

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.

Súvisiace články