InfraFenceInfraFence

Live Security Operations

Loslegen

Docker

Den InfraFence-Agenten als Docker-Container betreiben, der seinen Host schützt: das Image, die nötigen Rechte und Mounts und jede Umgebungsvariable.

Zuletzt aktualisiert:

Der Agent läuft auch als Container, der seinen Host schützt. Das Image ist Multi-Architektur (amd64 und arm64), wird mit jedem Release veröffentlicht und mit cosign signiert.

  • ghcr.io/infrafence/infrafence-agent:latest oder ein Versions-Tag wie ghcr.io/infrafence/infrafence-agent:<version>
  • dasselbe Image auf Docker Hub als infrafence/infrafence-agent

docker run

bash
docker run -d --name infrafence-agent --restart unless-stopped \
  --privileged --network host --pid host \
  -v /var/log:/var/log:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v infrafence-config:/etc/infrafence \
  -e INFRAFENCE_TOKEN=<YOUR_TOKEN> \
  ghcr.io/infrafence/infrafence-agent:latest

Wozu jeder Teil nötig ist:

  • --privileged, --network host: Der Agent verwaltet die Firewall des Hosts (iptables und ipset) und liest den Netzwerkzustand des Hosts.
  • --pid host: Er sieht die Prozesse des Hosts, für die Erkennung von Malware-Prozessen und die Zuordnung von DNS-Anfragen.
  • /var/log schreibgeschützt: die Logs, die er analysiert.
  • der Docker-Socket schreibgeschützt: um die Container zu finden, deren Ports und Logs er schützen soll.
  • /etc/infrafence in einem benannten Volume: Die Registrierung übersteht Upgrades des Containers. Das Token wird einmal verwendet; spätere Starts nutzen die gespeicherte Registrierung.

Umgebungsvariablen

Variable Standard Wirkung
INFRAFENCE_TOKEN Das Installations-Token, für die erste Registrierung.
INFRAFENCE_TOKEN_FILE Eine Datei mit dem Token, für Docker Secrets.
INFRAFENCE_AGENT_NAME der kurze Hostname Der Name im Dashboard.
INFRAFENCE_SERVER_URL https://infrafence.com Das Dashboard, bei dem registriert wird.

Auch jede der eigenen Variablen des Agenten (siehe Konfiguration), etwa WEB_LOG_PATH, lässt sich mit -e übergeben.

Ohne Token, Token-Datei oder Cluster-Schlüssel beim ersten Start bricht der Container mit [infrafence] ERROR: No credentials provided for registration. ab.

Docker Compose

Jeder Host braucht sein eigenes Installations-Token, wie jeder andere Server.

yaml
services:
  infrafence-agent:
    image: ghcr.io/infrafence/infrafence-agent:latest
    container_name: infrafence-agent
    restart: unless-stopped
    privileged: true
    network_mode: host
    pid: host
    environment:
      - INFRAFENCE_TOKEN=${INFRAFENCE_TOKEN}
    volumes:
      - /var/log:/var/log:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - infrafence-config:/etc/infrafence

volumes:
  infrafence-config:
bash
INFRAFENCE_TOKEN=<YOUR_TOKEN> docker compose up -d

Container auf dem Host

Auf einem Host, auf dem Docker läuft, springt der Agent auch von DOCKER-USER in seine Firewall-Chain, sodass die Sperren auch die Ports abdecken, die deine Container veröffentlichen. Ein mit install.sh auf dem Host installierter Agent findet außerdem die Zugriffslogs von Web-Containern (Images von nginx, Apache und OpenResty; zu Traefik und Caddy siehe unten) und liest diese Labels an deinen Containern:

Label Wirkung
infrafence.monitor true, um die Logs des Containers immer zu überwachen, false, um ihn auszulassen.
infrafence.log-path Host-Pfade seiner Zugriffslogs, durch Kommas getrennt.
infrafence.domain Seine Domains, durch Kommas getrennt.

Die Erkennung der Container nutzt das Kommandozeilen-Tool docker, das im Image des Agenten nicht enthalten ist: Im Container zeigst du dem Agenten die Logs stattdessen mit WEB_LOG_PATH.

Domains hinter einem Reverse Proxy

Ab Agent 1.0.35 listet der Agent auch die Domains deiner laufenden Container aus den Labels auf, die ihr Reverse Proxy liest, über den Docker- oder Podman-Socket (nur lesend, alle 2 Minuten aktualisiert, auch im Container des Agenten):

  • Traefik-Router-Regeln, traefik.http.routers.<name>.rule: jedes Host(...) der Regel. HostRegexp und Pfadregeln werden übersprungen.
  • Caddy-Site-Adressen, caddy und caddy_0, caddy_1...
  • infrafence.domain.

Genau das schreibt Coolify für seinen Proxy (coolify-proxy, Traefik oder Caddy), ein Coolify-Server braucht also kein Label. Die Domains erscheinen unter Überwachen › Monitoring-Badge, wo sie über einen DNS-TXT-Eintrag verifiziert werden, da die Website keinen Document Root auf dem Host hat: siehe Monitoring-Badge. Der Agent führt im Proxy-Container nie etwas aus; die JSON-Zugriffslogs von Traefik oder Caddy liest er nicht.

Weitere Befehle

Das Image führt jeden Befehl des Agenten aus, den du ihm gibst, zum Beispiel die rein lesende Prüfung:

bash
docker run --rm --privileged --network host --pid host ghcr.io/infrafence/infrafence-agent:latest preflight