Reverzní SSH pro jedno zařízení: loopback posluchač, nebo routovaná VPN?
Jeden správcovský port pro zařízení, které umí jen vytáčet ven. Tři podmínky rozhodují, zda reverzní tunel stačí, nebo potřebujete skutečnou routovanou cestu.
Vaše zařízení sedí za NAT operátora, umí otevírat odchozí spojení a provozuje SSH server, ke kterému se nikdo nedostane. Požadavek, který přichází, bývá formulován jako "dejte mu VPN", což je jedna z několika odpovědí. Než ho přijmete, rozhodněte, zda potřebujete jeden správcovský TCP port, nebo routovanou cestu do celé podsítě, protože to jsou různé projekty s různou expozicí.
Reverzní tunel dobře odpovídá na úzkou verzi. Zařízení vytáčí vaše centrum, požádá ho, aby naslouchalo na loopback portu, a přeposílá tento port zpět na vlastní SSH službu. Správci se pak k posluchači dostanou přes centrum, ne přes veřejný internet.
Tři podmínky, které rozhodují volbu
Zapište si je před jakoukoli konfigurací. Jsou hranicí mezi omezeným správcovským vstupem a rozšířením sítě a jejich záměna je cesta, jak se z tunelu o pěti řádcích stane plochá síť 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 |
Třetí řádek je ten, o kterém se lidé přou. Tunel k SSH portu zařízení nepřipojuje jeho sousedy do vaší sítě a nemělo by se to tak vydávat řetězem dalších přesměrování. Pokud je požadavek skutečně LAN, řekněte to a navrhněte raději ji.
Strana centra: omezený relay účet
Dejte každému zařízení vlastní relay účet s autentizací veřejným klíčem a bez interaktivní relace. Match blok omezený na tento účet drží oprávnění malé a soukromý klíč zůstává na zařízení, kam patří.
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 zajímavý řádek. Odmítá relace shellu a subsystémů, a přitom povoluje přesměrování, které zařízení potřebuje, takže ukradený klíč nelze proměnit v interaktivní přihlášení. PermitListen připíná adresu a port posluchače na straně centra a GatewayPorts no drží ho na loopbacku, místo aby ho otevřel síti, ve které centrum stojí.
Otestujte efektivní konfiguraci před opětovným načtením a nechte po tu dobu otevřenou druhou relaci. Match blok, který se omylem vztahuje na všechny, nebo překlep v názvu volby, je klasický způsob, jak se zamknout ven ze stroje, který zpevňujete. Vypište běžící konfiguraci a přečtěte si volby znovu, místo abyste věřili souboru, který jste právě napsali. Všimněte si, že podpora voleb se mezi buildy liší, takže řádek přijatý novějším serverem může starší prostě ignorovat.
Strana zařízení: přesměrování, které hlasitě selže
Zařízení otevírá spojení a žádá posluchače. Dvě adresy v argumentu -R znamenají různé věci a čtení zleva doprava je nejrychlejší způsob, jak si zapamatovat, která je která.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Levá dvojice je místo, kde má centrum naslouchat. Pravá dvojice je to, kam se zařízení připojuje, když dorazí požadavek, řešeno z jeho vlastní strany. Jejich prohození vytvoří tunel, který se čistě zvedne a přesměruje na špatné místo, což je horší než selhání.
ExitOnForwardFailure=yes přinutí příkaz ukončit se, když požadovaný posluchač nelze ustavit, takže restartovací smyčka vám řekne pravdu, místo aby nechala napůl funkční relaci. Nic neříká o tom, zda je lokální SSH služba později zdravá, proto ho spojte se správcem procesů a občasným skutečným testem spojení.
Nikdy nenahrazujte naslouchající loopback adresu zástupným znakem, abyste se vyhnuli dalšímu skoku. Tato jediná změna je rozdíl mezi správcovskou cestou a veřejně dostupným portem a obvykle se stane při ladění a pak zůstane. Pokud se kolega k portu přes centrum nedostane, opravte konfiguraci skoku, místo abyste rozšiřovali vazbu. Loopback je celý bezpečnostní argument tohoto návrhu.
Přístup správce přes centrum
Správce s běžným účtem na centru může přes něj skočit na přesměrovaný port. Relay účet se k tomu nepoužívá, a právě o to jde, když je držíte oddělené.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Ověřte klíč hostitele zařízení pod zvoleným aliasem, protože tento klíč identifikuje zařízení na konci řetězu a tunel je jen přeprava. Přihlášení od konce ke konci stále ověřuje oba konce; tunel, který končí na sdíleném centru, z něj sám o sobě nedělá důvěryhodnou cestu.
Vlastněte životní cyklus
Spouštějte příkaz zařízení pod správcem procesů s právě jednou aktivní instancí a restartovací politikou, kterou jste zvolili vědomě. Volby keepalive odhalí mrtvého protějška; neoživí proces, který skončil.
Pak napište postup vyřazení. Každé zařízení má vlastního posluchače a vlastní klíč, takže vyřazení znamená odvolat tento účet a odstranit tento klíč, ne rotovat tajemství společné celé flotile.
Nakonec si pamatujte, co vám loopback kupuje. Omezuje síťovou expozici a nedělá nic s ostatními místními uživateli na sdíleném centru, takže vlastní přístupová politika centra musí být stále správná. Reference sshd_config dokumentuje každou z výše použitých voleb a vyplatí se přečíst si oddíly o přesměrování celé, než kteroukoli z nich rozšíříte.