Einrichten eines SSH - Server Um den Server weiter einzurichten bzw. später bequem warten zu können ist es erforderlich, eine Schnittstelle für die Fernwartung / den Fernzugriff zu schaffen. Im Linux - Serverbereich hat sich dabei seit Jahren ssh etabliert und bewährt. SSH bietet eine verschlüsselte Verbindung zu dem Server und diverse Möglichkeiten einer sicheren Authentifizierung. Darüber hinaus lässt sich über diverse Einstellungen ein hohes Maß an Sicherheit erzeugen. 1. Installation der Pakete Der SSH - Server, genauer gesagt der OpenSSH-Server, kann aus den Ubuntu - Paketquellen heruntergeladen und installiert werden. sudo apt-get install openssh-server Nach der Installation ist der SSH-Server automatisch aktiv und die Anmeldung mittels SSH kann auf dem Server erfolgen. Allerdings sollte die Konfiguration des SSH-Server noch angepasst werden um die Sicherheit zu erhöhen. 2. Wahl der Authentifizierung Der SSH - Server bietet grundsätzlich zwei Unterschiedliche Möglichkeiten der Authentifizierung bei der Anmeldung: - Passwort: Anmeldung mit einer Benutzerkennung und einem zugehörigen Kennwort - Public - Key: Anmeldung mit einem eigens generierten Schlüssepaar Die erste Variante erfordert keine weitere Konfiguration, beinhaltet aber die Gefahr, dass das Kennwort erraten oder mittels Brut - Force - Attacke geknackt wird. Diese Gefahr besteht bei der Public - Key Variante nicht, da dort ein eigens generierter Schlüssel benötigt wird um sich an dem Server anzumelden. So lange dieser Schlüssel nicht in die falschen Hände gerät ist diese Methode bisher nicht zu überwinden. Allerdings muss zur Verwendung dieses Verfahren ein Schlüsselpaar generiert werden: - Öffentlicher Schlüssel: Dieser wird auf dem Server hinterlegt und ermöglicht dem Inhaber des persönlichen Schlüssels die Anmeldung 1 / 5
- Ort des Schlüssel (Standard): ~/.ssh/authorized_keys - Kennzeichen:.pub - persönlicher Schlüssel: Der persönliche Schlüssel befindet sich im Besitz des Inhabers und ermöglicht diesem auf einen Server zuzugreifen - Ort des Schlüssel (Standard): ~/.ssh - Kennzeichen: Keine speziellen Kennzeichen vorhanden Da die Public - Key aus nachvollziehbaren Gründen als Sicher zu betrachten ist wird dieses Verfahren zur Anwendung kommen. - Generieren des Schlüssels Für das Public - Key verfahren müssen zunächst die Schlüssel generiert werden. Hierfür ist keine gesonderte Software erforderlich sondern es kann das Kommandozeilen - Programm ssh-keygen verwendet werden. Es können grundsätzlich zwei Arten von Schlüsseln erzeugt werden: rsa und dsa. Da es hinsichtlich der Sicherheit keine Unterschiede zwischen beiden Verfahren gibt wird in diesem Fall der DSA-Schlüssel zum Einsatz kommen: ssh-keygen -t dsa -f ~/.ssh/johnson82 Durch diesen Befehl wird ein DSA - Schlüssel - Paar mit einer Länge von 1024 bits generiert. Dieser Schlüssel erhält als Hinweis auf den Inhaber die mittels des Attributes '-f' hinzugefügte Bezeichnung 'johnson82'. Der angegebene Pfad '~/.ssh/' ist in diesem Fall optional, kann aber auch genutzt werden um die Schlüssel an einem alternativen Ort abzulegen. Anschließend wird nach einem Passwort für den persönlichen Schlüssel gefragt. An dieser Stelle sollte ein Passwort für den Schlüssel (nicht für die Anmeldung an dem Server) vergeben werden um im Falle eines Verlustes des Schlüssel den Missbrauch durch Dritte zu erschweren. - Verteilen des Schlüssels Der öffentliche Schlüssel, zu erkennen an dem Zusatz.pub, muss jetzt auf die zu administrierende Server verteilt werden. Die einfachste Möglichkeit ist das shell-script 'ssh-copy-id'. Dies ist Teil des OpenSSH-Paketes und bereits unter Punkt 1 installiert worden. Dieses Programm ergänzt auf dem Server in der Datei '~/.ssh/authorized_keys' den generierten öffentlichen Schlüssel: 2 / 5
ssh-copy-id -i ~/.ssh/johnson82.pub linjon82@192.168.178.5 Um dieses Verfahren durchzuführen muss eine Anmeldung auf dem Server noch per Kennung / Passwort möglich sein. Sollte dies nicht mehr möglich sein und ein weiterer Schlüssel ergänzt werden muss der Öffentliche Schlüssel auf den Client kopiert werden: scp ~/.ssh/johnson82.pub linjon82@192.168.178.5:/~/.ssh/ und zum Beispiel mittels cat in der 'authorized_keys' ergänzt werden: ssh 192.168.178.5 - Anmeldung auf dem Server per SSH - cat ~/.ssh/johnson82.pub >> ~/.ssh/authorized_keys Absofort kann sich auf dem Server mittels des Schlüssels angemeldet werden. - Konfigurieren des OpenSSH -Servers Nach der Installation und der Generierung der Schlüssel sowie deren Verteilung ist als abschließende Maßnahme noch die Anpassung der Konfiguration des SSH - Servers erforderlich. Die original (nicht modifizierte) sshd_conf Folgende Änderungen in der sshd_conf dienen zur Erhöhung der Sicherheit: - Zeile 5: Port 22 Der Standard - Port für SSH-Zugriffe ist der Port 22 und somit auch der Standard für jeden Angriffsversuch. Deshalb wird der Port auf einen beliebigen anderen Wert geändert. Allerdings sollte darauf geachtet werden, dass kein anderes Programm diesen Port verwendet. Port 4490 - Zeile 8: ListenAdress :: Dieser Eintrag gibt an, an welchen lokalen Netzwerkadressen der SSH-Server auf Anfragen wartet. Hier trage ich die IP-Adresse und den in Zeile 5 gewählten Port ein, da der Server später noch als WLAN-Access-Point dienen soll und sich ein Angreifer über das WLAN nicht per SSH auf meinem Server anmelden können soll. ListenAddress 192.168.178.20:4490 - Zeile 26: PermiRootLogin 3 / 5
Die Anmeldung als Root ist in der Grundeinstellung möglich. Dadurch könnte bei einer Attacke das Root-Kennwort sofort per SSH ermittelt werden. Um dem Angreifer zwei Hürden bzgl. der SSH-Anmeldung als Root in den Weg zu stellen sollte die direkte Anmeldung als root unterbunden werden. PermitRootLogin no - Zeile 41: AllowUsers Durch das Hinzufügen des Eintrages 'AllowUsers' können nur noch bestimmte Anwender für den SSH - Zugriff berechtigt werden.dadurch kann verhindert werden, dass schwache Kennwörter von anderen Anwendern das System gefährden. AllowUsers mustermann - Zeile 29: RSAAuthentification - Zeile 36: RhotsRSAAuthentifivation - Zeile 38: HostbasedAuthentification - Zeile 52: PasswordAuthentication - Zeile 55 :KerverosAuthentification - Zeile 61: GSSAPIAuthentification Diese Einträge beschreiben die 6 Anmeldealternativen zu dem PublicKey verfahren und der Passwort - Anmeldung. Einige der Einträge sind durch eine Raute auskommentiert und nicht aktiv. Ich bevorzuge eine eindeutige Konfiguration und entferne deshalb die # am Beginn der Zeile und ergänze ein 'n' um diese Alternativen explizit zu deaktivieren: RSAAuthentification no RhotsRSAAuthentifivation no HostbasedAuthentification no KerverosAuthentification no GSSAPIAuthentification no - Zeile 79: UsePam Dieser letzte Eintrag in der sshd_conf muss deaktiviert werden, da sonst die vorher deaktivierten Anmeldeverfahren zum Teil trotz der eigentlichen Deaktivierung noch möglich sind. UsePam no - Neustart des Servers Um die Änderungen zu Übernehmen muss der SSH-Server neugestartet werden 4 / 5
sudo /etc/init.d/ssh restart Sollte der Neustart ohne Fehlermeldungen erfolgen ist der Server jetzt mit den aktuellen Einstellungen aktiv. Mittels netstat kann jetzt noch geprüft werden, auf welcher Netzwerkschnittstelle und welchem Port der SSH - Server auf Anfragen wartet: sudo netstat -antp Die Ausgabe sollte den gemachten Änderungen in der Konfiguration entsprechen. - Ergebnis: Mit den jetzt vorgenommenen Einstellungen in der modifizierten sshd_conf ist eine Anmeldung nur noch noch mit dem passenden Schlüssel und dem Wissen um den richtigen Port möglich. Weiterhin ist der Schlüssel mit einem Kennwort versehen, dass bei Verlust des Schlüssels den sofortigen Missbrauch verhindert. Diese Maßnahmen stellen ein hohes Maß an Sicherheit bezüglich der Absicherung eines SSH - Zuganges dar. In einem späteren Beitrag werde ich noch auf die Möglichkeit des Monitorings und dem Schutz vor Attacken mittels zusätzlicher Software eingehen. 5 / 5