Sicherer Ersatz für Teams
Behalten Sie die Kontrolle über Ihre Daten mit Mattermost: Ein sicherer, selbstgehosteter Messaging-Dienst.
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:
- 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.
- 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.
- 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.
- 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.
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
- 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
undbackend
) 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.
- 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.