Zum Inhalt springen

Dependencies Docker Image

Für die deps- und deps-update-Container wird ein separates Docker Image genutzt.

Dabei wird Socket Firewall Free im Dockerfile installiert und steht anschließend als CLI im Container zur Verfügung.


Socket Firewall Free ist ein kostenloses1 Tool, das den Package-Manager-Traffic überwacht und bösartige Packages blockiert, bevor sie heruntergeladen werden.

  • Fängt Netzwerk-Requests von npm/yarn/pnpm ab
  • Prüft Packages2 gegen Socket’s Security-Datenbank
  • Blockiert bekannte Malware-Packages
  • Warnt bei AI-detektierten, aber noch nicht bestätigten Bedrohungen
  • Schützt vor Supply-Chain- / Typosquatting-Angriffen
  • Erkennt bösartige transitive Dependencies

Die Installation3 erfolgt durch direkten Download des Binaries von GitHub Releases. Die Version wird dabei gepinnt, um Reproduzierbarkeit zu gewährleisten und unerwartete Änderungen durch /latest/ zu vermeiden.

Dockerfile.deps

FROM node:22-bookworm-slim
USER root
ARG SFW_VERSION=v1.6.1
ADD https://github.com/SocketDev/sfw-free/releases/download/${SFW_VERSION}/sfw-free-linux-arm64 ./sfw
RUN chmod +x ./sfw
RUN mv ./sfw /usr/local/bin/sfw
USER node

Wichtig: Die URL muss zur Host-Architektur passen:

  • sfw-free-linux-x86_64 für x86_64/amd64
  • sfw-free-linux-arm64 für ARM64 (Apple Silicon)

Dieser Ansatz basiert auf dem offiziellen Dockerfile-Beispiel von Socket für Enterprise, angepasst für die Free-Version.

Die Installation erfolgt bewusst als root-User. Anschließend wird in den node-User gewechselt, sodass Socket Firewall zur Laufzeit nicht mit Root-Rechten ausgeführt wird.

Vorteil:

Das installierte Binary gehört root und ist damit für den node-User nicht veränderbar. In einem gehärteten Container erhöht dies die Integrität des global installierten Tools.

Ein möglicher Angriffspunkt ohne diese Einschränkung wäre, dass kompromittierter Anwendungscode zur Laufzeit das sfw-Binary überschreiben oder manipulieren könnte.


Socket Firewall Free steht unter der PolyForm Shield License.

Die Nutzung in eigenen Projekten, die auf dieser Guideline oder dem Referenzprojekt basieren, muss eigenverantwortlich geprüft und bewertet werden.

Detaillierte Lizenzbedingungen: https://github.com/SocketDev/sfw-free#license


Socket Firewall wird als Prefix sfw vor npm-Befehle gesetzt:

Terminal-Fenster
sfw npm ci

In der compose.yml werden die Commands entsprechend angepasst:

deps:
command: >
bash -lc '
GITHUB_AUTH_TOKEN="$(cat /run/secrets/github_auth_token)" exec sfw npm ci --ignore-scripts
'
deps-update:
entrypoint: >
bash -lc '
GITHUB_AUTH_TOKEN="$(cat /run/secrets/github_auth_token)" exec sfw npm i --ignore-scripts "$@"
' --

Socket Firewall Free funktioniert nur bei Netzwerk-Requests - gecachte Packages werden nicht geprüft.

In der Architektur dieser Guideline ist das kein Problem:

  • Der deps-Container ist ephemer (--rm) und wird nach jeder Nutzung gelöscht
  • Der NPM-Cache liegt in /tmp (tmpfs) und existiert nur während der Container-Laufzeit
  • Bei jedem docker compose -f .devcontainer/compose.yml run --rm deps startet der Container ohne NPM-Cache
  • Alle Packages müssen über das Netzwerk geladen werden → Socket Firewall kann sie prüfen

Socket Firewall nutzt /tmp für temporäre Dateien während der Ausführung.

Da /tmp in der x-deps-base bereits in der compose.yml als tmpfs gemountet ist, funktioniert dies ohne zusätzliche Konfiguration.


Socket Firewall Free sammelt anonyme Nutzungsdaten:

  • Machine-Identifier
  • Installierte Package-Namen und Versionen
  • Performance-Metriken
  • GitHub Organisation (aus Git Remotes)

Die Telemetrie ist in der Free-Version nicht abschaltbar.

Durch die Container-Konfiguration wird die Telemetrie zusätzlich eingeschränkt:

  • Das .git-Verzeichnis ist durch tmpfs überlagert → kein GitHub Organization Name kann ausgelesen werden
  • Der Container ist ephemer (--rm) → Machine-Identifier wird bei jedem Lauf neu generiert

Docker bietet kostenlose Hardened Images mit vorinstalliertem Socket Firewall an:

FROM dhi.io/node:22-debian13-sfw
  1. Kein API-Key erforderlich

  2. Keine Unterstützung für private Registries in der Free-Version

  3. Übernommen von https://docs.socket.dev/docs/socket-firewall-free#linux-arm64 in Kombination mit https://docs.socket.dev/docs/socket-firewall-enterprise-proxy-service-setup#docker-deployment