OpenVPN f'Docker: il-kuntratt tal-eżekuzzjoni li għandu bżonn klijent minimu
Immaġni riveduta, profil protett wieħed, aċċess għal TUN u NET_ADMIN. X'jirċievi l-kontenitur, x'ma għandux jirċievi u kif jiġi ppruvat li l-mina taħdem.
Poġġi klijent VPN f'kontenitur u tikseb spazju wieħed tal-ismijiet b'mina ġo fih, mhux host li jidderieġi t-traffiku kollu tiegħu permezz ta' VPN. Dawn huma proġetti separati, u li tittrattahom bħala wieħed hija t-triq li biha l-kontenituri jispiċċaw privileġġjati b'aċċident. Dan il-gwida jkopri biss l-ewwel: immaġni riveduta waħda, profil protett wieħed u proċess tal-klijent limitat għall-ispazju tal-ismijiet tan-netwerk tiegħu stess.
Ibda minn artefatt li xi ħadd diġà approva. Il-passi hawn taħt jassumu immaġni li fiha l-eżegwibbli openvpn u profil tal-klijent sħiħ biċ-ċertifikat u l-materjal tal-muftieħ tiegħu diġà solvuti ġewwa l-muntaġġ. Ma jibnux software, ma joħorġux kredenzjali u ma jkoprux ambjenti mingħajr root lanqas kontenituri Windows nattivi, li kull wieħed minnhom ibiddel it-tweġiba.
X'jirċievi l-kontenitur u x'ma jirċevix
Żomm il-profil u kollox li jirreferi għalih f'direttorju lokali b'permessi ristretti, immuntat bħala qari biss. Il-mogħdijiet relattivi fil-profil iridu jiġu solvuti f'dak il-muntaġġ; dan huwa dettall li n-nies jitilfu meta ċertifikat ikun direttorju 'l fuq mill-profil u l-kontenitur qatt ma jarah.
services:
vpn:
image: ${VPN_CLIENT_IMAGE:?set the reviewed image reference}
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./vpn:/vpn:ro
working_dir: /vpn
entrypoint: ["openvpn"]
command: ["--config", "/vpn/client.ovpn"]
Dak il-fajl jagħti tliet affarijiet u ma jitlob xejn ieħor. Ir-referenza tal-immaġni għandha tiġi ffissata bid-digest jekk il-politika tal-varar tiegħek tgħid hekk, u l-profil għandu jkun dak rivedut, mhux kopja li xi ħadd editja fil-post fuq il-host.
Qari biss hawn ifisser li l-kontenitur ma jistax ibiddel il-fajls tiegħek fuq il-host; ma jfissirx li l-kontenitur ma jistax jaqra l-muftieħ privat li mmuntajt. Dan huwa l-iskop kollu tal-muntaġġ, u għalhekk il-permessi tal-fajls, is-sjieda u kif is-sigriet wasal fuq il-host għadhom importanti. Qatt tgħaddix password fuq il-linja tal-kmand u lanqas taħmietha f'saff tal-immaġni, għax it-tnejn jibqgħu f'postijiet li ma tistax tnaddaf aktar tard.
Kapaċitajiet, entrypoint u n-nassa bejniethom
Żewġ issettjar huma meħtieġa u jagħmlu xogħol mhux relatat. NET_ADMIN jippermetti manipulazzjoni tal-interfaces u r-rotot fl-ispazju tal-ismijiet tal-kontenitur. Id-dħul tal-apparat /dev/net/tun jippermetti lill-proċess jiftaħ l-apparat tal-mina xorta waħda. Li tagħti wieħed mingħajr l-ieħor jipproduċi falliment ċar, li huwa konvenjenti: apparat TUN nieqes ifalli meta jinfetaħ, filwaqt li kapaċità nieqsa tfalli meta l-klijent jipprova jikkonfigura l-interface.
L-ebda waħda minnhom ma tiġġustifika privileged: true. Kontenitur privileġġjat jirċievi kull kapaċità flimkien ma' aċċess għall-apparati, u dan huwa ħafna akbar minn dak li teħtieġ din it-tagħbija tax-xogħol. Ir-referenza tal-privileġġi u l-kapaċitajiet tal-eżekuzzjoni tispjega kemm tilħaq din il-konċessjoni. Jekk chart jew post tal-blog jitolbuha, iċċekkja l-ewwel jekk ir-rekwiżit kienx fil-fatt mogħdija tal-apparat nieqsa jew kapaċità nieqsa.
L-override ta' entrypoint huwa l-parti li tgidem. Li ssejjaħ openvpn direttament huwa korrett għal immaġni ordinarja u ħażin għal kwalunkwe immaġni tal-prodott li l-iskript tal-bidu tagħha jipprepara regoli tal-ħajt tan-nar, fajls tar-resolver jew kredenzjali qabel ma jwettaq id-daemon. Li tittrasponi dak l-iskript taqbeż il-preparazzjoni u tħallik tiddenubja mina li telgħet fi spazju tal-ismijiet nofs konfigurat.
Ħaddem il-klijent fil-quddiem u ħallih ikun il-proċess ewlieni tal-kontenitur. Proċess li jsir daemon joħroġ minnufih, il-kontenitur jerġa' jibda f'linja, u l-logs li għandek bżonn huma mxerrda bejn tqajjimiet mill-ġdid li kollha jidhru l-istess.
Ivverifika minn ġewwa l-ispazju tal-ismijiet, mhux mill-host
Erfa' l-istack, ikkonferma fil-log li l-klijent wasal fi stat konness, imbagħad iċċekkja l-ispazju tal-ismijiet li fil-fatt iżomm il-mina.
docker compose up -d
docker compose logs --tail 40 vpn
docker compose exec vpn ip -br addr
docker compose exec vpn ip route
Il-lista tal-indirizzi għandha turi interface tal-mina b'indirizz mill-pool, u t-tabella tar-rotot għandha turi d-destinazzjonijiet imbuttati li jindikaw lejha. Jekk l-interface hija nieqsa, il-klijent qatt ma wasal għall-punt li joħloqha. Jekk teżisti imma l-ebda rotta ma tużaha, il-post fejn tfittex huwa l-push jew l-għażliet tar-rotta.
Imbagħad ipprova d-destinazzjoni li tinteressak, mill-ispazju tal-ismijiet li suppost juża l-mina, bl-applikazzjoni u mhux biss bil-ping. Is-soluzzjoni tal-ismijiet hija falliment separat li jistħoqqlu prova espliċita: indirizz DNS imbuttat ma jaġġornax ir-resolver ta' kontenitur waħdu, u klijent awtonomu li jinjora l-push se jsolvi l-ismijiet permezz ta' dak li kkonfigura l-immaġni.
L-istat skonnettjat huwa parti mill-kuntratt
L-imġiba tar-rikonnessjoni teħtieġ il-verifika tagħha stess, għax politika ta' restart turi li l-proċess jerġa' jibda u ma tgħid xejn dwar x'jagħmel it-traffiku f'dan il-ħin. Waqqaf il-mina, ipprova d-destinazzjoni maħsuba u osserva jekk il-konnessjoni tiġix miċħuda, tiddendilx jew tirnexxix bil-kwiet permezz tar-rotta ordinarja tal-kontenitur. L-aħħar riżultat huwa dak li jgħodd, u huwa inviżibbli f'log f'saħħtu.
Jekk it-tagħbija tax-xogħol qatt m'għandhiex tuża t-triq ordinarja, iddisinja dan b'mod espliċitu b'regoli tal-ħajt tan-nar u sinjal ta' tħejjija fl-ispazju tal-ismijiet. Kill switch hija politika li tikteb u tittestja, mhux proprjetà li wiret billi tħaddem klijent f'kontenitur.
Fl-aħħar, ftakar il-konfini: dawn ir-rotot jgħixu fl-ispazju tal-ismijiet tal-kontenitur u ma jissostitwixxux it-tabella tar-routing tal-host. Ir-regoli tat-trażmissjoni, traduzzjoni u ħajt tan-nar ta' Docker jibqgħu parti mit-triq ta' barra, u port ippubblikat mhuwiex interface VPN.