Skip to main content
Infrastruktur 9 min läsning

Grunderna i containersäkerhet: Skydda din Docker-infrastruktur

Containrar förenklar driftsättning, men introducerar nya säkerhetsutmaningar. Lär dig de viktigaste metoderna för att säkra dina Docker- och containerbaserade applikationer.

TI
Tom Isgren

Docker och containrar har revolutionerat hur vi driftsätter och hanterar applikationer. Paketera din app en gång, kör den var som helst. Låter perfekt. Men här är vad många team upptäcker för sent: containrar innebär inte automatiskt säkerhet.

Den bekvämlighet som gör containrar attraktiva kan också skapa säkerhetsmässiga blinda fläckar. Låt oss gå igenom de viktigaste säkerhetsrutinerna som varje team bör implementera.

Förstå containersäkerhet

Containrar delar värdoperativsystemets kärna. Till skillnad från virtuella maskiner ger de inte fullständig isolering. Detta arkitekturval är det som gör dem lätta och snabba, men det innebär också att en komprometterad container potentiellt kan påverka andra på samma värd.

Verkligheten med delad kärna

Tänk på containrar som lägenheter i ett flerfamiljshus. De har separata utrymmen (namespaces) och resursbegränsningar (cgroups), men de delar husets grund och installationer. Ett problem med grunden påverkar alla.

Det betyder inte att containrar är osäkra. Det betyder att du behöver förstå vad du skyddar och mot vem.

Image-säkerhet: Börja rent

Din container är bara så säker som den image den bygger på. Det är här de flesta säkerhetsproblem uppstår.

1

Använd officiella bas-images

Börja med officiella images från Docker Hub eller din plattforms register. Images som python:3.12-slim eller node:20-alpine underhålls av communityn och får regelbundna säkerhetsuppdateringar.

2

Föredra minimala images

Alpine-baserade och slim-images innehåller färre paket, vilket innebär färre potentiella sårbarheter. En mindre attackyta är lättare att försvara. Välj alpine eller distroless-varianter när det är möjligt.

3

Skanna images regelbundet

Använd verktyg som Trivy, Grype eller Docker Scout för att skanna images efter kända sårbarheter. Integrera skanning i din CI/CD-pipeline så att problem fångas upp före driftsättning. Skanna inte bara en gång. Nya sårbarheter upptäcks kontinuerligt.

4

Pinpeka specifika versioner

Använd aldrig :latest i produktion. Pinpeka specifika image-digests eller versionstaggar. Detta säkerställer reproducerbara byggen och förhindrar att oväntade ändringar bryter din säkerhetsställning.

Körtidssäkerhet: Principen om minsta privilegium

Hur du kör containrar spelar lika stor roll som vad som finns i dem. Tillämpa principen om minsta privilegium på varje nivå.

Kör inte som root

Skapa en icke-root-användare i din Dockerfile och använd USER-direktivet. Om en angripare får åtkomst har de inte root-privilegier i din container.

Ta bort capabilities

Linux capabilities låter dig ge specifika behörigheter utan full root. Ta bort alla capabilities med --cap-drop=ALL och lägg tillbaka bara det du behöver.

Skrivskyddat filsystem

Använd flaggan --read-only för att göra containerns filsystem oföränderligt. Montera skrivbara volymer bara där det behövs för loggar eller temporära filer.

Resursbegränsningar

Sätt CPU- och minnesgränser för att förhindra att en enskild container förbrukar alla värdresurser. Detta minskar risken för överbelastningsattacker från skenande processer.

Exempel: Säker Docker Run

docker run -d \
  --name myapp \
  --user 1000:1000 \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --memory=512m \
  --cpus=0.5 \
  -v /app/data:/data:rw \
  myapp:1.2.3

Nätverkssäkerhet: Isolera och kontrollera

Som standard skapar Docker ett bridge-nätverk där alla containrar kan kommunicera. I produktion vill du ha explicit kontroll över vad som kan prata med vad.

Skapa isolerade nätverk

Skapa separata Docker-nätverk för olika applikationslager. Din databascontainer bör inte vara på samma nätverk som din publika webbserver om det inte är nödvändigt.

docker network create --driver bridge frontend
docker network create --driver bridge backend
docker network create --driver bridge database

Exponera inte onödiga portar

Exponera bara portar som behöver extern åtkomst. Interna tjänster bör kommunicera via Docker-nätverk, inte publicerade portar. Använd expose för dokumentation, -p bara när det behövs.

Använd en reverse proxy

Placera en reverse proxy som Traefik eller nginx framför dina containrar. Den hanterar TLS-terminering, ger en enda ingångspunkt och låter dig styra routning centralt. Detta hindrar också dina applikationscontainrar från att binda direkt till värdportar.

Hemlighetshantering: Hårdkoda aldrig

Inloggningsuppgifter i Dockerfiles eller miljövariabler är ett av de vanligaste säkerhetsfelen med containrar.

Vad du INTE ska göra

  • Hårdkoda hemligheter i Dockerfile: ENV DB_PASSWORD=secret123
  • Skicka hemligheter via kommandoraden: docker run -e API_KEY=xxx
  • Checka in .env-filer till versionshantering
  • Lagra hemligheter i image-lager (de finns kvar även om de raderas)

Bättre metoder

  • Docker Secrets: Inbyggt för Swarm-läge, monterar hemligheter som filer i /run/secrets/
  • Externa hemlighetshanterare: HashiCorp Vault, AWS Secrets Manager eller Bitwarden Secrets Manager
  • Miljöfiler vid körtid: Ladda från krypterad lagring, inte från versionshantering
  • Flerstegsbyggen: Bygg i ett steg, kopiera bara artefakter till slutlig image (inga bygghemligheter)

Värdsäkerhet: Grunden

Dina containrar är bara så säkra som värden de körs på. Försumma inte den underliggande infrastrukturen.

Håll värd-OS och Docker-motorn uppdaterade
Använd ett minimalt värd-OS (Alpine, Flatcar, Bottlerocket)
Kör Docker i rootless-läge när det är möjligt
Aktivera granskningsloggning för Docker-demonen
Begränsa åtkomsten till Docker-socketen (den ger root-behörighet)
Använd AppArmor- eller SELinux-profiler för ytterligare isolering

Övervakning och respons

Säkerhet är inte något du ställer in och glömmer. Du behöver insyn i vad som händer inuti dina containrar.

Viktig övervakningspraxis

  • Centraliserad loggning: Skicka containerloggar till ett centralt system. Stdout/stderr bör fånga tillräckligt för felsökning och säkerhetsanalys.
  • Körtidssäkerhetsverktyg: Verktyg som Falco kan upptäcka oväntat beteende: processer som startar skalkommandon, oväntade nätverksanslutningar, filändringar.
  • Resursövervakning: Ovanliga CPU- eller minnestoppar kan tyda på kryptomining eller annan kompromiss.
  • Registerskanning: Skanna ditt image-register kontinuerligt, inte bara vid byggen. Nya CVE:er upptäcks dagligen.

Checklista för containersäkerhet

Använder officiella, minimala bas-images
Skannar images efter sårbarheter
Kör containrar som icke-root
Tar bort onödiga capabilities
Använder skrivskyddade filsystem
Sätter resursbegränsningar
Isolerar nätverk på rätt sätt
Hanterar hemligheter säkert
Håller värd och Docker uppdaterade
Övervakar containeraktivitet

Kom igång

Containersäkerhet handlar inte om att implementera allt på en gång. Börja med det som ger störst effekt: skanna dina images, kör som icke-root och hantera hemligheter korrekt. Lägg sedan till ytterligare kontroller i takt med att din infrastruktur mognar.

Målet är inte perfekt säkerhet, utan försvar på djupet. Flera lager av skydd innebär att när (inte om) en kontroll fallerar, finns andra som fångar upp hotet.

Behöver du hjälp med att säkra din containerinfrastruktur? Vi specialiserar oss på att bygga säkra, egenhostade Docker-miljöer med korrekt isolering, övervakning och efterlevnadskontroller.