Obrnuti SSH za jedan uređaj: loopback slušatelj ili rutirani VPN?
Jedan upravljački port za uređaj koji može samo zvati prema van. Tri uvjeta odlučuju je li obrnuti tunel dovoljan ili vam treba stvarna rutirana putanja.
Vaš uređaj stoji iza NAT-a operatera, može otvarati odlazne veze i pokreće SSH poslužitelj do kojeg nitko ne može doći. Zahtjev koji stiže obično se izražava kao "dajte mu VPN", što je jedan od nekoliko odgovora. Prije nego što ga prihvatite, odlučite treba li vam jedan administrativni TCP port ili rutirana putanja do cijele podmreže, jer su to različiti projekti s različitom izloženošću.
Obrnuti tunel dobro odgovara na usku verziju. Uređaj se spaja na vaše središte, traži da središte sluša na loopback portu i prosljeđuje taj port natrag na vlastitu SSH uslugu. Administratori zatim dolaze do slušatelja kroz središte, a ne kroz javni internet.
Tri uvjeta koja odlučuju izbor
Zapišite ih prije bilo kakve konfiguracije. Oni su granica između ograničenog upravljačkog ulaza i proširenja mreže, a njihovo miješanje pretvara tunel od pet redaka u ravnu mrežu bez vlasnika.
| 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ći red je onaj oko kojeg se ljudi svađaju. Tunel do SSH porta uređaja ne stavlja njegove susjede na vašu mrežu i ne smije se prikazivati kao da to čini lancem daljnjih prosljeđivanja. Ako je zahtjev doista LAN, recite to i dizajnirajte njega umjesto toga.
Strana središta: ograničen relejni račun
Dajte svakom uređaju vlastiti relejni račun s autentifikacijom javnim ključem i bez interaktivne sesije. Match blok ograničen na taj račun drži dopuštenje malim, a privatni ključ ostaje na uređaju gdje mu je mjesto.
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 zanimljiv redak. Odbija ljusku i sesije podsustava, a i dalje dopušta prosljeđivanje koje uređaj treba, pa se ukradeni ključ ne može pretvoriti u interaktivnu prijavu. PermitListen fiksira adresu i port slušatelja na strani središta, a GatewayPorts no drži ga na loopbacku umjesto da ga otvori mreži u kojoj središte stoji.
Testirajte stvarnu konfiguraciju prije ponovnog učitavanja i držite drugu sesiju otvorenom dok to radite. Match blok koji se slučajno primjenjuje na sve, ili tipfeler u nazivu opcije, klasičan je način da se zaključate izvan stroja koji učvršćujete. Ispišite aktivnu konfiguraciju i pročitajte opcije ponovno umjesto da vjerujete datoteci koju ste upravo napisali. Imajte na umu da se podrška za opcije razlikuje između verzija, pa noviji poslužitelj može prihvatiti redak koji stariji jednostavno ignorira.
Strana uređaja: prosljeđivanje koje glasno pada
Uređaj otvara vezu i traži slušatelja. Dvije adrese u argumentu -R znače različite stvari, a čitanje slijeva nadesno najbrži je način da zapamtite koja je koja.
ssh -NT \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:21022:127.0.0.1:22 \
[email protected]
Lijevi par je mjesto gdje središte treba slušati. Desni par je ono na što se uređaj spaja kad zahtjev stigne, riješeno s njegove vlastite strane. Zamjena stvara tunel koji se čisto podiže i prosljeđuje na pogrešno mjesto, što je gore od neuspjeha.
ExitOnForwardFailure=yes tjera naredbu da izađe kada traženi slušatelj ne može biti uspostavljen, pa petlja ponovnog pokretanja govori istinu umjesto da ostavi napola radeću sesiju. Ne govori ništa o tome je li lokalna SSH usluga kasnije zdrava, pa to spojite s upraviteljem procesa i povremenim stvarnim testom veze.
Nikada ne zamjenjujte loopback adresu slušanja zamjenskim znakom da biste izbjegli dodatni skok. Ta jedna promjena razlika je između upravljačke putanje i javno dostupnog porta, a obično se dogodi tijekom otklanjanja pogrešaka i onda ostane. Ako kolega ne može doći do porta kroz središte, popravite konfiguraciju skoka umjesto da proširujete vezanje. Loopback je cijeli sigurnosni argument ovog dizajna.
Administratorski pristup kroz središte
Administrator s običnim računom na središtu može skočiti kroz njega na proslijeđeni port. Relejni račun se za to ne koristi, i upravo je to smisao njihovog razdvajanja.
ssh -J [email protected] -o HostKeyAlias=device-7 \
-p 21022 [email protected]
Provjerite ključ računala pod pseudonimom koji ste odabrali, jer taj ključ identificira uređaj na kraju lanca, a tunel je samo prijevoz. Prijava s kraja na kraj i dalje provjerava oba kraja; tunel koji završava na dijeljenom središtu ne čini ga sam po sebi pouzdanom putanjom.
Preuzmite životni ciklus
Pokrenite naredbu uređaja pod upraviteljem procesa s točno jednom aktivnom instancom i politikom ponovnog pokretanja koju ste svjesno odabrali. Opcije održavanja veze otkrivaju mrtvog partnera; one ne oživljavaju proces koji je izašao.
Zatim napišite postupak umirovljenja. Svaki uređaj dobiva vlastitog slušatelja i vlastiti ključ, pa razgradnja znači opoziv tog računa i uklanjanje tog ključa, a ne rotaciju tajne zajedničke cijeloj floti.
Na kraju, sjetite se što vam loopback donosi. Ograničava mrežnu izloženost i ne čini ništa u vezi s drugim lokalnim korisnicima na dijeljenom središtu, pa vlastita politika pristupa središta i dalje mora biti ispravna. Referenca za sshd_config dokumentira svaku od gore korištenih opcija i vrijedi u cijelosti pročitati odjeljke o prosljeđivanju prije nego što bilo koju od njih proširite.