Ich habe einen Server mit Ubuntu und dem OpenSSH-Daemon. Nennen wir es S1.
Ich benutze diesen Server von Client-Rechnern (nennen wir einen von ihnen C1), um einen SSH-Reverse-Tunnel mithilfe von Remote-Port-Forwarding durchzuführen, z.
ssh -R 1234:localhost:23 login@S1
Auf S1 verwende ich die Standarddatei sshd_config. Soweit ich sehen kann, kann sich jeder mit den richtigen Anmeldeinformationen {login, pwd} auf S1 bei S1 anmelden und entweder eine Remote-Portweiterleitung und eine lokale Portweiterleitung durchführen. Solche Anmeldeinformationen könnten in Zukunft ein Zertifikat sein, daher kann sich nach meinem Verständnis jeder, der das Zertifikat ergreift, von einem anderen Ort aus (nicht unbedingt von C1 aus) bei S1 anmelden und somit lokale Portweiterleitungen erstellen.
Das Zulassen der lokalen Portweiterleitung ist für mich zu gefährlich, da damit eine Art öffentlicher Proxy erstellt werden kann. Ich suche nach einer Möglichkeit, nur -L Weiterleitungen zu deaktivieren.
Ich habe Folgendes versucht, aber dies deaktiviert sowohl die lokale als auch die Remote-Weiterleitung:
AllowTcpForwarding No
Ich habe auch folgendes ausprobiert, dies erlaubt nur -L zu SX: 1. Es ist besser als nichts, aber immer noch nicht das, was ich brauche, was eine "keine" Option ist.
PermitOpen SX:1
Also frage ich mich, ob es einen Weg gibt, damit ich allen lokalen Portforwards verbieten kann, etwas zu schreiben wie:
PermitOpen none:none
Ist das Folgende eine nette Idee?
PermitOpen localhost:1
Antworten:
Jeder mit Anmeldeinformationen kann seine eigene Instanz von sshd aufrufen, die auf einem zufälligen Port ausgeführt wird, und zulassen, was immer er will, einschließlich -L lokaler Weiterleitungen:
Wenn Sie den Benutzern nicht vertrauen, etwas mit Ihrem Computer zu tun, sollten Sie ihnen nicht erlauben, sich an erster Stelle anzumelden.
(Übrigens ist das -D-Flag auch "Proxy-problematisch")
quelle
command="/sbin/nologin"
. Dies sollte verhindern, dass Befehle auf dem Server ausgeführt werden.ssh
kann verwendet werden, um eine Verbindung zu Konten herzustellen, die stark eingeschränkte Anmelde-Shells haben, die dies nicht zulassen. Port Forwarding ist eine Sicherheitslücke in solchen eingeschränkten Shells. Zusätzlich zum Ausführen eines zulässigen Befehls kann der Benutzer Tunnel erstellen.sshd_config
Manpage: Beachten Sie, dass das Deaktivieren der TCP-Weiterleitung die Sicherheit nur verbessert, wenn Benutzern auch der Shell-Zugriff verweigert wird , da sie jederzeit ihre eigenen Weiterleitungen installieren können. (Hervorhebung von mir).Eine andere Lösung wäre, die Portweiterleitung nur bestimmten Benutzern zu erlauben:
Von SSH: Die endgültige Anleitung
Die Portweiterleitung kann in sshd global aktiviert oder deaktiviert werden. Dies geschieht mit dem serverweiten Konfigurationsschlüsselwort AllowTcpForwarding in / etc / sshd_config. Das Schlüsselwort kann den Wert yes (Standardeinstellung, Weiterleitung aktivieren) oder no (Weiterleitung deaktivieren) haben:
Darüber hinaus bietet SSH2 die folgenden Optionen:
Die Syntax ist dieselbe wie für die Optionen AllowUsers und AllowGroups. [Abschnitt 5.5.2.1, „Kontozugriffskontrolle“] Sie geben eine Liste von Benutzern oder Gruppen an, die die Portweiterleitung verwenden dürfen. Der Server lehnt es ab, Portweiterleitungsanforderungen für andere Personen zu berücksichtigen. Beachten Sie, dass sich diese auf das Zielkonto der SSH-Sitzung beziehen, nicht auf den Client-Benutzernamen (der häufig nicht bekannt ist).
...
Es ist wichtig zu wissen, dass die Anweisungen in diesem Abschnitt die Portweiterleitung nicht tatsächlich verhindern, es sei denn, Sie deaktivieren auch interaktive Anmeldungen und schränken ein, welche Programme auf der Remote-Seite ausgeführt werden dürfen. Ansonsten können sachkundige Benutzer einfach ihre eigene Portweiterleitungsanwendung über die SSH-Sitzung ausführen. Diese Einstellungen allein mögen eine ausreichende Abschreckung in einer nicht-technischen Community sein, aber sie werden niemanden aufhalten, der weiß, was sie tut.
quelle
AllowTcpForwardingForUsers
enthüllt, dass es in einer konfiguriertsshd2_config
ist, die in einigen kommerziellen Programmen verwendet wird. Sehen Sie sich eine der Antworten an: superuser.com/questions/384643/…Match
Blöcke in der Konfiguration. Sie könnenMatch
auf Benutzer und Gruppen, und schließen Sie dieAllowTcpForwarding
innerhalb.Es gibt jetzt eine Option, um nur lokale / Remote-Weiterleitung zuzulassen.
AllowTcpForwarding Gibt an, ob die TCP-Weiterleitung zulässig ist. Die verfügbaren Optionen sind "Ja" oder "Alle", um die TCP-Weiterleitung zuzulassen, "Nein", um die TCP-Weiterleitung zu verhindern, "Lokal", um die lokale Weiterleitung (aus der Sicht von ssh (1)) zuzulassen, oder "Remote", um die Remote- Weiterleitung zuzulassen nur nachsenden . Der Standardwert ist "Ja". Beachten Sie, dass das Deaktivieren der TCP-Weiterleitung die Sicherheit nur verbessert, wenn Benutzern auch der Shell-Zugriff verweigert wird, da sie jederzeit ihre eigenen Weiterleitungen installieren können.
Wie bereits erwähnt, sollten Sie die Shell auch auf nologin setzen.
quelle
Meine Lösung für dieses Problem war das Hinzufügen von: PermitOpen fo.local: 80 im Hauptabschnitt von sshd_config.
Dies lehnt einfach jede Anfrage nach lokaler Weiterleitung ab, mit Ausnahme von fo.local: 80.
quelle
Wenn ich Sie richtig verstehe, haben Ihre Benutzer vollständigen Shell-Zugriff, möchten jedoch nicht, dass sie Verbindungen zum Rest des Netzes herstellen können.
Die von SSH zugelassene "lokale Portweiterleitung" ist nur eine der Möglichkeiten, dies zu tun. Andere schließen eine Instanz starten
socat
,netcat
oder jede andere Anzahl von Werkzeugen.Die beste Möglichkeit, ausgehende und eingehende Verbindungen in Linux zu steuern, ist Netfilter, auch bekannt als IPTables.
Es verfügt über ein spezielles Modul namens owner (
ipt_owner
), mit dem Sie verschiedene Eigenschaften des Paketerstellers für lokal generierte Pakete abgleichen können. Es gilt in denOUTPUT
undPOSTROUTING
Ketten.Sie können damit ausgehende Pakete ablehnen, die von bestimmten Benutzergruppen generiert wurden, und somit jede Art von Portweiterleitung und nicht nur die
-L
Option von SSH deaktivieren.quelle