Sve radi dok graditelj ne zatraži isti socket domaćina koji koristi VPN gost, a tada nitko ne može objasniti zašto posao može čitati ključeve pristupnika. Sve je instalirano na jednom stroju jer je stalo, a svaki gost dobio je širok pristup jer je to bio najbrži način da se to pokrene. Rezultat je domaćin čija je granica povjerenja kabel za napajanje. Razdvajanje uloga manje je posla nego što zvuči, i počinje njihovim imenovanjem.

Tri uloge koje trenutačno dijele sve

VPN ulaz, skup privatnih usluga i graditelj žele različite stvari. Prvi treba javni port i usku mrežu na privatnoj strani. Drugi treba trajnu pohranu i tajne aplikacije. Treći izvršava kod koji je napisao netko drugi.

Davanje istog pristupa svima trima čini simptom zbunjujućim, jer tada bilo koji od njih može utjecati na ostale. Posao gradnje koji može dosegnuti socket hipervizora posao je koji može zaustaviti VPN. Gost usluga s rutom prema upravljačkoj mreži može promijeniti konfiguraciju preklopnika. Ovlasti su problem, a popis procesa samo je mjesto gdje se to vidi. Imenovanje uloga najprije daje svakoj ovlasti mjesto za život.

Skica u nastavku polazište je za tu podjelu, a ne obećanje visoke dostupnosti. Tretirajte je kao hipotezu koju treba provjeriti, ne kao gotov dizajn.

Razdvojite tri uloge, ne tri procesa

Tri gosta na jednom domaćinu daju tri skupa ovlasti i tri mrežna položaja. Ne daju tri domene kvara, i dizajn bi to trebao reći naglas.

Podjela pomaže samo ako kompromitacija jednog gosta ne daje ostalima ovlasti automatski, a to je postavka hipervizora, a ne konvencija imenovanja. Nazvati VM pristupnikom ne sprječava drugog gosta da dosegne domaćina. Čitajte konfiguraciju virtualnog preklopnika umjesto imena domaćina, zatim potvrdite da svaki gost sjedi ondje gdje mislite.

host
├─ vpn-gw      10.60.10.2/24   public 51820/udp only
├─ services    10.60.0.10/24   no route to the management network
└─ ci-runner   10.60.20.2/24   outbound only, no host socket

Zapišite topologiju i zatim je provjerite alatima koji je posjeduju. Gost koji se pojavi na pogrešnom mostu nalaz je, a ne detalj. Ispravite mrežu prije nego promijenite bilo koju konfiguraciju usluge.

Neka VPN gost otvara samo vrata koja posjeduje

Objavite port tunela na usmjerivaču i ništa drugo. Upravljački portovi gostiju pripadaju upravljačkoj stazi, ne internetu, a i vlastito sučelje hipervizora pripada ondje.

Mreža na privatnoj strani trebala bi dosezati usluge koje udaljeni korisnici trebaju i ondje stati. Autentikacija aplikacije ostaje uključena, jer tunel je prijenos, a ne prijava. Držite tablicu usmjeravanja VPN gosta dovoljno malom da se opiše jednom rečenicom. Ako je ne možete opisati tako jednostavno, granica se već zamutila.

virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'

Sve što sluša na domaćinu i nije potrebno za upravljanje ne bi trebalo uopće slušati. To uključuje API hipervizora, koji je lako ostaviti izložen na javnom sučelju.

Poslovi gradnje trebaju drugu vrstu granice

CI posao izvršava naredbe koje kontrolira repozitorij, pa njegovo povjerenje ovisi o tome tko može gurati kod. Shell izvršitelj pokreće te naredbe kao korisnik izvršitelja na domaćinu, i to je najšira dostupna granica.

Izvršitelji kontejnera uži su, a privilegirani kontejner nije jedan od uskih. Držite izvršitelja u vlastitom gostu s vlastitim mrežnim opsegom i dajte mu samo pristup artefaktima i implementaciji koji poslovi trebaju. Jednokratni radnici smanjuju zadržano stanje; ne smanjuju dosežnost ni izloženost tajni. Obje stvari i dalje trebaju izričita ograničenja.

Gost usluga posjeduje podatke, pa je njegov plan sigurnosne kopije onaj koji mora raditi. Držite repozitorije, prijenose i bazu podataka u istom rasporedu. Testirajte obnovu umjesto čitanja stanja posla.

Planirajte kvar koji svi tri dijele

Jedan domaćin jedna je domena kvara. Ponovno pokretanje uklanja tunel i svaku privatnu uslugu u istom trenutku, a to je upravo kada put unutra najviše znači.

Zadržite pristup konzoli koji ne ovisi o VPN gostu, bilo da je fizička konzola, izvanpojasno upravljačko sučelje ili konzola pružatelja. Snimka pohranjena na istom disku nije neovisna kopija, a ni sigurnosna kopija koja se izvodi unutar gosta kojeg štiti. Zatim testirajte hladni start kao slijed, a ne kao kontrolni popis: domaćin, virtualne mreže, put tunela i jedna imenovana aplikacija pod običnim računom.

virsh list --all
systemctl is-active libvirtd
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://10.60.0.10/
ss -ltnp | grep -E ':51820|:443'

Redoslijed pokretanja procesa ne dokazuje ništa o rutama i DNS-u, pa testirajte put, a ne stanja jedinica. Put je ono što udaljeni korisnik doista treba.

Povezani članci