Paperless NGX & Docker Sicherheit

Vog3lm4nn

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
357
Hallo Leute,

Letztes Wochenende habe ich mir auf einem Synology 224+ eine Paperless NGX Instanz im Container Manager als Projekt eingerichtet. Dafür nutze ich die YAML von Paperless eigener Webseite mit einigen eigenen Parametern.

Nach weiteren Recherchen wird in Foren oft die Sicherheit von Paperless angesprochen. Dazu einige Fragen:

  1. Paperless hat ein eigenes Netzwerk eingerichtet. Sind Paperless und die dazugehörigen Container (Redis, Postgres, Tika...) dadurch von anderen Container sicher getrennt. Ist Paperless damit NUR vom lokalen Netzwerk aus zu erreichen?
  2. Ist es in dieser Konfiguration notwendig die Kommunikation zwischen Redis, Postgres und Paperless mittels SSL zu verschlüsseln? Oder sind die Container entsprechend isoliert?
  3. Gibt es andere Sicherheitsbedenken?

Meine YAML um einen Eindruck zu geben (Passwörter und Usernames durch XXX ersetzt), Netzwerk und Container als Screenshot.

Code:
# Docker Compose file for running paperless from the docker container registry.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
#   as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this Docker Compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), PostgreSQL is used as the database server.
# - Apache Tika and Gotenberg servers are started with paperless and paperless
#   is configured to use these services. These provide support for consuming
#   Office documents (Word, Excel, Power Point and their LibreOffice counter-
#   parts.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
#   and '.env' into a folder.
# - Run 'docker compose pull'.
# - Run 'docker compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.

services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - redisdata:/data
    security_opt:
      - no-new-privileges:true
    environment:
      REDIS_ARGS: "--save 60 10"

  db:
    image: docker.io/library/postgres:16
    restart: unless-stopped
    volumes:
      - pgdata:/var/lib/postgresql/data
    security_opt:
      - no-new-privileges:true
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: xxx
      POSTGRES_PASSWORD: xxx

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - "8010:8000"
    security_opt:
      - no-new-privileges:true
    volumes:
      - /volume1/docker/paperless/data:/usr/src/paperless/data
      - /volume1/docker/paperless/media:/usr/src/paperless/media
      - /volume1/docker/paperless/export:/usr/src/paperless/export
      - /volume1/docker/paperless/consume:/usr/src/paperless/consume
    env_file: docker-compose.env
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBPASS: xxx
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: xxx
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      PAPERLESS_ADMIN_USER: xxx
      PAPERLESS_ADMIN_PASSWORD: xxx
      PAPERLESS_SECRET_KEY: xxx
    # PAPERLESS_EMPTY_TRASH_DIR: /volume1/docker/paperless/media
      PAPERLESS_OCR_LANGUAGE: nld+deu
      PAPERLESS_OCR_LANGUAGES: nld
      PAPERLESS_TASK_WORKERS: 2
      PAPERLESS_THREADS_PER_WORKER: 1
      USERMAP_UID: xxx
      USERMAP_GID: xxx

  gotenberg:
    image: docker.io/gotenberg/gotenberg:8.7
    restart: unless-stopped

    # The gotenberg chromium route is used to convert .eml files. We do not
    # want to allow external content like tracking pixels or even javascript.
    command:
      - "gotenberg"
      - "--chromium-disable-javascript=true"
      - "--chromium-allow-list=file:///tmp/.*"

  tika:
    image: docker.io/apache/tika:latest
    restart: unless-stopped

volumes:
  data:
  media:
  pgdata:
  redisdata:

Unabhängig davon. Empfehlt ihr noch andere Einstellungen zu ändern?

Vielen Dank schonmal!
 

Anhänge

  • Screenshot 2025-03-18 151524.png
    Screenshot 2025-03-18 151524.png
    13,2 KB · Aufrufe: 33
  • Screenshot 2025-03-18 151558.png
    Screenshot 2025-03-18 151558.png
    11,2 KB · Aufrufe: 32
Vor was genau willst du dich schützen? Der Angreifer muss ja erstmal in dein Netzwerk kommen bzw. da muss man in den Container bzw Endgeräte irgend ne schadsoftware haben.
 
  • Gefällt mir
Reaktionen: GTrash81 und madmax2010
1. Der Stack (Sammlung aller Container) hat ein eigenes Netzwerk. Mit
Code:
ports:
    - "8010:8000"
Gibst du den Zugang von außen (überall) auf Port 8000 des Containers webserver frei. Diesen erreichst du von außen auf Port 8010 von jedem Gerät was auf den Host, also deine Synology Port 8010 zugreifen darf.

2. Das Netzwerk ist rein intern. Die Kommunikation in dem Netzwerk ist somit "abgeschirmt". Es sei denn natürlich ein "böser" Container wird in das Netzwerk eingehängt.

Wenn du Punkt eins ändern möchtest könntest du z.B. Traefik als Reverse Proxy davorschalten. Da kannst du dann z.B. einstellen, dass nur gewisse IP-Adressen oder IP-Ranges auf deinen Paperless-Webserver zugreifen dürfen. Aber das erfordert etwas Arbeit und du musst dich da einlesen.

Solange deine NAS nur im LAN erreichbar ist, ist alles gut. Mit Traefik könntest du aber z.B. auch Https hinzufügen per Letsencrypt (wenn andere Vorraussetzungen erfüllt sind)
 
Danke für die Antworten!
Da ich bisher keinerlei Erfahrung mit Docker habe, hilft mir das auch schon 😁.
Das mit dem Reverse Proxy muss ich mal nachschauen. Damit könnte ich also den Zugriff auf bestimmte IPs im Netzwerk beschränken (zB nur einen Computer)?

Ich habe durch die Arbeit ein eigenes Zertifikat, da wollte ich sowieso mal schauen ob man damit gewisse Verbindungen sichern kann 🤔.
 
Ja, das wird es auch werden. Ich fuchs mich jetzt erst einmal in Paperless rein und danach wird ein reverse proxy aufgesetzt. Nach mehreren Vergleichen am ehesten Caddy.
 
Zurück
Oben