Ich werde häufig Opfer von SSH-Login-Angriffen und möchte diese reduzieren. Gibt es eine Möglichkeit, einen Befehl anzugeben, den OpenSSH ausführen soll, seinen Rückgabewert zu prüfen und den Login-Versuch nur zuzulassen, wenn dieser Befehl 0 zurückgibt?
der Grund dafür ist, dass ich gerne komplexere Anmelderegeln hätte, die ich in einem Skript ausdrücken kann, statt durch einfache Filewall-/IP-basierte Regeln.
Antwort1
Ja, mit einem ausreichend modernen OpenSSH gibt es einen Trick: Verwenden Sie den AuthorizedKeysCommand. Mit dieser Konfigurationsoption können Sie einen externen Befehl zum Abrufen von SSH-Schlüsseln angeben. Hier können Sie Logik wie das Abrufen von SSH-Schlüsseln aus LDAP, aber auch jede andere gewünschte Logik einfügen. Solange Sie nur schlüsselbasierte Authentifizierung akzeptieren, schlägt die Authentifizierung fehl, wenn keine Schlüssel zurückgegeben werden.
In älteren Versionen von OpenSSH können Sie ForceCommand verwenden, aber das ist ein erzwungener BefehlnachAuthentifizierung, kein Befehl, der ausgeführt wirdVorAuthentifizierung. Es funktioniert jedoch sowohl mit passwort- als auch mit schlüsselbasierter Authentifizierung.
Wenn Sie eine kennwortbasierte Authentifizierung unterstützen und in die Authentifizierungsphase einsteigen möchten, müssen Sie Ihr eigenes PAM-Modul schreiben und es für die SSH-Authentifizierung erforderlich machen. Dies ist nicht die trivialste Methode und wird für die schlüsselbasierte Authentifizierung nicht aufgerufen.
Wenn Sie lediglich IP-Adressen blockieren möchten, bei denen zu viele Authentifizierungsfehler auftreten, kann Ihnen fail2ban ebenfalls helfen, ohne dass Änderungen an Ihrem SSH-Setup erforderlich sind.