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
Abschnitt betitelt „Socket Firewall Free“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
Installation im Dockerfile
Abschnitt betitelt „Installation im Dockerfile“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 rootARG SFW_VERSION=v1.6.1
ADD https://github.com/SocketDev/sfw-free/releases/download/${SFW_VERSION}/sfw-free-linux-arm64 ./sfwRUN chmod +x ./sfwRUN mv ./sfw /usr/local/bin/sfw
USER nodeWichtig: Die URL muss zur Host-Architektur passen:
sfw-free-linux-x86_64für x86_64/amd64sfw-free-linux-arm64für ARM64 (Apple Silicon)
Dieser Ansatz basiert auf dem offiziellen Dockerfile-Beispiel von Socket für Enterprise, angepasst für die Free-Version.
Installation als root-User
Abschnitt betitelt „Installation als root-User“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
Verwendung
Abschnitt betitelt „Verwendung“Socket Firewall wird als Prefix sfw vor npm-Befehle gesetzt:
sfw npm ciIn 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 "$@" ' --NPM-Cache und Socket Firewall
Abschnitt betitelt „NPM-Cache und Socket Firewall“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 depsstartet der Container ohne NPM-Cache - Alle Packages müssen über das Netzwerk geladen werden → Socket Firewall kann sie prüfen
Runtime-Cache
Abschnitt betitelt „Runtime-Cache“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.
Telemetrie
Abschnitt betitelt „Telemetrie“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.
Auswirkungen der Container-Härtung
Abschnitt betitelt „Auswirkungen der Container-Härtung“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
Alternativen
Abschnitt betitelt „Alternativen“Docker Hardened Images (DHI)
Abschnitt betitelt „Docker Hardened Images (DHI)“Docker bietet kostenlose Hardened Images mit vorinstalliertem Socket Firewall an:
FROM dhi.io/node:22-debian13-sfwFootnotes
Abschnitt betitelt „Footnotes“-
Kein API-Key erforderlich ↩
-
Keine Unterstützung für private Registries in der Free-Version ↩
-
Ü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 ↩