Wie kann ich die Weiterleitung von ssh-Ports einschränken, ohne es zu verweigern?

6

Angenommen, ich habe ein Konto erstellt, dessen Login-Shell eigentlich ein Skript ist, das keine interaktive Anmeldung zulässt und nur einen sehr begrenzten, spezifischen Befehlssatz ermöglicht, der remote ausgeführt wird.

Dennoch, ssh ermöglicht es dem Benutzer dieses Kontos, Ports weiterzuleiten, was ein Loch ist

Nun, der Witz ist, dass ich wirklich möchte, dass das Konto eine bestimmte Port-Forwarding-Konfiguration einrichtet, wenn ssh Sitzung ist eingerichtet. Es muss jedoch unmöglich sein, eine beliebige Port-Weiterleitung zu konfigurieren.

(Dies ist eine akzeptable Lösung, wenn die zulässige Portweiterleitungskonfiguration im Rahmen jeder Sitzung unbedingt festgelegt wird.)

Kaz
quelle
Wenn sich in ein paar Tagen niemand meldet, werde ich meine Antwort akzeptieren. Und vielleicht noch daran arbeiten.
Kaz
Wenn Sie es für einige Zeit nicht akzeptiert / offen halten, erhalten Sie etwas mehr Aufmerksamkeit. Manche Leute verbringen das Wochenende gerne bei irgendwo anders als SO :)
Sampo Sarrala
Meine ursprüngliche Antwort war ein vorgeschlagener Patch, aber vorhandene Funktionen in OpenSSH erledigen dies.
Kaz
Ups, das gehört auf Serverfehler, nicht wahr! Es ist leicht zu vergessen, dass "Superuser" hier nicht "root" oder "sysadmin" bedeutet.
Kaz

Antworten:

7

Es stellt sich heraus, dass OpenSSH eine Funktion zur Einschränkung hat -L Stil öffnet sich auf der Serverseite. Die Funktion ist auf zwei Arten verfügbar.

  1. In der Serverkonfigurationsdatei befindet sich a PermitOpen Möglichkeit. Mit dieser Option können Hosts und Ports angegeben werden, für die Weiterleitungen eingerichtet werden können. Diese Option kann innerhalb von verwendet werden Match blockieren, so dass er durch Benutzer, Gruppen oder Hostnamen oder IP-Adressmuster eingeschränkt werden kann.

  2. In einem (n authorized_keys Datei können Optionen mit einem bestimmten Schlüssel verknüpft werden. Da ist ein permitopen Option, die ähnlich arbeitet wie die server-config.

Anmerkungen / Einschränkungen:

  • Die Option AllowTcpForwarding Deaktiviert alle Weiterleitungen in beide Richtungen, wodurch verhindert wird, dass Überwachungsports auf dem Server eingerichtet werden und aktive Weiterleitungen aktiviert sind.

  • Es gibt kein PermitOpen Zugangskontrolle für -R Stilverbindungen. Das ist wahrscheinlich in Ordnung. Was es bedeutet, ist, dass die Benutzer verwenden können ssh verschiedene nicht privilegierte Ports zum Abhören auf dem Server öffnen. Wo diese Verbindungen auf der anderen Seite der SSH-Verbindung hergestellt werden, ist das Problem des Clients. Wenn wir die Weiterleitung im -L Richtung hat der Benutzer keine Möglichkeit, diese zu verwenden -R Ports (zumindest nicht durch ssh, wenn dieser Benutzer keine beliebige interaktive Sitzung erstellen kann).

  • Es scheint keine Möglichkeit zu geben, eine leere Liste der zulässigen Öffnungen zu erstellen, um zu verhindern, dass Benutzer solche erstellen -L Stilverbindungen überhaupt. Eine Problemumgehung besteht jedoch in der Verwendung eines harmlosen, nicht vorhandenen oder unmöglichen Hostnamens, z. Konkret permitopen=":1234" macht den Trick

Kaz
quelle
Da kann ich ohne feinkörnige Zugangskontrolle weiterleben -R, das funktioniert für mich.
Kaz
0

Es scheint keine Möglichkeit zu geben, eine leere Liste zulässiger Listen zu erstellen   wird geöffnet, um zu verhindern, dass Benutzer Verbindungen im L-Stil herstellen   was auch immer. Eine Problemumgehung besteht jedoch in der Verwendung eines harmlosen, nicht vorhandenen oder   unmöglicher Hostname, z. B. die leere Zeichenfolge. Konkret   allowopen = ": 1234" macht den Trick.

Mit dem Argument "any" können Sie alle Einschränkungen aufheben und Weiterleitungsanfragen zulassen. Das Argument "none" kann verwendet werden, um alle Weiterleitungsanforderungen zu unterbinden. Standardmäßig sind alle Portweiterleitungsanforderungen zulässig.

Shkrid
quelle