
Authentifizierung, Autorisierung, Nachvollziehbarkeit und Prüfbarkeit für SSH-Zugriffe.

Bastionen sind ein Cluster von Maschinen, die als einziger Einstiegspunkt von Betriebsteams (wie Systemadministratoren, Entwicklern, Datenbankadministratoren, ...) genutzt werden, um sich sicher mit Geräten (Servern, virtuellen Maschinen, Cloud-Instanzen, Netzwerkgeräten, ...) zu verbinden, normalerweise über ssh.
Die Bastion bietet Mechanismen für Authentifizierung, Autorisierung, Rückverfolgbarkeit und Prüfbarkeit für Ihre gesamte Infrastruktur.
Da sie zwischen Ihren Benutzern und Ihrer Infrastruktur steht, fügt die Bastion eine Abstraktionsschicht hinzu, sodass Ihre Infrastruktur Ihre Betriebsteammitglieder nicht einzeln kennen muss.
Jedes Ihrer Teammitglieder hat ein individuelles Konto auf der Bastion und kann Mitglied einer oder mehrerer Bastion-Gruppen sein, die ihnen Zugriff auf eine oder mehrere Infrastrukturen gewähren können. Die Infrastrukturgeräte müssen nur die Bastion-Gruppe(n) kennen und vertrauen, von denen sie Teil sein können.
Die feingranulare RBAC der Bastion ermöglicht es, einige Verantwortlichkeiten an jedes Konto zu delegieren, gruppenbezogen oder bastionweit, einschließlich Konten, die von Ihrer Automatisierung genutzt werden könnten, um z.B. den Lebenszyklus der Konten zu verwalten (verknüpft mit Ihrem Personalverwaltungssystem, Ihrem LDAP oder AD), sicherzustellen, dass die ACL einer Gruppe aktuell ist (verknüpft mit Ihrer CMDB) usw. Automatisierte Prozesse sind einfach über die JSON-API über SSH umsetzbar.
Möchten Sie mehr erfahren, während Sie einige schöne Zeichnungen sehen? Hier ist eine Reihe von Blogbeiträgen, die tiefer in die Kernfunktionen und Prinzipien der Bastion eintauchen:
Weitere Ressourcen, die von Interesse sein könnten:
Es ist nichts Besonderes auf der Eingangs- oder Ausgangsseite der Bastion erforderlich, um sie zum Laufen zu bringen.
Nur Ihr guter alter ssh-Client wird benötigt, um sich darüber zu verbinden, und auf der anderen Seite tut es jeder Standard-sshd-Server. Dies umfasst beispielsweise Netzwerkgeräte, auf denen Sie möglicherweise keine benutzerdefinierte Software installieren können.
Alte Geräte, die nur kryptografische Algorithmen mit niedriger Sicherheit oder Telnet unterstützen, können durch Firewalling vor dem Internet verborgen werden, indem nur die Bastion erlaubt wird, wodurch ein niedriges Sicherheitskompromiss vermieden wird, indem auf der Eingangsseite der Bastion weiterhin nur hochsichere Verbindungen erlaubt werden.
Bitte lesen Sie die Online-Dokumentation, oder die entsprechende textbasierte Version im Ordner doc/.
Dies ist eine gute Möglichkeit, die Bastion innerhalb von Sekunden zu testen, aber lesen Sie das FAQ, wenn Sie die Containerisierung in der Produktion ernsthaft in Betracht ziehen.
Das Sandbox-Image ist für die folgenden Architekturen verfügbar: linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/ppc64le, linux/s390x.
Lassen Sie uns das Docker-Image ausführen:
docker run -d -p 22 --name bastiontest ovhcom/the-bastion:sandbox
Halten Sie Ihren öffentlichen SSH-Schlüssel bereit und konfigurieren Sie dann das erste Administratorkonto:
docker exec -it bastiontest /opt/bastion/bin/admin/setup-first-admin-account.sh poweruser auto
Wir sind nun mit der Standardkonfiguration betriebsbereit! Lassen Sie uns einen praktischen Bastion-Alias einrichten und den Befehl info testen:
PORT=$(docker port bastiontest | cut -d: -f2)
alias bastion="ssh [email protected] -tp $PORT -- "
bastion --osh info
Es sollte Sie als Bastion-Administrator begrüßen, was bedeutet, dass Sie Zugriff auf alle Befehle haben. Lassen Sie uns in den interaktiven Modus wechseln:
bastion -i
Dies ist nützlich, um mehrere --osh-Plugins nacheinander aufzurufen. Jetzt können wir um Hilfe bitten, um alle Plugins zu sehen:
$> help
Wenn Sie eine entfernte Maschine haben, mit der Sie sich über die Bastion verbinden möchten, holen Sie sich Ihren Ausgangsschlüssel:
$> selfListEgressKeys
Kopieren Sie diesen öffentlichen Schlüssel in die authorized_keys der entfernten Maschine im .ssh/-Ordner des Kontos, mit dem Sie sich verbinden möchten, dann:
$> selfAddPersonalAccess --host <remote_host> --user <remote_account_name> --port-any
$> ssh <remote_account_name>@<remote_host>
Beachten Sie, dass Sie sich direkt ohne interaktiven Modus verbinden können, mit:
bastion <remote_account_name>@<remote_machine_host_or_ip>
Das war's! Natürlich gibt es noch viel mehr dazu, die Dokumentation ist im Ordner doc/ und online verfügbar. Überprüfen Sie unbedingt die Hilfe der Bastion (bastion --help) und die Hilfe jedes osh-Plugins (bastion --osh Befehl --help). Vergessen Sie auch nicht, Ihre bastion.conf-Datei anzupassen, die sich in /etc/bastion/bastion.conf (für Linux) befindet.
Die unten aufgeführten Linux-Distributionen werden mit jeder Version getestet, aber da es sich um ein Sicherheitsprodukt handelt, wird dringend empfohlen, es auf der neuesten stabilen Version Ihres bevorzugten Betriebssystems auszuführen:
Alle anderen sogenannten "modernen" Linux-Versionen werden nicht mit jeder Veröffentlichung getestet, sollten aber mit keinen oder geringen Anpassungen funktionieren.
Die folgenden Betriebssysteme werden ebenfalls mit jeder Veröffentlichung getestet:
FreeBSD hat teilweise MFA-Unterstützung aufgrund der reduzierten Anzahl verfügbarer pam-Plugins. Es kann entweder ein zusätzliches Passwort oder ein TOTP-Faktor konfiguriert werden, aber nicht beides gleichzeitig.
perltidy ausgeführtperlcritic ausgeführtSelbst mit dem konservativsten, vorsichtigsten und paranoidesten Codierungsprozess haben Code Bugs, daher sollte man ihm nicht blind vertrauen. Daher vertraut die Bastion ihrem eigenen Code nicht. Sie nutzt die Sicherheitsprimitive des Betriebssystems, um zusätzliche Sicherheit zu erhalten, wie unten zu sehen.
Verwendet die bekannte und vertrauenswürdige UNIX-Diskretionäre Zugriffskontrolle:
Das Hauptskript der Bastion ist als System-Shell des Bastion-Benutzers deklariert:
bash) auf dem SystemDer Code ist modular
ssh-Zugriff auf andere MaschinenDer gesamte Code, der erweiterte Systemrechte benötigt, ist vom Hauptcode getrennt, in Modulen namens Helpers
sudo ausgeführtsudoers-Konfiguration ist an eine für den Befehl spezifische Systemgruppe gebunden, die Konten auf Bedarfsbasis gewährt wirdsyslog, der auch an einen entfernten Syslog-Server gesendet werden sollte, um sicherzustellen, dass selbst Bastion-Administratoren ihre Spuren nicht fälschen können, und/odersqlite3-Datenbanken für eine einfache Suchettyrec aufgezeichnet, Hilfsskripte werden bereitgestellt, um diese Aufzeichnungen zu verschlüsseln und auf einen entfernten Escrow-Filer zu übertragenEine nicht erschöpfende Liste verwandter Tools, die von der Community gepflegt werden:
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nicht in einer Weise nutzen, die nicht mit der Lizenz vereinbar ist. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch anwendbares Recht vorgeschrieben oder schriftlich vereinbart, wird die unter der Lizenz verteilte Software auf einer "AS IS"-BASIS OHNE GEWÄHRLEISTUNG ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, zur Verfügung gestellt. Siehe die Lizenz für die spezifischen Berechtigungen und Beschränkungen, die für die Nutzung der Software gelten.
sudoers-Konfiguration fest codiert-T) wird für den gesamten unter sudo ausgeführten Code verwendet, um zu verhindern, dass Benutzereingaben die Logik stören, indem die Ausführung sofort gestoppt wirdsudo ausgeführter Code vertraut seinem Aufrufer nicht und überprüft jede Eingabe erneutEin Protokollbruch wird zwischen der Eingangs- und Ausgangsseite durchgeführt, wodurch die meisten protokollbasierten Schwachstellen unwirksam werden