Kann ich den interaktiven Shell-Zugriff deaktivieren, während ich den Webverkehr über SSH tunnele?

12

Ich möchte SSH-Tunneling als kostengünstige VPN-Lösung für externe Benutzer implementieren, um auf Webanwendungen zuzugreifen, die nur für das Intranet verfügbar sind.

Ich verwende derzeit Ubuntu Server 10.04.1 64-Bit mit OpenSSH installiert.

Ich verwende Putty unter Windows-Boxen, um einen Tunnel an einem lokalen Port zu meinem SSH-Server zu erstellen.

start putty -D 9999 mysshserver.com -N

Ich benutze dann Firefox, um einen SOCKS-Proxy auf localhost zu verwenden: 9999.

Das Flag -N deaktiviert die interaktive Shell auf der Clientseite. Gibt es eine Möglichkeit, dies auf der Serverseite zu tun?

Neben der Deaktivierung des Root-Zugriffs, der Verwendung der RSA-Schlüsselauthentifizierung und der Änderung des Standardports; Gibt es andere offensichtliche Sicherheitspraktiken, die ich zu diesem Zweck befolgen sollte? Mein Ziel ist es, einfach den Webverkehr tunneln zu können.

CT.
quelle

Antworten:

15

Nach vier Jahren hat diese Antwort ein Update verdient. Während ich authorized_keysmich ursprünglich selbst verwendet habe und es wahrscheinlich in einigen ausgewählten Fällen immer noch verwenden würde, können Sie auch die sshd_configKonfigurationsdatei des zentralen Servers verwenden.

sshd_config

Sie können (für Ihren speziellen Anwendungsfall) bezeichnen eine Gruppe, wie proxy-onlyoder Matcheinzelne Benutzer. In sshd_config. Dies erfolgt nach den globalen Einstellungen und widerruft, wiederholt oder verfeinert einige der in den globalen Einstellungen angegebenen Einstellungen.

Hinweis: Einige der in verwendeten Syntax / Anweisungen sshd_config(5)sind auf der manSeite für dokumentiert ssh_config(5). Lesen Sie insbesondere den Abschnitt MUSTER von ssh_config(5).

Für eine Gruppe bedeutet dies, dass Ihr MatchBlock folgendermaßen beginnen würde:

Match group proxy-only

Sie können Matchdie folgenden Kriterien: User, Group, Host, LocalAddress, LocalPortund Address. Um mehreren Kriterien zu entsprechen, trennen Sie einfach die Kriterien-Muster-Paare ( group proxy-onlyoben) durch Kommas .

Innerhalb eines solchen Blocks, der der Kürze halber traditionell entsprechend eingerückt ist (aber nicht muss), können Sie dann die Einstellungen deklarieren, die Sie für die Benutzergruppe anwenden möchten, ohne jede einzelne authorized_keysDatei für Mitglieder dieser Gruppe bearbeiten zu müssen .

Die no-ptyEinstellung von authorized_keyswürde durch eine PermitTTY noEinstellung gespiegelt und command="/sbin/nologin"würde werden ForceCommand /sbin/nologin.

Darüber hinaus können Sie weitere Einstellungen vornehmen, um die Paranoia eines Administrators zu befriedigen, z. B. chrootden Benutzer in seinen Home-Ordner zu verschieben und am Ende Folgendes zu erhalten:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(Überprüfen Sie selbst, ob Sie die auskommentierten Zeilen benötigen oder möchten, und kommentieren Sie sie nach Bedarf aus.)

Das %hist ein Zeichen , das durch den Benutzers des Home - Verzeichnis ersetzt wird ( %uwürde die Benutzername und ergibt %%ein Prozentzeichen). Ich habe es ChrootDirectorybesonders nützlich gefunden, meine sftp-onlyBenutzer einzuschränken :

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Bitte beachten Sie, dass in einem Block nur bestimmte Anweisungen verwendet werden können Match. Konsultieren Sie die manSeite sshd_config(5)für Details (Suche nach Match).

autorisierte_Tasten

NB: Der Teil unter dieser Bemerkung war meine ursprüngliche Antwort. In der Zwischenzeit - aber es hängt auch von den Merkmalen Ihrer genauen sshdVersion ab - würde ich mich in den meisten Fällen für die oben beschriebene Methode entscheiden.

Ja, Sie können so feinkörnig wie Sie öffentliche Schlüssel zuweisen können. Zusätzlich zu Nologin, wie von Ajdecon empfohlen, würde ich vorschlagen, Folgendes vor dem Schlüsseleintrag in zu setzen authorized_keys:

no-pty ssh-rsa ...

Das no pty teilt der Serverseite mit, dass diesem Schlüssel kein Pseudo-Terminal zugewiesen werden soll.

Sie können auch die Ausführung von Nologin für einen bestimmten Schlüssel erzwingen, indem Sie Folgendes voranstellen:

command="/sbin/nologin",no-pty ssh-rsa ...
0xC0000022L
quelle
Bitte beachten Sie, no-ptydass der Benutzer des Schlüssels allein nicht daran gehindert wird, Befehle auszuführen. Siehe superuser.com/q/1230979/195460 .
Tad Lispy
3

Ändern Sie für jeden Nur-Tunneling-Benutzer die Anmeldeshell in / sbin / nologin. Auf diese Weise kann Ihr Benutzer nicht auf eine Shell auf dem Server zugreifen, aber dennoch eingerichtete SSH-Tunnel von seinem Client aus ausführen.

Ajdecon
quelle
0

Ich weiß, dass dies möglicherweise nicht die Antwort ist, nach der Sie suchen, aber haben Sie darüber nachgedacht, OpenVPN als Alternative zu verwenden?

Matt Beckman
quelle
0

Wenn Sie bereit sind, die Benutzer- / Passauthentifizierung aufzugeben und Schlüssel zum Anmelden zu verwenden, können Sie für jeden öffentlichen Schlüssel Parameter angeben .

Bemerkenswerte Parameter sind:

Befehl = "Befehl"

Gibt an, dass der Befehl immer dann ausgeführt wird, wenn dieser Schlüssel zur Authentifizierung verwendet wird. Der vom Benutzer angegebene Befehl (falls vorhanden) wird ignoriert.

und

beschränken

Aktivieren Sie alle Einschränkungen, dh deaktivieren Sie die Port-, Agent- und X11-Weiterleitung sowie die PTY-Zuweisung und Ausführung von ~ / .ssh / rc.

und schlussendlich

Portweiterleitung Aktivieren Sie die Portweiterleitung, die zuvor durch die Option "Einschränken" deaktiviert wurde.

Mit diesen können Sie den Benutzer dieses bestimmten Schlüsselpaares so gut wie einschränken, was er mit der SSH-Sitzung tun kann.

Es würde so aussehen:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
asdmin
quelle
Ich sehe, dass meine Antwort für serverfault.com/a/242411/13364 etwas redundant ist , aber ich habe sie wegen der Parameter 'einschränken' und 'Portweiterleitung' belassen, die meiner Meinung nach besser sind als 'no-pty'.
Asdmin