Doseči spletni vmesnik znotraj vsebnika VPN: izberite lastnika vrat
Aplikacija si deli imenski prostor VPN, zato vrata pripadajo vsebniku VPN. Pravilno privežite poslušalca, objavite pri lastniku in držite pot ozko.
Z aplikacijo ni nič narobe in s tunelom ni nič narobe, pa se nadzorna plošča vseeno ne naloži. Ko storitev teče z network_mode: service:vpn, si deli omrežni imenski prostor vsebnika VPN, kar pomeni, da njegov poslušalec in objavljena vrata pripadajo temu imenskemu prostoru, ne storitvi. Iz tega sledijo tri odločitve: kje se aplikacija priveže, kateri vsebnik objavi vrata in kako ozka je pot upravljanja. Postavite jih v napačen vrstni red in vsaka posamezna nastavitev bo videti pravilna, medtem ko kombinacija ne more delovati.
Kdo ima imenski prostor vrat
V deljenem imenskem prostoru dodajanje vnosa ports: odvisni storitvi ne pomaga, več omrežnih možnosti pa zanjo po zasnovi ni podprtih. Namesto tega objavite na vsebniku, ki ima imenski prostor. Ta vsebnik je tudi tisti, katerega naslov se pojavi na gostitelju, zato se preslikava bere kot en vnos in ne en na storitev.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Bodite pozorni na naslov levo od preslikave. Vezava na 127.0.0.1 obdrži objavljena vrata na povratni zanki gostitelja, kar običajno želi upravljalni vmesnik. Vezava na 0.0.0.0 jih izpostavi na vseh vmesnikih gostitelja, in to je druga varnostna odločitev, ne udobje.
Naj aplikacija posluša tam, kjer imenski prostor pričakuje
Poslušalec, vezan na 127.0.0.1 znotraj imenskega prostora, je dosegljiv le od znotraj tega prostora. Objavljena gostiteljska vrata prihajajo od zunaj, zato mora aplikacija vezati širši naslov, da preslikava deluje. Na večini strežnikov je to sprememba ene vrstice, in prav ta korak ljudje izpustijo, potem ko kopirajo vodnik za utrjevanje, napisan za namestitev brez vsebnikov.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Seznam poslušalcev znotraj aplikacije pove resnico o naslovu vezave, docker port pa pokaže, kaj je lastnik dejansko objavil. Če prvi kaže 127.0.0.1, drugi pa preslikavo na gostitelju, ste našli neskladje, ne da bi se dotaknili konfiguracije VPN.
Izberite, kako vstopi pot upravljanja
Obstajajo tri razumne postavitve. Objavite na vsebniku VPN in ga dosezite z gostitelja ali iz lokalnega omrežja. Pred imenski prostor postavite obratni posrednik in mu dajte edina izpostavljena vrata. Ali pa naj bo nadzorna plošča dosegljiva le od znotraj imenskega prostora prek seje exec ali tunela SSH, kar je najmanjša izpostavljenost in najmanj udobja.
Katera ustreza, je odvisno od tega, kdo in od kod potrebuje vmesnik. Enemu skrbniku na istem gostitelju zadošča vezava na povratno zanko. Ekipa, ki do njega dostopa prek VPN, potrebuje premišljeno pot in imenovanega lastnika. Izbira možnosti s posrednikom prinese TLS in dnevnike dostopa, a za ceno še ene komponente, ki jo je treba vzdrževati.
Odprite upravljalna vrata, ne da bi odprli vse
Lastna politika lokalnega dostopa ali zaklepanja odjemalca VPN lahko zavrže dohodno upravljalno zahtevo, tudi ko odhodni tunel deluje brezhibno. Dovolite eno dokumentirano izjemo za predvideni vir in vrata, nato potrdite, da običajna zaščita tunela ni spremenjena. Izklop varnostnega stikala, da bi se nadzorna plošča naložila, zamenja resničen nadzor za zavihek brskalnika.
Pustite lastno preverjanje pristnosti aplikacije vključeno. Biti znotraj sklopa, povezanega z VPN, ne pooblašča vsakega lokalnega uporabnika ali vsake naprave, ki lahko doseže gostitelja, in skrbniška plošča brez preverjanja pristnosti za tunelom ostaja plošča brez preverjanja pristnosti.
Preverite z upravljalne naprave, nato preverite znova pozneje
Preizkusite s stroja, ki bo storitev dejansko upravljal, ne z gostitelja, nato ločeno preverite internetno pot, ki jo aplikacija potrebuje. Uspeh pri upravljanju dokazuje eno smer in ne pove ničesar o izhodu.
Preizkusite znova, ko je sklop znova ustvarjen. Zamenjan omrežni lastnik spremeni imenski prostor, na katerega se aplikacija pripne, in URL, ki je deloval pred posodobitvijo, po njej morda ne kaže nikamor. Zapišite objavljeno preslikavo in naslov vezave, da bo naslednja ponovna gradnja dvominutno preverjanje in ne ponovljena preiskava.