Intrusion Detection für Kubernetes-Nodes
Zuletzt aktualisiert:
Jeder Kubernetes-Node ist auch ein Linux-Server: mit SSH, einer Kernel-Firewall, Systemdateien und oft einem Ingress-Controller, der Verkehr aus dem Internet annimmt. Das Helm-Chart von InfraFence bringt den Agent auf jeden Node, damit jeder Node überwacht und verteidigt wird wie jeder andere Server in deinem Dashboard.
Diese Seite sagt, was der Agent auf einem Node abdeckt und was nicht. Die eigenen Sicherheitsmechanismen von Kubernetes ersetzt er nicht.
Wie er läuft
- Das Chart startet den Agent als DaemonSet: ein Pod auf jedem Node, Control Plane eingeschlossen, ausgerollt Node für Node.
- Ein Cluster-Schlüssel registriert jeden Node. Du erstellst ihn im Dashboard unter Einstellungen › Kubernetes; er beginnt mit
IFK-und wird nur einmal angezeigt. Wird er widerrufen, können keine neuen Nodes mehr beitreten; registrierte Nodes laufen weiter. - Jeder Node erscheint im Dashboard als eigener Server, gruppiert nach Clustername. Starter deckt einen Server ab, also kann sich nur ein Node registrieren; ab Basic gibt es keine Grenze, abgerechnet wird ein Server pro Node.
helm install infrafence-agent oci://ghcr.io/infrafence/charts/infrafence-agent \
--namespace infrafence --create-namespace \
--set apiKey="IFK-..." \
--set clusterName="production"Voraussetzungen: Kubernetes 1.22 oder neuer und Helm 3. Das Dashboard zeigt denselben Befehl mit deinem Schlüssel schon eingesetzt. Values, Upgrades und Deinstallation stehen unter Kubernetes.
Was er auf einem Node abdeckt
| Bereich | Was der Agent tut |
|---|---|
| SSH und der Node selbst | Liest die Logs des Nodes aus /var/log, stoppt SSH-Brute-Force und bewertet SSH-Sitzungen nach Risiko. Sperren landen in den iptables des Nodes, in den eigenen Chains des Agents. |
| Ingress-Verkehr | Findet die Pods von ingress-nginx und Traefik auf dem Node und liest ihre Access-Logs unter /var/log/pods, mit denselben Regeln gegen Web-Angriffe wie auf jedem Server. Traefik schreibt kein Access-Log, bis du es einschaltest. |
| Pods auf dem Node | Meldet über die Kubernetes-API, mit Lesezugriff, die Pods auf seinem Node und die Ingress-Hosts des Clusters. Crash-Loops, OOM-Kills, fehlgeschlagene Image-Pulls und Evictions von Pods auf seinem Node gehen als Ereignisse ans Dashboard. |
| Ausgehend, DNS, Dateien | Überwacht Verbindungen, die den Node verlassen, DNS-Antworten, Malware und die Integrität der Systemdateien, wie auf jedem Linux-Server. |
| Updates | Mit autoUpdate.enabled prüft ein Agent, der aktualisieren darf, die cosign-Signatur des neuen Images und stellt sein eigenes DaemonSet per Digest darauf um. |
Was er nicht abdeckt
- Pod-Verkehr läuft womöglich nicht durch die Firewall-Regeln des Nodes. Sperren greifen dort, wo Verkehr den Node selbst erreicht (SSH, Dienste des Hosts, Pods im Host-Netzwerk wie ein Ingress-Controller mit
hostNetwork). Verkehr, den das CNI-Plugin oder kube-proxy an Pods weiterleitet, läuft womöglich nicht durch INPUT oder DOCKER-USER, wo die Regeln des Agents liegen. Das Dashboard weist auf der Seite des Nodes darauf hin. - Keine Regeln im Cluster. Der Agent schreibt keine NetworkPolicies, keine Sperrlisten im Ingress und keine CNI-Regeln: Sperren bleiben in den iptables des Nodes.
- Kein Admission Controller und keine Überwachung von Systemaufrufen zur Laufzeit. Er prüft keine Manifeste, bevor sie laufen, und verfolgt keine Systemaufrufe in Containern. Die eigenen Mechanismen von Kubernetes, etwa RBAC und NetworkPolicies, bleiben deine Aufgabe.
- Er braucht privilegierte Pods mit Host-Netzwerk. Ein verwalteter Cluster, der sie verbietet, kann das Chart nicht ausführen.
- Sperren, die Whitelist und Ländersperren gelten für IPv4.
Was das Chart bereitstellt
- Ein DaemonSet mit Host-Netzwerk, dem PID-Namespace des Hosts und privilegierten Pods, die der Agent braucht, um die Firewall des Nodes zu verwalten und seine Prozesse zu sehen.
- Einen ServiceAccount, der Pods, Nodes, Events, Namespaces, ConfigMaps, Ingresses und NetworkPolicies lesen darf, dazu get und patch auf DaemonSets, die der Agent nur nutzt, um sein eigenes zu aktualisieren.
- Ein Secret mit dem Cluster-Schlüssel.
- Host-Mounts:
/var/logund die Sockets von Docker und containerd nur lesend,/etc/infrafencelesend und schreibend für die Registrierung des Nodes.
Der Quellcode des Charts liegt im Repository des Agents: charts/infrafence-agent. Wenn ArgoCD oder Flux den Cluster verwaltet, schalte die Selbst-Updates ab und erhöhe stattdessen das Image-Tag in deinem Repository:
autoUpdate:
enabled: falseJedes Release veröffentlicht außerdem infrafence-agent-linux-amd64-k8s und infrafence-agent-linux-arm64-k8s: den Agent, gebaut mit dem Kubernetes-Client wie im Image des Charts, signiert wie jedes Release (Ein Release prüfen). Seine Kubernetes-Funktionen schalten sich nur ein, wenn er in einem Pod läuft. Für einen einzelnen Docker-Host siehe Einen Docker-Host absichern.
Fragen
- Zählt jeder Node als Server?
- Ja. Jeder Node registriert sich als eigener Server und wird ab Basic als einer abgerechnet. Mit Starter kann sich nur ein Node registrieren.
- Was passiert, wenn ein Node neu aufgesetzt wird?
- Ein Node, der sich erneut registriert, nach einem Neuaufbau oder einem gelöschten
/etc/infrafence, behält seinen Server im Dashboard und bekommt ein neues Token. - Kann ich ihn mit ArgoCD oder Flux betreiben?
- Ja. Setz
autoUpdate.enabledauffalse, damit der Agent sein eigenes DaemonSet nicht ändert, und aktualisiere das Image-Tag in deinem Repository.
Kostenlos auf 1 Server testen
Starter schützt einen Server vollständig, kostenlos und ohne Kreditkarte.
- 01
Erstelle ein kostenloses Konto und öffne dann Server › Server hinzufügen, um dein Installations-Token zu erhalten. Es ist eine Stunde gültig.
Token erstellen - 02
Führe dann als root auf dem Server aus:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>
