Wie kann ich die SSH-Sicherheit erhöhen? Kann ich sowohl einen Schlüssel als auch ein Passwort benötigen?

16

Ich habe ein kleines Netzwerk von Servern und möchte die allgemeine Sicherheit erhöhen. Ich habe nicht genug Zeit / Geld / Paranoia, um ein VPN einzurichten. Wie kann ich die Sicherheit meines Systems grundlegend erhöhen?

Möglicherweise müssen Benutzer ihren Schlüssel senden und ein Kennwort eingeben. Dies ist ein bisschen schwer zu googeln, weil alles über "ssh key password" über "sshing without a password" handelt. :-)

Ein Schema, mit dem ich schon immer spielen wollte, besteht darin, dass eingehende Verbindungen nur von einer Whitelist mit dyndns-IP-Adressen stammen. Ich weiß, dass sich einige Sicherheitsköpfe bei dem Gedanken an die Idee übergeben würden, aber die Tatsache ist, dass die Nutzung einer Box eine sehr bedeutende Komplexität mit sich bringen würde.

Was denkst du? Was gibt es sonst noch?

John Bachir
quelle
Sie können auch die Liste der Benutzer einschränken, die eine Verbindung mit den Anweisungen AllowUsers oder DenyUsers herstellen dürfen. Weitere Details zu diesem Beitrag .
Fred

Antworten:

8

Das Login mit Passwort und Schlüssel ist dasselbe wie "nur mit Schlüssel". Während der Schlüsselerstellung werden Sie aufgefordert, eine Passphrase einzugeben. Wenn Sie dieses Feld leer lassen, werden Sie nicht nach einem Passwort gefragt. Wenn Sie eine Passphrase eingeben, werden Sie bei jeder Anmeldung dazu aufgefordert.

Wenn Sie sich Sorgen um die Sicherheit machen, sollten Sie einige der in diesem Forum millionenfach genannten Ratschläge berücksichtigen:

  • Deaktivieren Sie die SSH-Anmeldung für root
  • Erlaube ssh Zugriff nur von definierten IP Adressen (iptables, hosts.allow, ...)
  • Verschieben Sie den SSH-Port auf einen anderen Port (mehr Unbekanntheit als Sicherheit, aber es funktioniert)
  • Überwachen Sie ausländische Anmeldeversuche und reagieren Sie entsprechend
  • Halten Sie Ihr System auf dem neuesten Stand

Usw.

Update: In der Antwort hier erfahren Sie, wie Sie bei einem OpenSSH-Server sowohl einen öffentlichen Schlüssel als auch ein lokales Systemkennwort benötigen.

mkudlacek
quelle
Danke für all eure Tipps, werde mich darum kümmern. Wenn sowohl Schlüssel als auch Kennwort erforderlich sind, kann ein Angreifer, der ein Kennwort herausfindet (z. B. wenn der Benutzer es an einer unsicheren Stelle verwendet), ohne den Schlüssel nicht hineinkommen und stiehlt der Angreifer den Schlüssel vom Computer des Benutzers , sie können nicht hineinkommen, ohne das Passwort zu kennen ... richtig?
John Bachir
12
Es ist nicht das gleiche. Wenn Sie nur den Schlüssel benötigen, kann der Server keine Kennwortsicherheitsrichtlinie für den Schlüssel erzwingen. Ein unvorsichtiger Benutzer könnte einen unverschlüsselten privaten Schlüssel auf dem Client haben, der Ihren Server angreifbar macht, wenn der Schlüssel gestohlen wird.
200_success
mkudlacek - ich wusste vorher nichts über hosts.allow - google herum, es scheint, als wäre meine Idee mit der Whitelist von dyndns doch nicht so albern, ich denke, das werde ich ausprobieren.
John Bachir
1
200_erfolg - kann man also sowohl einen schlüssel als auch ein passwort verlangen?
John Bachir
Ich benutze auch die DenyHosts-Anwendung, um Leute auszusperren, die immer wieder versuchen, hineinzukommen und scheitern. Eine nette kleine proaktive automatisierte Art, Leute auf die schwarze Liste zu setzen.
James T Snell
6

Eine Idee, die ich interessant fand, ist Port-Knocking. Um eine SSH-Verbindung herzustellen, müssen Sie zunächst eine Sequenz anderer Ports prüfen, bevor der SSH-Server eine Verbindungsanforderung bestätigt. Wenn die richtige Reihenfolge der Ports nicht verwendet wird, erfolgt keine Antwort. Es sieht also so aus, als ob kein SSH-Server ausgeführt wird. Die Reihenfolge der Ports ist anpassbar und kann mit Ihren vorgesehenen Benutzern geteilt werden. Alle anderen können effektiv keine Verbindung herstellen.

Ich habe das selbst nicht ausprobiert, aber nach dem, was ich gehört habe (was eigentlich nicht viel ist), ist der Overhead vernachlässigbar und senkt Ihr Sichtbarkeitsprofil enorm.

Weiji
quelle
Ich würde mitmachen, wenn Sie nur die "allgemeine Sicherheit erhöhen" möchten, aber Sie sollten wahrscheinlich versuchen, stattdessen bestimmte Sicherheitsprobleme zu lösen.
Stefan Thyberg
Ich benutze dies an allen Stellen, an denen ich ssh habe, und es ist sehr effektiv, imho.
Sirex
Ist das nicht dasselbe wie ein Passwort, das 4 Zeichen länger ist?
John Bachir
nicht wirklich. Es gibt 65536 Ports und 26 Buchstaben. Außerdem können Sie die Klopfsequenz beliebig lang wählen und Wiederholungsversuche mithilfe von Standard-Firewall-Techniken einschränken. Es ist an sich keine Sicherheit, aber es ist schön, sie zu haben.
Sirex
Na dann 8 oder 12 Zeichen länger :-D
John Bachir
3

Patches für die direkte Aktivierung in SSH und viele relevante Diskussionen:

Dies kann auch ohne Änderung durchgeführt werden, indem ein Kennwortüberprüfungsskript mit der Verwendung der ForceCommandKonfigurationsoption kombiniert wird .

Wenn Sie die Authentifizierung mit öffentlichem Schlüssel auf PAM verschoben haben, ist es möglich, dass beide Schritte ausgeführt werden müssen, bevor PAM die Authentifizierung als erfolgreich ansieht.

Jeff Ferland
quelle
2

Benutz einfach

RequiredAuthentications publickey, password

in, sshd_configwenn Sie sshd von ssh.com verwenden. Diese Funktion ist in OpenSSH nicht verfügbar.

Flávio Botelho
quelle
RequiredAuthenticationsist definitiv keine Standarderweiterung von OpenSSH
Hubert Kario
Wissen Sie, welche sshd-Implementierungen dies unterstützen?
John Bachir
Tectia SSH-Server unterstützt es. Übrigens: Verwenden Sie @nameOfUser, wenn Sie auf ihre Kommentare antworten. Auf diese Weise werden sie über die Antwort benachrichtigt
Hubert Kario
Ähnliche Funktionen werden in OpenSSH ab Version 6.2 unterstützt: serverfault.com/a/562899
Søren Løvborg
1

Sie können auch Einmalpasswörter verwenden , um die Sicherheit zu erhöhen. Auf diese Weise können sich Benutzer von einem unsicheren Terminal aus anmelden, das möglicherweise über einen Keylogger verfügt, wenn sie zuvor das nächste Kennwort generiert haben. Es gibt auch Passwortgeneratoren, die auch auf älteren Java-MIDP-Telefonen installiert werden können und die Sie immer dabei haben.

Prof. Moriarty
quelle
Ja, auf meinem persönlichen Server verwende ich zusätzlich zu meinem Passwort einen Yubikey-Token. Das Token generiert ein Einmalpasswort. Beide sind zur Authentifizierung erforderlich. Alternativ erlaube ich die Umgehung des Passwort / otp-Paars, wenn Sie sich mit einem SSH-Schlüssel authentifizieren. Der Yubikey ist billig und es gibt eine Menge Software, um ihn in Pam, das erweiterbare Authentifizierungssystem von Linux, zu integrieren.
Martijn Heemels
1

Ich würde empfehlen, dass Sie niemals einen sshd-, rdp- oder ähnlichen Verwaltungsdienst ohne IP-Beschränkung ausführen. In der Tat würde ich vorschlagen, den Zugriff auf solche Dienste auf Administratoren zu beschränken, die über VPN eine Verbindung herstellen.

3molo
quelle
1

In Bezug auf Ihre ursprüngliche Frage, ob Sie sowohl einen Schlüssel als auch ein Passwort benötigen, ist dies jetzt möglich, wenn Sie RHEL oder CentOS 6.3 ausführen. In den Versionshinweisen zu RHEL 6.3 wird dies beschrieben. Fügen Sie dies zu Ihrer sshd_config hinzu

RequiredAuthentications2 publickey,password
Mark McKinstry
quelle
0

Ich stimme 3molo sehr zu. OpenSSH ist der Standard-SSH-Server von Linux und Unix. Es gibt keinen Grund für uns, dies zu ändern, insbesondere aus Sicherheitsgründen. VPN sollte die beste Lösung sein, die unseren Datenverkehr verschlüsseln und die zweistufige Kennwortautorisierung bereitstellen kann.

mcsrainbow
quelle
0

Ich bin mir nicht sicher, warum es niemand erwähnt hat, aber - Sie sollten sicherstellen, dass die Schlüssel länger als standardmäßig 1024 Bit generiert werden, was nicht mehr als sicher gilt.

mnmnc
quelle