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
--memoryja--memory-swapmääravad kõvad piirid (ilma vahetusmäluta).--cpuspiirab CPU-d.--pids-limittakistab 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
- Ehitage konteinerid mitte-juurkasutajaga.
- Loobuge kõigist võimalustest, lisage ainult vajalikud.
- Mountige failisüsteem kirjutuskaitstuna, ajutiste kirjutatavate mountidega.
- Seadke mälu, CPU ja PID piirangud.
- Looge isoleeritud Dockeri võrgud iga üürniku jaoks.
- Rakendage kohandatud seccomp ja AppArmor profiilid.
- 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.
