Wie kann ich die Weiterleitung von ssh * remote * -Ports einschränken?

22

Ich muss einschränken, welche Ports ssh -Rvon einem Benutzer per Fernzugriff weitergeleitet werden können.

Ich kenne die permitopenOption auf authorized_keys, aber wie auf der Manpage steht, beschränkt sie nur die lokale ssh -LPortweiterleitung

Wie hier besprochen , würde ein Benutzer dasselbe mit netcatoder ähnlich bekommen, aber in diesem Fall hat der Benutzer keinen Shell-Zugriff

Ich habe auch diesen Thread gefunden , in dem es um die Verwendung von selinux oder geht LD_PRELOAD, aber ich habe selinux noch nie konfiguriert und kann keine Informationen dazu finden, wie das geht LD_PRELOAD.

vielleicht hat jemand einen patch für openssh gemacht, um das umzusetzen?

EDIT: Ich habe diesen Fehlerbericht gefunden, also denke ich, dass er noch nicht implementiert ist

Lluís
quelle
Haben Sie eine Lösung dafür gefunden?
Alex88
Ich habe es nicht getan, ich denke, es kann nicht getan werden, bis der obige Bug geschlossen ist oder jemand einen Patch schreibt, um dies zu implementieren
Lluís

Antworten:

3

Dies wurde in OpenSSH 7.8p1 implementiert, das am 24.08.2018 veröffentlicht wurde. Zitat aus den Release Notes:

Fügen Sie eine PermitListen-Direktive zu sshd_config (5) und eine entsprechende permitlisten = authorized_keys-Option hinzu, mit der gesteuert wird, welche Listen-Adressen und Portnummern von der Fernweiterleitung verwendet werden dürfen (ssh -R ...).

Frank
quelle
4

no-port-forwardingSie können eine Option verwenden, die die Weiterleitung aller Ports verhindert. Vorhanden mindestens ab OpenSSH 4.3p2 (CentOS 5.3 - älteste Maschine, auf die ich Zugriff habe). Stellen Sie es an die gleiche Stelle, an die Sie es gestellt hätten permitopen.

utopisch
quelle
13
Das vollständige Deaktivieren der Portweiterleitung scheint übertrieben und nicht für die Frage geeignet zu sein. Ich gehe davon aus, dass OP dies begrenzen möchte , jedoch einige bestimmte Weiterleitungen von Remote-Ports zulässt.
Gertvdijk
2
Ja, ich muss einige Ports weiterleiten lassen
Lluís
0

Es ist nicht möglich, dies mit ssh zu begrenzen. Vielleicht könnten dazu Selinux oder Iptables verwendet werden. Es gibt jedoch eine alternative Strategie, die möglicherweise Ihren Anforderungen entspricht oder nicht. Verwenden Sie die Bindung an UNIX-Sockets. Dies sollte ab openssh Version 6.8 verfügbar sein.

Wenn Sie Sockets verwenden, steht Ihnen die Dateisystem-ACL zur Verfügung (auch wenn dies möglicherweise nix-abhängig ist), mit der Sie verhindern können, dass ein Benutzer sich an einen anderen Socket bindet. Dies verhindert jedoch in keiner Weise das Binden an Ports. Abhängig von Ihrem Anwendungsfall ist dies möglicherweise nicht hilfreich, aber Ports spielen möglicherweise keine Rolle, wenn Sie konsequent nur Sockets verwenden können.

Bei UNIX-Sockets kann die Verarbeitung von Dangling-Socket-Dateien problematisch sein, da Reverse Publisher versuchen, die Verbindung wiederherzustellen. Ich habe eine andere Frage (und Antwort) zu diesem Problem. Kurz gesagt, möchten Sie wahrscheinlich auch Folgendes verwenden StreamLocalBindUnlink yes:

Wie bereinige ich den SSH-Reverse-Tunnel-Socket nach dem Schließen der Verbindung?

Timo
quelle
-1

Duplizieren: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Sieht aus, als könnten Sie Folgendes verwenden?

In der Serverkonfigurationsdatei gibt es eine PermitOpen- Option. Mit dieser Option können Hosts und Ports angegeben werden, für die Weiterleitungen eingerichtet werden können. Diese Option kann innerhalb eines Match-Blocks verwendet werden, sodass sie nach Benutzer-, Gruppen- oder Hostnamen- oder IP-Adressmuster eingeschränkt werden kann.

Bearbeiten: Fügen Sie in der Serverkonfiguration Folgendes hinzu

PermitOpen Host: Port

PermitOpen IPv4_addr: Port

PermitOpen [IPv6_addr]: Port

PHoBwz
quelle
1
Nur auf U & L kann als Duplikat markiert werden.
GAD3R
1
Wie in der Frage angegeben, ist das für -L und es ist bereits als
Nichtlösung
1
Wird es jemals eine Lösung dafür geben (neben iptables)?
Davesave