Sicherer Ersatz für Teams

Behalten Sie die Kontrolle über Ihre Daten mit Mattermost: Ein sicherer, selbstgehosteter Messaging-Dienst.

Sicherer Ersatz für Teams
Photo by Ed Hardie / Unsplash

In einer Zeit, in der Datenverletzungen und Cyberangriffe zur Tagesordnung gehören, suchen Unternehmen nach Lösungen, um die Kontrolle über ihre sensiblen Informationen zu behalten. Ich habe mir als sichere Alternative zu Teams Mattermost angeschaut. Es bietet eine Open-Source-Plattform für Teamkommunikation, die es Unternehmen ermöglicht, ihre Kommunikationsinfrastruktur selbst zu hosten und somit die Hoheit über ihre Daten zu wahren. Microsoft wurde bereits mehrfach Opfer von Angriffen. Bezüglich Teams erinnere ich mich an diese:

  1. Token-Hijacking durch GIFs: Forscher von CyberArk entdeckten eine Schwachstelle, die es Angreifern ermöglichte, Authentifizierungstoken zu stehlen, indem sie manipulierte GIF-Dateien oder Links in Teams-Chats verwendeten. Sobald ein Benutzer auf das GIF klickte oder es ansah, wurde das Token an einen Server des Angreifers gesendet, was eine vollständige Übernahme des Kontos ermöglichte. Diese Methode könnte automatisiert werden, um sich schnell in der Organisation auszubreiten und sensible Informationen zu stehlen.
  2. Zugriff auf private Daten durch Power Apps: Eine Sicherheitsanfälligkeit in Microsoft Teams erlaubte es Angreifern, auf private E-Mails, Nachrichten und OneDrive-Dateien zuzugreifen. Diese Schwachstelle nutzte die Microsoft Power Apps-Integration aus, und Angreifer konnten sich als Opfer ausgeben, um weitere soziale Ingenieurangriffe durchzuführen.
  3. Verbreitung von Malware: In einer Reihe von Angriffen wurde Microsoft Teams verwendet, um Malware zu verbreiten. Angreifer haben exe-Dateien in Teams-Chats eingebettet, die, wenn sie geöffnet wurden, Trojaner installierten, die die Kontrolle über die Computer der Benutzer übernahmen. Diese Angriffe nutzen oft gestohlene Anmeldedaten, um sich in die Teams-Umgebung einzuschleusen.
  4. Missbrauch von Teams für Phishing und Betrug: Hacker haben Microsoft Teams als Plattform für Phishing-Angriffe genutzt, indem sie sich als vertrauenswürdige Mitarbeiter ausgaben und auf gefälschte Links oder Dateien verwiesen, um Anmeldedaten zu stehlen oder Malware zu verteilen. Diese Angriffe sind besonders effektiv, da Benutzer oft eine höhere Vertrauensbasis gegenüber kommunikativen Plattformen wie Teams haben.

Mattermost stellt eine anpassbare und sichere Alternative zu proprietären Lösungen dar, die Unternehmen in die Lage versetzt, ihre Daten nicht nur zu schützen, sondern auch anpassbare Lösungen zu implementieren. Hier beschreibe ich die Integration von Mattermost in meine bekannte Webserver-Umgebung.

Eigener Webserver mit offiziellen Zertifikaten
Der Basis-Artikel für alle folgenden Services, die ich hier demonstrieren werde…

Vorbereitungen und Voraussetzungen

In dem oben genannten Artikel habe ich bereits beschrieben, wie man einen Webserver im Internet anbietet. Es ist ein sehr modularer Ansatz, dem ich bereits weitere Dienste hinzugefügt habe.

Mattermost der Umgebung hinzufügen

Ich habe aus der Dokumentation eine docker-compose.yml abgeleitet, die sich in meine Umgebung integrieren lässt:

  mattermost:
    image: mattermost/mattermost-team-edition:latest
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    pids_limit: 200
    read_only: false
    tmpfs:
      - /tmp
    depends_on:
      - postgres
    volumes:
      - ./mattermost/config:/mattermost/config:rw
      - ./mattermost/data:/mattermost/data:rw
      - ./mattermost/logs:/mattermost/logs:rw
      - ./mattermost/plugins:/mattermost/plugins:rw
      - ./mattermost/client/plugins:/mattermost/client/plugins:rw
      - ./mattermost/bleve-indexes:/mattermost/bleve-indexes:rw
    environment:
      - TZ=UTC
      - MM_SQLSETTINGS_DRIVERNAME=postgres
      - MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:TheSecretPassword@postgres:5432/mattermost?sslmode=disable&connect_timeout=10
      - MM_BLEVESETTINGS_INDEXDIR=/mattermost/bleve-indexes
      - MM_SERVICESETTINGS_SITEURL=https://team.meine-domain.de
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      - web
      - backend

  postgres:
    image: postgres:13-alpine
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    pids_limit: 100
    read_only: true
    tmpfs:
      - /tmp
      - /var/run/postgresql
    volumes:
      - ./mattermost-db/postgresql/data:/var/lib/postgresql/data
    environment:
      - TZ=UTC
      - POSTGRES_USER=mmuser
      - POSTGRES_PASSWORD=TheSecretPassword
      - POSTGRES_DB=mattermost
    networks:
      - backend
Erklärung der Konfiguration
  1. Mattermost-Dienst:
    • Image: Das Docker-Image für Mattermost ist die neueste Version der Team Edition.
    • Restart: Der Container wird automatisch neu gestartet, es sei denn, er wurde gestoppt.
    • Sicherheitsoptionen: Die Option no-new-privileges:true verhindert, dass Prozesse im Container Privilegien erhalten.
    • pids_limit: Limitiert die Anzahl der Prozesse, die im Mattermost-Container laufen können (200 in diesem Fall).
    • Volumes: Diese Einstellungen verbinden lokale Verzeichnisse mit Verzeichnissen im Container, sodass Konfigurationen, Daten und Logs persistent gespeichert werden.
    • Umgebungsvariablen:
      • TZ=UTC setzt die Zeitzone.
      • MM_SQLSETTINGS_DRIVERNAME gibt an, dass PostgreSQL als Datenbank verwendet wird.
      • MM_SQLSETTINGS_DATASOURCE definiert die Verbindungsdetails zur PostgreSQL-Datenbank.
      • MM_BLEVESETTINGS_INDEXDIR gibt den Speicherort für den Bleve-Index an, der für die Suche verwendet wird.
      • MM_SERVICESETTINGS_SITEURL definiert die URL, unter der Mattermost erreichbar ist.
    • Netzwerke: Mattermost ist in zwei Netzwerken (web und backend) verbunden, um die Kommunikation mit anderen Diensten zu ermöglichen. web ist das Netz, das der NPM nutzt, um die Mattermost per HTTP zu erreichen. backend ist das Netz, das Mattermost für die Kommunikation mit der Datenbank nutzt. So ist die Datenbank nicht vom Reverse-Proxy (NPM) zu erreichen.
  2. PostgreSQL-Dienst:
    • Image: Das Docker-Image für PostgreSQL ist die Version 13 auf Alpine-Basis.
    • Sicherheitsoptionen: Ähnlich wie bei Mattermost werden Privilegien begrenzt.
    • Volumen: Das lokale Verzeichnis für die PostgreSQL-Datenbank wird im Container eingebunden, um Daten persistent zu speichern.
    • Umgebungsvariablen: Hier werden Benutzer, Passwort und Datenbankname für die PostgreSQL-Datenbank konfiguriert.
    • Netzwerke: Die Datenbank ist nur im backend erreichbar. So kann man sie vom Nginx-Proxy-Manager nicht erreichen. Ein weiteres Netz einzuführen fügt eine weitere Sicherheitsschicht hinzu.

nginx-proxy-manager konfigurieren

Jetzt müssen wir lediglich eine Subdomain auf den Container weiterleiten und schon können wir uns einloggen. Ich habe team.meine-domain.de gewählt. So wurde der Proxy-Host eingerichtet:

Fertig.

Erster Login

Wenn ich jetzt im Browser https://team.meine-domain.de aufrufe, kann ich mich einloggen:

Der erste User ist auch gleichzeitig Admin und kann festlegen, wie Mattermost genutzt werden soll.

Damit keine ungebetenen Gäste meine Plattform nutzen, schalte ich die Erstellung weiterer Accounts vorläufig ab, bis ich alle Parameter mit sicheren Werten versehen habe:

Plugins ermöglichen die Erweiterung der Funktionalität von Mattermost. Zum Beispiel Screensharing und Video-Calls. Diese kommen bereits voreingestellt mit.

Falls es zu Problemen kommt, könnte es daran liegen, dass der Port 8443 tcp/udp verwendet wird und auf der Firewall noch freigeschaltet werden muss. Auch der Container könnte diese Anpassung erfordern.

Und dann kann es auch schon losgehen...:

Das ganze muss natürlich gegen die Funktionen der Nextcloud konkurrieren... Aber es hat durchaus seinen Platz in meinem Arsenal.

Fazit

Ich denke, es ist inzwischen den meisten bekannt: Ich finde Cloud und KI sehr nützlich. Doch ich mag es nicht, von Dritten abhängig zu sein und ihnen meine Daten anvertrauen zu müssen.

Mit Mattermost kann ich meine Kollegen und Kunden ruhigen Gewissens auf meine Plattform einladen und den gleichen Komfort bieten, den sie oft von Teams gewohnt sind.

Die Nutzung von Gast-Accounts gestattet mir nicht für jeden einen Account auf meinem Server einrichten zu müssen.