Blogi

Dockeri konteinerite tugevdamine mitme üürniku hostinguks: samm-sammuline isoleerimisjuhend

Õppige, kuidas lukustada Dockeri konteinerid mitme üürniku keskkondades praktiliste turvameetmetega, nagu mitte-juurkaustajad, loobutud võimalused, kirjutuskaitstud failisüsteemid ja võrgu isoleerimine.

Kokkuvõte

Mitme üürniku Dockeri hostingplatvormi käitamine nõuab õhukindlat konteinerite isoleerimist, et vältida üürnike omavahelist segamist või põgenemist hosti. See juhend pakub konkreetset, samm-sammulist tugevdamisprotsessi, mida saate täna rakendada. Saate õppida konfigureerima mitte-juurkasutajaid, loobuma mittevajalikest Linuxi võimalustest, mountima failisüsteeme kirjutuskaitstuna, jõustama ressursipiiranguid cgroups-ide kaudu, segmenteerima võrke ja rakendama seccomp- või AppArmor-profiile. Samuti käsitleme, millal täiendada konteinereid virtuaalmasinatega maksimaalse turvalisuse tagamiseks. Lõpuks on teil kontrollnimekiri, et süstemaatiliselt kõrvaldada tavalised konteineri põgenemisvektorid ja hoida oma mitme üürniku infrastruktuuri tõeliselt isoleerituna.

Tegelik probleem mitme üürniku konteineritega

Dockeri konteinerid jagavad hosti kerneli ja kui isolatsioon on valesti konfigureeritud, võib üks üürnik teoreetiliselt pääseda ligi teise andmetele, tarbida kogu CPU-d või isegi põgeneda hosti. Hostinguteenuse pakkujana vajate õhukindlaid piire, ohverdamata konteinerite jõudluse eeliseid. Paljud meeskonnad alustavad vaikimisi Dockeri seadistustega, mis on loodud arenduseks, mitte tootmise mitme üürniku jaoks. Hea uudis: süstemaatilise tugevdamise kontrollnimekirjaga saate iga konteineri lukustada peaaegu VM-i tasemel isolatsioonini, säilitades samal ajal Dockeri kiiruse.

See artikkel juhendab teid läbi iga tugevdamise sammu praktiliste näidete ja hoiakutega. Lõpuks on teil korratav protsess turvaliste mitme üürniku konteinerite kasutuselevõtmiseks.

1. samm: Käivitage konteinerid mitte-juurkasutajana

Vaikimisi töötavad Dockeri konteinerid juurkasutajana. Kui konteiner ohustatakse, saab ründaja juurkasutaja õigused konteineri sees ja võib proovida konteinerist põgeneda. Esmalt looge oma Dockerfile'is spetsiaalne kasutaja ja lülituge sellele:

FROM ubuntu:22.04
RUN useradd -m appuser
USER appuser

Hoiatus: Mõned protsessid (nt sidumine portidega < 1024) nõuavad juurõigusi. Nendel juhtudel kasutage lipukat --cap-add, et anda ainult vajalik võime, nt --cap-add=NET_BIND_SERVICE, ja käivitage protsess ikkagi mitte-juurkasutaja all.

Rohkem põhiisolatsiooni kohta leiate meie juhendist tõelise mitme üürniku isolatsiooni saavutamine Dockeris.

2. samm: Loobuge kõigist Linuxi võimalustest ja lisage tagasi ainult need, mida vajate

Linuxi võimalused jagavad juurõigused väikesteks üksusteks. Dockeri konteineritel on vaikimisi võimaluste komplekt, mis on mitme üürniku hostingu jaoks liiga lubav. Loobuge kõigest ja lisage tagasi ainult need, mida teie rakendus vajab:

docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app

Levinud võimalused, mida vältida: SYS_ADMIN (konteinerist põgenemine), NET_RAW (pakettide nuuskimine), SYS_PTRACE (protsessi silumine). Kasutage docker run koos --security-opt no-new-privileges, et vältida õiguste eskaleerimist setuid binaaride kaudu.

3. samm: Mountige juurfailisüsteem kirjutuskaitstuna

Ründajad kirjutavad sageli konteineri failisüsteemi pahatahtlikke skripte. Kui muudate juurfailisüsteemi kirjutuskaitstuks, väldite seda:

docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m my-app

--tmpfs loob ajutise kirjutatava mounti kataloogidele nagu /tmp ja /var/run. Lipp noexec takistab sellelt mountilt käivitamist. See lähenemine sunnib ründajaid liikuma läbi kirjutatavate kataloogide, mida saate jälgida.

4. samm: Jõustage ressursipiirangud cgroups-idega

Piiramata konteinerid võivad teha teenusetõkke rünnakuid, ammendades hosti mälu või CPU. Kasutage Dockeri käitusaja piiranguid:

docker run --memory=512m --memory-swap=512m --cpus=0.5 --pids-limit=100 my-app
  • --memory ja --memory-swap määravad kõvad piirid (ilma vahetusmäluta).
  • --cpus piirab CPU-d.
  • --pids-limit takistab harkpomme, piirates protsesside arvu.

Hoiatus: Ressursipiiranguid jõustavad cgroups-id, kuid need ei takista andmete väljaviimist võrgu kaudu. Kombineerige võrgu isoleerimisega (järgmine samm).

5. samm: Segmenteerige võrgud Dockeri kohandatud võrkudega

Vaikimisi jagavad Dockeri konteinerid sildvõrku. Mitme üürniku seadistuses peate isoleerima iga üürniku võrgustiku. Looge iga üürniku jaoks spetsiaalne võrk:

docker network create tenant-alpha --internal
docker run --network tenant-alpha my-app

Kasutage lippu --internal, et blokeerida väljuv internetiühendus, seejärel eksponeerige ainult vajalikud pordid -p kaudu. Täiustatud võrgu segmenteerimiseks kaaluge veebirakenduste turvamine Dockeri isolatsiooniga.

Hoiatus: Sisemised võrgud takistavad otsest konteineritevahelist suhtlust üürnike vahel, kuid DNS-i lekkimine võib siiski toimuda, kui kasutate hosti võrku. Jääge sild- või ülekattevõrkude juurde.

6. samm: Rakendage seccomp ja AppArmor profiilid

Seccomp filtreerib süsteemikutseid ja AppArmor (või SELinux) jõustab kohustuslikke juurdepääsukontrolle. Docker pakub vaike seccomp profiili, mis blokeerib ohtlikud süsteemikutsed nagu clone teatud lippudega. Rangema isoleerimise jaoks looge kohandatud profiil:

docker run --security-opt seccomp=./custom.json --security-opt apparmor=docker-default my-app

Saate luua baasprofiili käsuga docker run --rm -it --security-opt seccomp=unconfined my-app strace -c -S time ja seejärel seda kärpida. Hoiatus: Liiga piiravad profiilid võivad katkestada õigustatud funktsionaalsust. Testige põhjalikult lavastuskeskkonnas.

7. samm: Kaaluge hübriidisolatsiooni virtuaalmasinatega

Kui teie üürnikud nõuavad absoluutset isoleerimist (nt reguleeritud tööstusharu), käivitage konteinerid kergekaalulises VM-is. Tööriistad nagu Sysbox või Kata Containers pakuvad riistvarataseme eraldamist, ohverdamata konteineri kiirust. See on lähenemisviis, mida kasutab Dockeri Enhanced Container Isolation (ECI). Kuigi ülepeakulu on suurem kui paljastel konteineritel, on see töökoormuse kohta palju väiksem kui täielikel VM-idel.

Rohkem sobiva isoleerimistaseme valimise kohta lugege mitme üürniku Dockeri arhitektuuri kujundamine.

Kõik kokku: tugevdamise kontrollnimekiri

  1. Ehitage konteinerid mitte-juurkasutajaga.
  2. Loobuge kõigist võimalustest, lisage ainult vajalikud.
  3. Mountige failisüsteem kirjutuskaitstuna, ajutiste kirjutatavate mountidega.
  4. Seadke mälu, CPU ja PID piirangud.
  5. Looge isoleeritud Dockeri võrgud iga üürniku jaoks.
  6. Rakendage kohandatud seccomp ja AppArmor profiilid.
  7. Hinnake hübriid VM konteinerite kasutamist kõrge turvalisusega vajadusteks.

Kokkuvõte

Konteinere tugevdamine ei ole ühekordne ülesanne – see on pidev distsipliin. Ülaltoodud sammud moodustavad turvabaasi mitme üürniku hostingu jaoks. Pidage meeles, et ükski meede ei taga ohutust; sügavuti kaitse on võtmetähtsusega. Alustage põhitõdedest: mitte-juurkasutajad ja loobutud võimalused. Seejärel lisage ressursipiirangud ja võrgu segmenteerimine. Kõige tundlikumate töökoormuste jaoks ühendage konteinerid VM-idega. Selle juhendiga saate enesekindlalt kasutusele võtta mitme üürniku Dockeri keskkonnad, mis on nii tõhusad kui ka turvalised.

Sources (5)