Nur für unsere Blog-Besucher: Zusätzlich 3 Monate gratis + 10 % Rabatt auf den Dreijahresplan YSBLOG10
Schnapp dir den Deal

Wie man Docker auf einem Linux-Server überwacht und absichert – Eine einfache Anleitung

Letzte Aktualisierung: Oktober 15, 2026 9 min gelesen Prahlad Prajapati
Docker unter Linux überwachen und absichern

Um Docker auf einem Linux-Server zu überwachen und abzusichern , implementieren Sie einen Metrik-Stack (cAdvisor + Prometheus + Grafana), zentralisieren Sie Container-Logs und aktivieren Sie Audit-Ereignisse. Härten Sie Docker anschließend durch das Prinzip der minimalen Berechtigungen (Entzug von Berechtigungen, keine Berechtigungen), AppArmor/SELinux, seccomp, rootlose oder Benutzer-Namespaces, schreibgeschützte Dateisysteme, Netzwerkkontrollen, Image-Scanning (Trivy) und automatisierte Warnmeldungen.

Die Verwaltung von Containern in der Produktion beginnt mit Transparenz und Schutz. In diesem Leitfaden erfahren Sie, wie Sie Docker auf einem Linux-Server überwachen und absichern – mit einem praktischen, schrittweisen Workflow, den wir auch bei realen Kundenumgebungen einsetzen. Wir kombinieren ressourcenschonendes Monitoring mit gehärteten Laufzeiteinstellungen, damit Sie Probleme proaktiv erkennen und Risiken minimieren können, ohne die Bereitstellung zu verlangsamen. Dieselben Schritte funktionieren sowohl auf Ihrer eigenen Hardware als auch auf Docker-VPS-Hosting.

Unser Hauptaugenmerk liegt klar auf der Überwachung und Absicherung von Docker-Umgebungen auf Linux-Servern mit bewährten Tools und Konfigurationen, die dem CIS Docker Benchmark und modernen Cloud-nativen Sicherheitspraktiken entsprechen. Wenn Sie Docker auf Ubuntu-, Debian- oder RHEL-basierten Distributionen einsetzen, ist dies Ihre Anleitung.

Was Sie einrichten werden (auf einen Blick)

  • Metriken: cAdvisor + Prometheus + Grafana Dashboards
  • Protokolle: Docker-Logrotation + zentrale Aggregation (Fluent Bit/Loki oder syslog)
  • Veranstaltungen & Audits: Docker-Ereignisse, Linux auditd und optionale Laufzeiterkennung mit Falco
  • Härten: Benutzer-Namespaces/Rootless, Seccomp, AppArmor/SELinux, minimale Berechtigungen, schreibgeschütztes Dateisystem
  • Lieferkette: Bildscanning (Trivy), signierte Bilder (Cosign), SBOMs (Syft)
  • Richtlinien & Warnungen: Aufmerksammanager-Regeln, CI-Image-Scanning, regelmäßige Docker Bench-Prüfungen

Voraussetzungen:

  • Linux-Host: Ubuntu 22.04/24.04, Debian 12 oder RHEL 8/9
  • Docker Engine 24+ (oder Moby) mit systemd
  • Grundlegende Linux-Shell-Kenntnisse und sudo-Zugriff
  • Ausgehende Internetverbindung zum Abrufen von Bildern und Senden von Warnmeldungen/Protokollen

Docker überwachen: Einen schlanken, zuverlässigen Stack aufbauen

1) Container- und Host-Metriken mit cAdvisor + Prometheus erfassen

cAdvisor legt Container frei CPUSpeicher-, Dateisystem- und Netzwerkmetriken werden erfasst und gespeichert; Prometheus visualisiert und alarmiert die Daten. Diese Kombination ist branchenüblich und ressourcenschonend.

# Run cAdvisor to expose metrics on :8080
sudo docker run -d 
  --name=cadvisor 
  --restart=always 
  --volume=/:/rootfs:ro 
  --volume=/var/run:/var/run:ro 
  --volume=/sys:/sys:ro 
  --volume=/var/lib/docker/:/var/lib/docker:ro 
  --publish=8080:8080 
  gcr.io/cadvisor/cadvisor:latest

# Run Prometheus configured to scrape cAdvisor
cat > prometheus.yml <<'EOF'
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: "cadvisor"
    static_configs:
      - targets: ["localhost:8080"]
EOF

sudo docker run -d 
  --name=prometheus 
  --restart=always 
  -p 9090:9090 
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml:ro 
  prom/prometheus:latest

# Grafana for dashboards
sudo docker run -d 
  --name=grafana 
  --restart=always 
  -p 3000:3000 
  grafana/grafana:latest

Importieren Sie Community-Dashboards wie „Docker- und Systemüberwachung“ in Grafana. Fügen Sie eine Warnung hinzu.manager zu Feueralarmen (CPU Drosselung, OOM-Kills, Container-Neustarts, Festplattenauslastung > 80%.

2) Zentralisierung der Protokolle durch Rotation und Aggregation

Aktivieren Sie die Protokollrotation pro Container, um ein Überlaufen der Festplatte zu verhindern. Der „lokale“ Protokolltreiber ist effizient und unterstützt die größenbasierte Rotation.

# /etc/docker/daemon.json
{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  }
}
# Apply changes
sudo systemctl restart docker

Für die zentrale Protokollierung werden die Daten an Fluent Bit weitergeleitet und an Loki/Elasticsearch oder an syslog/SIEM gestreamt. Dies ermöglicht die Suche nach Vorfällen und forensischen Analysen.

3) Docker-Ereignisse und Linux-Audit-Logs verfolgen

Docker sendet Ereignisse für den Container-Lebenszyklus und Image-Downloads. Leiten Sie diese an Ihr SIEM- oder Alarmsystem weiter.

# Stream events (optionally pipe to a log collector)
sudo docker events --format '{{json .}}'

Aktivieren Sie auditd, um Docker-Binärdateien und Statusverzeichnisse zu überwachen. Dadurch werden unautorisierte Änderungen und verdächtige Aktivitäten auf dem Host sichtbar.

# /etc/audit/rules.d/docker.rules
-w /usr/bin/dockerd -p x -k docker
-w /usr/bin/docker -p x -k docker
-w /etc/docker/ -p wa -k docker
-w /var/lib/docker/ -p wa -k docker

# Load rules
sudo augenrules --load
sudo systemctl restart auditd

Sicherheitshärtung: Eine praktische Grundlage für Docker unter Linux

1) Halten Sie den Host minimal und aktuell.

  • Kernel und Docker Engine regelmäßig patchen.
  • Verwenden Sie ein minimales Betriebssystemprofil; entfernen Sie nicht verwendete Pakete und Compiler.
  • Einschränkung SSH Zugriff einschränken, Root-Login deaktivieren und, wo möglich, MFA erzwingen.

2) Docker-Daemon-Standardeinstellungen härten

Legen Sie sichere Standardeinstellungen fest, sodass jeder Container mit minimalen Berechtigungen und guter Hygiene startet.

# /etc/docker/daemon.json (hardened defaults)
{
  "icc": false,
  "no-new-privileges": true,
  "userns-remap": "default",
  "live-restore": true,
  "log-driver": "local",
  "log-opts": { "max-size": "10m", "max-file": "5" },
  "default-ulimits": { "nproc": { "Name": "nproc", "Hard": 4096, "Soft": 4096 } },
  "features": { "buildkit": true },
  "iptables": true
}
# Restart Docker
sudo systemctl daemon-reload && sudo systemctl restart docker

Erläuterung: Benutzer-Namespaces reduzieren die Container-zu-Host-Berechtigungen, no-new-privileges verhindert die Rechteausweitung, live-restore hält Container während Daemon-Upgrades am Laufen und ICC=false deaktiviert die Kommunikation zwischen Containern über die Standardbrücke.

3) Bevorzugt werden Container ohne Root-Rechte oder neu zugeordnete (Benutzer-)Container.

Rootless Docker führt den Daemon als Benutzer ohne Root-Rechte aus; Benutzer-Namespaces ordnen Root innerhalb des Containers einer Host-UID ohne Root-Rechte zu. Beides reduziert die Auswirkungen erheblich, falls ein Container kompromittiert wird.

# Quick check of user namespaces status
grep -E "userns-remap" /etc/docker/daemon.json || echo "Enable userns-remap for stronger isolation"

4) Seccomp und AppArmor/SELinux erzwingen

Verwenden Sie das standardmäßige seccomp-Profil von Docker (blockiert gefährliche Systemaufrufe). Aktivieren Sie AppArmor (Ubuntu/Debian) bzw. SELinux (RHEL). Erstellen Sie benutzerdefinierte Profile für sensible Workloads.

# Example run flags (non-root, least capability, syscall and LSMS)
docker run -d --name web 
  --read-only 
  --pids-limit 200 
  --cpus="1.0" --memory="512m" 
  --security-opt no-new-privileges 
  --security-opt seccomp=default 
  --cap-drop ALL --cap-add NET_BIND_SERVICE 
  -u 10001:10001 
  -v /srv/web/static:/srv/web/static:ro 
  -p 80:8080 myorg/web:1.0.0

5) Verwenden Sie schreibgeschützte Dateisysteme und enge Volume-Einbindungen.

  • Das Root-Dateisystem soll schreibgeschützt werden; nur die notwendigen beschreibbaren Pfade sollen eingebunden werden (tmpfs für /tmp).
  • Vermeiden Sie es, den Docker-Socket in Container einzubinden.
  • Verwenden Sie explizite, minimale Bind-Mounts und setzen Sie :ro, wenn möglich.

6) Netzwerksegmentierungs- und Firewall-Regeln

  • Intercontainer-Kommunikation deaktivieren (ICC=false) und benutzerdefinierte Docker-Netzwerke pro Anwendungsgrenze verwenden.
  • Beschränken Sie eingehende Ports mit iptables/nftables oder UFW; beschränken Sie ausgehenden Datenverkehr auf sensible Workloads.
  • TLS an einem gehärteten Reverse-Proxy (z. B. Nginx, Traefik) mit modernen Chiffren.

7) Geheimnisse management

  • Speichern Sie keine Geheimnisse in Images oder Umgebungsvariablen.
  • Geheimnisse preisgeben über schreibgeschützte Dateien (tmpfs) oder externe Geheimnisspeicher (Vault, SOPS, Cloud-KMS).
  • Beschränken Sie den Zugriff auf Container-Laufzeitkonfigurationen und -Protokolle.

8) Lieferkettensicherheit: Scannen, Signieren und SBOM

Bilder auf CVEs prüfen, signieren und SBOMs zur Nachverfolgung von Abhängigkeiten hinzufügen. Richtlinien zum Blockieren ungescannter/unsignierter Bilder durchsetzen.

# Scan images for vulnerabilities (CI-friendly)
trivy image myorg/web:1.0.0

# Generate SBOM
syft myorg/web:1.0.0 -o json > sbom.json

# Sign image (keyless or with key) using cosign
cosign sign myorg/web:1.0.0
cosign verify myorg/web:1.0.0

Setzen Sie Falco ein, um verdächtige Systemaufrufe und Containerverhalten (Krypto-Mining, Namespace-Escapes, unerwartete Shell-Starts) zu erkennen. Senden Sie Benachrichtigungen an Slack, E-Mail oder SIEM.

Umsetzung: Richtlinien, Warnmeldungen und regelmäßige Überprüfungen

  • Prometheus-Warnungen: Container-Neustarts > N, OOM-Kills, CPU Drosselung, Festplattenauslastung > 80 %, hohe 5xx-Fehlerrate.
  • CI/CD-Gates: Blockiert Images mit kritischen CVEs; erfordert eine Signaturprüfung.
  • Monatlich: Docker Bench for Security ausführen; Audit-Logs und Falco-Warnungen überprüfen.
  • Vierteljährlich: Geheimnisse rotieren, ungenutzte Images entfernen, Basis-Images aktualisieren.
# Run Docker Bench for Security (read-only mounts)
docker run --rm -it --net host --pid host --userns=host 
  --cap-add audit_control 
  -v /etc:/etc:ro 
  -v /usr/bin/docker:/usr/bin/docker:ro 
  -v /var/lib:/var/lib:ro 
  -v /var/run/docker.sock:/var/run/docker.sock:ro 
  -v /usr/lib/systemd:/usr/lib/systemd:ro 
  -v /etc/os-release:/etc/os-release:ro 
  docker/docker-bench-security

Optimierung hinsichtlich Leistung und Kosten

  • Stelle den CPU und Speicherbegrenzungen, um störende Nachbardateien zu vermeiden und die Dashboards übersichtlich zu halten.
  • Reduzieren Sie die Abfrageintervalle für fehleranfällige Ziele; deaktivieren Sie unnötige Exporter.
  • Verwenden Sie den „lokalen“ Docker-Log-Treiber mit Rotation, um die Festplattenaktivität zu minimieren; leiten Sie nur das weiter, was Sie benötigen.
  • Grafana-Dashboards konsolidieren und Metriken/Indizes nach einem Zeitplan archivieren.

Validierung: Schnelle Sicherheits- und Überwachungsprüfungen

  • Führen Sie einen Testcontainer aus und überprüfen Sie die Grenzwerte: Prüfen Sie die Cgroup-Metriken in Grafana nach dem Stresstest. CPU/Erinnerung.
  • Lösen Sie eine harmlose Warnung aus (z. B. durch wiederholtes Neustarten eines Containers) und bestätigen Sie die Warnung.manager Lieferung.
  • Überprüfen Sie die Benutzer-Namespaces: Innerhalb des Containers sollte die id nicht auf das Host-Root-Verzeichnis abgebildet werden; überprüfen Sie /proc/self/uid_map.
  • Überprüfen Sie mithilfe von docker inspect und dmesg/audit-Protokollen, ob AppArmor/SELinux-Erzwingung und seccomp aktiv sind.

Häufige zu vermeidende Fehler

  • Container werden standardmäßig mit –privilegierten Rechten ausgeführt.
  • Den Docker-Socket für Container oder über das Netzwerk zugänglich machen.
  • Überspringen der Protokollrotation und des Füllens der Festplatten.
  • Verwendung der neuesten Tags ohne Versionsfixierung und Signaturrichtlinien.
  • Vergessen, Schreibvorgänge im Dateisystem zu begrenzen oder ungesicherte Bind-Mounts zu belassen.
  • Vermeiden Sie die Alarmmüdigkeit: Erstellen Sie gezielte, aussagekräftige Alarme anstatt Dutzender irrelevanter Alarme.

Praktische Beispiele: Sichere Container-Ausführungsvorlagen

# Web service with least privilege and resource limits
docker run -d --name api 
  --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m 
  --pids-limit 300 --cpus="2" --memory="1g" --memory-swap="1g" 
  --cap-drop ALL --cap-add NET_BIND_SERVICE 
  --security-opt no-new-privileges 
  -u 10001:10001 
  -v /srv/api/config:/app/config:ro 
  -p 443:8443 myorg/api:2.3.1

# Worker without network access (on a private network only)
docker network create --internal jobs
docker run -d --name worker 
  --network jobs 
  --read-only --pids-limit 200 
  --cpus="1" --memory="512m" 
  --cap-drop ALL 
  --security-opt no-new-privileges 
  -u 10002:10002 
  -v /srv/queue:/queue:ro 
  myorg/worker:1.9.0

Häufig gestellte Fragen: Docker unter Linux überwachen und absichern

1. Wie lassen sich Docker-Container auf einem Linux-Server am besten überwachen?

Nutzen Sie cAdvisor für Container-Ressourcenmetriken, scrapen Sie mit Prometheus und visualisieren Sie diese in Grafana. Fügen Sie eine Warnung hinzu.manager für Benachrichtigungen und optionalen Export von Protokollen nach Loki oder Elasticsearch. Diese Konfiguration ist ressourcenschonend, weit verbreitet und mit Exportern (node_exporter, blackbox_exporter) erweiterbar.

2. Wie sichere ich Docker-Container in der Produktion?

Setzen Sie das Prinzip der minimalen Rechtevergabe ein (keine Rechte, Einschränkungen der Berechtigungen), erzwingen Sie seccomp und AppArmor/SELinux, verwenden Sie Benutzer-Namespaces oder den Rootless-Modus, machen Sie Dateisysteme schreibgeschützt, legen Sie Ressourcenlimits fest, beschränken Sie Netzwerke und vermeiden Sie das Mounten des Docker-Sockets. Ergänzen Sie die Verteidigung um Image-Scanning, Signaturen und Laufzeiterkennung für eine mehrschichtige Sicherheit.

3. Soll ich Docker ohne Root-Rechte oder Benutzer-Namespaces verwenden?

Beide Ansätze verbessern die Isolation. Rootless führt Docker ohne Root-Rechte auf dem Host aus; Benutzer-Namespaces ordnen den Container-Root einer Benutzer-ID ohne Root-Rechte zu. Wählen Sie Rootless, wenn möglich; andernfalls aktivieren Sie userns-remap und Benutzer ohne Root-Rechte pro Container, um die Auswirkungen zu minimieren.

4. Wie kann ich Docker-Images auf Sicherheitslücken überprüfen?

Integrieren Sie Trivy oder Grype in Ihre CI-Pipeline, um bei jedem Build und nach einem Zeitplan Scans durchzuführen. Kombinieren Sie dies mit der SBOM-Generierung (syft) und der Image-Signierung (cosign). Blockieren Sie die Bereitstellung von Images mit kritischen CVEs oder fehlenden Signaturen mithilfe von Zulassungs- oder CI-Richtlinien.

5. Welche häufigen Sicherheitslücken gibt es bei Docker unter Linux?

Ausführen als Root, Verwendung von `--privileged`, Freigeben des Docker-Sockets, laxer Volume-Mounts, keine Logrotation, Abrufen nicht fixierter letzter Tags und Ignorieren von AppArmor/SELinux und seccomp. Diese Faktoren erhöhen die Angriffsfläche und erschweren die Reaktion auf Sicherheitsvorfälle.

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit * gekennzeichnet.

Nach oben scrollen