Praktische Tipps, Beispiele und SSH-Tunnel

Praktische Tipps, Beispiele und SSH-Tunnel
Praktische Beispiele SSH, die Ihre Fähigkeiten als Remote-Systemadministrator auf ein neues Level heben. Die Befehle und Tipps helfen nicht nur bei der Nutzung SSH, sondern auch, sich besser im Netzwerk zu bewegen.

Das Wissen um einige Tricks ssh ist für jeden Systemadministrator, Netzwerkingenieur oder Sicherheitsspezialisten nützlich.

Praktische Beispiele für SSH

  1. SSH Socks-Proxy
  2. SSH-Tunnel (Portweiterleitung)
  3. SSH-Tunnel zu einem dritten Host
  4. Umgekehrter SSH-Tunnel
  5. Umgekehrter SSH-Proxy
  6. VPN-Installation über SSH
  7. SSH-Schlüssel kopieren (ssh-copy-id)
  8. Remote-Befehlsausführung (nicht interaktiv)
  9. Remote-Paketüberwachung und -ansicht in Wireshark
  10. Lokalen Ordner auf einen Remote-Server über SSH kopieren
  11. Remote-GUI-Anwendungen mit SSH X11-Weiterleitung
  12. Remote-Dateikopien mit rsync und SSH
  13. SSH über das Tor-Netzwerk
  14. SSH zu einer EC2-Instanz
  15. Textdateien mit VIM über ssh/scp bearbeiten
  16. Remote-SSH als lokalen Ordner mit SSHFS einbinden
  17. SSH-Multiplexing mit ControlPath
  18. Streaming von Videos über SSH mit VLC und SFTP
  19. Zwei-Faktor-Authentifizierung
  20. Hops zu Hosts mit SSH und -J
  21. Blockieren von Brute-Force-Versuchen in SSH mit iptables
  22. SSH Escape zur Änderung der Portweiterleitung

Zuerst die Grundlagen

Analyse der SSH-Befehlszeile

Im folgenden Beispiel werden Standardparameter verwendet, die häufig beim Verbinden mit einem Remote-Server vorkommen SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: Ausgaben der Debug-Informationen sind besonders nützlich bei der Analyse von Authentifizierungsproblemen. Sie können mehrmals verwendet werden, um zusätzliche Informationen anzuzeigen.
  • - p 22: Port für die Verbindung zum Remote-SSH-Server. 22 muss nicht angegeben werden, da dies der Standardwert ist. Wenn das Protokoll jedoch auf einem anderen Port läuft, geben Sie diesen mit dem Parameter an -p. Der lauscht Port wird in der Datei angegeben, sshd_config im Format Port 2222.
  • -C: Kompression für die Verbindung. Wenn Sie eine langsame Verbindung haben oder viel Text übertragen, kann dies die Verbindung beschleunigen.
  • neo@: Der Text vor dem @-Symbol gibt den Benutzernamen zur Authentifizierung auf dem Remote-Server an. Wenn er nicht angegeben wird, wird standardmäßig der Benutzername des Kontos verwendet, in das Sie gerade eingeloggt sind (~$ whoami). Der Benutzername kann auch durch den Parameter angegeben werden -l.
  • remoteserver: der Hostname, mit dem verbunden wird ssh, dies kann ein vollständiger Domainname, eine IP-Adresse oder ein beliebiger Host in der lokalen hosts-Datei sein. Um eine Verbindung zu einem Host herzustellen, der sowohl IPv4 als auch IPv6 unterstützt, kann ein Parameter in die Befehlszeile hinzugefügt werden. -4 oder -6 für die korrekte Auflösung.

Alle oben genannten Parameter sind optional, außer remoteserver.

Verwendung der Konfigurationsdatei

Obwohl viele mit der Datei vertraut sind sshd_config, gibt es auch eine Konfigurationsdatei für den Befehl ssh. Der Standardwert ~/.ssh/config, kann jedoch als Parameter für die Option definiert werden -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

In der obigen Beispielkonfigurationsdatei gibt es zwei Host-Einträge. Der erste gilt für alle Hosts und der Konfigurationsparameter Port 2222 wird für alle angewendet. Der zweite sagt, dass für den Host remoteserver ein anderer Benutzername, Port, FQDN und IdentityFile verwendet werden sollen.

Eine Konfigurationsdatei kann viel Zeit beim Eingeben von Zeichen sparen, indem sie es ermöglicht, eine erweiterte Konfiguration automatisch beim Verbinden mit bestimmten Hosts anzuwenden.

Dateien über SSH mit SCP kopieren

Der SSH-Client wird mit zwei weiteren sehr nützlichen Werkzeugen zum Kopieren von Dateien über eine verschlüsselte SSH-Verbindung. Im Folgenden finden Sie ein Beispiel für die Standardverwendung der Befehle scp und sftp. Beachten Sie, dass viele Parameter für SSH auch in diesen Befehlen gelten.

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

In diesem Beispiel wurde die Datei mypic.png auf remoteserver in den Ordner /media/data kopiert und in mypic_2.png.

umbenannt. scp Vergessen Sie nicht den Unterschied beim Portparameter. Viele, die -P, nicht -paus der Befehlszeile heraus arbeiten, machen dabei Fehler. Hier ist der Portparameter

, wie im SSH-Client! Sie vergessen es, aber keine Sorge, alle vergessen es. ftpFür diejenigen, die mit der Konsole vertraut sind sftp, sind viele der Befehle ähnlich in push, put und ls, wie das Herz es wünscht.

sftp neo@remoteserver

Praktische Beispiele

In vielen dieser Beispiele kann das Ergebnis auf verschiedene Arten erzielt werden. Wie in all unseren Lehrbüchern und Beispielen wird den praktischen Beispielen der Vorzug gegeben, die einfach ihre Aufgabe erfüllen.

1. SSH socks-Proxy

Die SSH-Proxy-Funktion Nummer 1 aus einem guten Grund. Sie ist leistungsfähiger, als viele annehmen, und gewährt Ihnen Zugriff auf jedes System, auf das der Remote-Server Zugriff hat, unter Verwendung fast jeder Anwendung. Der SSH-Client kann den Verkehr mit einem einfachen Befehl über den SOCKS-Proxy tunneln. Es ist wichtig zu verstehen, dass der Verkehr zu den Remote-Systemen vom Remote-Server ausgeht, was in den Protokollen des Webservers vermerkt sein wird.

localhost:~$ ssh -D 8888 user@remoteserver

localhost:~$ netstat -pan | grep 8888
tcp        0      0 127.0.0.1:8888       0.0.0.0:*               LISTEN      23880/ssh

Hier starten wir einen SOCKS-Proxy am TCP-Port 8888, der zweite Befehl überprüft, dass der Port im Listening-Modus aktiv ist. 127.0.0.1 gibt an, dass der Dienst nur auf localhost läuft. Wir können einen etwas anderen Befehl verwenden, um auf allen Schnittstellen, einschließlich Ethernet oder WLAN, zu hören. Dadurch können andere Anwendungen (Browser usw.) in unserem Netzwerk über den SSH-SOCKS-Proxy auf den Proxy-Dienst zugreifen.

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Jetzt können wir den Browser so einrichten, dass er sich mit dem SOCKS-Proxy verbindet. In Firefox wählen Sie Einstellungen | Allgemein | Netzwerkparameter. Geben Sie die IP-Adresse und den Port für die Verbindung an.

Praktische Tipps, Beispiele und SSH-Tunnel

Beachten Sie die Option am Ende des Formulars, damit die DNS-Anfragen des Browsers ebenfalls über den SOCKS-Proxy geleitet werden. Wenn Sie den Proxy-Server zur Verschlüsselung des Webverkehrs im lokalen Netzwerk verwenden, möchten Sie diese Option wahrscheinlich auswählen, damit die DNS-Anfragen über die SSH-Verbindung getunnelt werden.

Aktivierung des SOCKS-Proxys in Chrome

Das Starten von Chrome mit bestimmten Befehlszeilenparametern aktiviert den SOCKS-Proxy sowie das Tunneln von DNS-Anfragen aus dem Browser. Vertrauen ist gut, Kontrolle ist besser. Verwenden Sie tcpdump zur Überprüfung, dass die DNS-Anfragen nicht mehr sichtbar sind.

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Verwendung anderer Anwendungen mit dem Proxy

Bitte beachten Sie, dass viele andere Anwendungen ebenfalls SOCKS-Proxys verwenden können. Der Webbrowser ist nur die bekannteste davon. Einige Anwendungen verfügen über Konfigurationsoptionen zur Aktivierung des Proxy-Servers. Andere benötigen etwas Unterstützung durch ein Hilfsprogramm. Zum Beispiel proxychains ermöglicht das Starten von Microsoft RDP über den SOCKS-Proxy und mehr.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

Die Konfigurationsparameter für den SOCKS-Proxy werden in der Proxychains-Konfigurationsdatei festgelegt.

Tipp: Verwenden Sie einen Remote-Desktop von Linux auf Windows? Versuchen Sie den Client FreeRDP. Das ist eine modernere Umsetzung als rdesktop, mit einem viel flüssigeren Interaktionsverhalten.

Verwendung von SSH über einen Socks-Proxy

Sie sitzen in einem Café oder Hotel und müssen ein recht unzuverlässiges WiFi nutzen. Wir starten lokal einen SSH-Proxy auf dem Laptop und stellen einen SSH-Tunnel ins Heimnetzwerk zu einem lokalen Raspberry Pi her. Mit einem Browser oder anderen für den Socks-Proxy konfigurierten Anwendungen können wir auf alle Netzwerkdienste in unserem Heimnetzwerk zugreifen oder über die Heimverbindung ins Internet gehen. Alles zwischen Ihrem Laptop und dem Heimserver (über Wi-Fi und Internet bis zum Haus) ist im SSH-Tunnel verschlüsselt.

2. SSH-Tunnel (Port-Weiterleitung)

In seiner einfachsten Form öffnet ein SSH-Tunnel einfach einen Port in Ihrem lokalen System, der sich mit einem anderen Port am anderen Ende des Tunnels verbindet.

localhost:~$ ssh  -L 9999:127.0.0.1:80 user@remoteserver

Lassen Sie uns den Parameter analysieren -L. Er kann als lokale Hörseite angesehen werden. Daher wird im obigen Beispiel Port 9999 auf der localhost-Seite abgehört und über Port 80 an den remoteserver weitergeleitet. Beachten Sie, dass 127.0.0.1 sich auf localhost auf dem Remote-Server bezieht!

Steigen wir eine Stufe höher. Im nächsten Beispiel werden die Hörports mit anderen Knoten im lokalen Netzwerk verbunden.

localhost:~$ ssh  -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

In diesen Beispielen verbinden wir uns mit einem Port auf dem Webserver, aber es könnte auch ein Proxyserver oder ein anderer TCP-Dienst sein.

3. SSH-Tunnel zu einem externen Host

Wir können dieselben Parameter verwenden, um einen Tunnel vom Remote-Server zu einem anderen Dienst auf einem dritten System herzustellen.

localhost:~$ ssh  -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

In diesem Beispiel leiten wir den Tunnel vom remoteserver zu einem Webserver weiter, der auf 10.10.10.10 läuft. Der Verkehr vom remoteserver zu 10.10.10.10 befindet sich nicht mehr im SSH-Tunnel. Der Webserver auf 10.10.10.10 wird den remoteserver als Quelle für Webanforderungen betrachten.

4. Umgekehrter SSH-Tunnel

Hier konfigurieren wir einen hörenden Port auf dem Remote-Server, der sich zurück zu einem lokalen Port auf unserem localhost (oder einem anderen System) verbindet.

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

In dieser SSH-Sitzung wird eine Verbindung vom Port 1999 auf dem remoteserver zu Port 902 auf unserem lokalen Client hergestellt.

5. Umgekehrter SSH-Proxy

In diesem Fall richten wir einen SOCKS-Proxy in unserer SSH-Verbindung ein, allerdings lauscht der Proxy am entfernten Ende des Servers. Verbindungen zu diesem entfernten Proxy erscheinen nun aus dem Tunnel als Verkehr von unserem localhost.

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

Fehlerbehebung bei entfernten SSH-Tunneln

Wenn Sie Probleme mit den entfernten SSH-Optionen haben, überprüfen Sie mithilfe von netstat, an welche anderen Schnittstellen der Lauscher-Port angeschlossen ist. Obwohl wir in den Beispielen 0.0.0.0 angegeben haben, wenn der Wert GatewayPorts in sshd_config auf den Wert neingesetzt ist, wird der Lauscher nur an localhost (127.0.0.1) gebunden.

Sicherheitswarnung

Bitte beachten Sie, dass bei der Öffnung von Tunneln und SOCKS-Proxys interne Netzwerkressourcen für unsichere Netzwerke (z. B. das Internet!) zugänglich werden können. Dies kann eine ernsthafte Sicherheitsbedrohung darstellen, daher sollten Sie sicherstellen, dass Sie verstehen, was der Lauscher ist und auf was er Zugriff hat.

6. VPN über SSH einrichten

Ein allgemeiner Begriff unter den Spezialisten für Angriffsmethoden (Penetrationstester usw.) ist "Sprungbrett im Netzwerk". Nach der Herstellung einer Verbindung in einem System wird dieses System zum Gateway für den weiteren Zugriff auf das Netzwerk. Ein Sprungbrett, das es ermöglicht, sich seitlich zu bewegen.

Für ein solches Sprungbrett können wir SSH-Proxy und proxychains, verwenden, allerdings gibt es einige Einschränkungen. Zum Beispiel kann nicht direkt mit Sockets gearbeitet werden, daher können wir die Ports im Netzwerk nicht über Nmap SYN.

Mit dieser fortschrittlicheren VPN-Option wird die Verbindung auf Ebene 3. Dann können wir den Verkehr einfach über den Tunnel leiten, indem wir die Standard-Netzwerk-Routing verwenden.

Die Methode verwendet ssh, iptables, tun-Schnittstellen und Routing.

Zuerst müssen diese Parameter in sshd_configfestgelegt werden. Da wir Änderungen an den Schnittstellen sowohl des entfernten als auch des clientseitigen Systems vornehmen, benötigen wir Root-Rechte auf beiden Seiten.

PermitRootLogin yes
PermitTunnel yes

Dann stellen wir die SSH-Verbindung mit einem Parameter her, der die Initialisierung der tun-Geräte anfordert.

localhost:~# ssh -v -w any root@remoteserver

Jetzt sollten wir ein tun-Gerät bei der Anzeige der Schnittstellen haben (# ip a). Der nächste Schritt fügt die IP-Adressen zu den Tunnel-Schnittstellen hinzu.

SSH-Client-Seite:

localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up

SSH-Serverseite:

remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up

Jetzt haben wir eine direkte Route zum anderen Host (route -n und ping 10.10.10.10).

Jedes Subnetz kann über einen Host auf der anderen Seite geroutet werden.

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

Auf der entfernten Seite muss aktiviert werden ip_forward und iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

Boom! VPN über einen SSH-Tunnel auf Netzwerkebene 3. Das ist bereits ein Erfolg.

Falls Probleme auftreten, verwenden Sie tcpdump und ping, um die Ursache festzustellen. Da wir auf Ebene 3 arbeiten, werden unsere ICMP-Pakete durch diesen Tunnel geleitet.

7. SSH-Schlüssel kopieren (ssh-copy-id)

Es gibt mehrere Möglichkeiten, aber dieser Befehl spart Zeit, um Dateien nicht manuell zu kopieren. Er kopiert einfach ~/.ssh/id_rsa.pub (oder den Standard-Schlüssel) von Ihrem System nach ~/.ssh/authorized_keys auf dem entfernten Server.

localhost:~$ ssh-copy-id user@remoteserver

8. Remote-Befehlsausführung (nicht interaktiv)

Der Befehl ssh kann mit anderen Befehlen für eine reguläre benutzerfreundliche Schnittstelle verbunden werden. Fügen Sie einfach den Befehl, den Sie auf dem entfernten Host ausführen möchten, als letztes Argument in Anführungszeichen hinzu.

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

In diesem Beispiel grep wird auf dem lokalen System ausgeführt, nachdem das Protokoll über den SSH-Kanal heruntergeladen wurde. Wenn die Datei groß ist, ist es bequemer, grep auf der entfernten Seite zu starten, indem Sie einfach beide Befehle in doppelte Anführungszeichen setzen.

Ein weiteres Beispiel erfüllt die gleiche Funktion wie ssh-copy-id aus Beispiel 7.

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. Remote-Paketüberwachung und -ansicht in Wireshark

Ich habe eines unserer Beispiele von tcpdump. Verwenden Sie es, um Pakete remote abzufangen und die Ergebnisse direkt in der GUI von lokalem Wireshark anzuzeigen.

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. Lokalen Ordner über SSH auf einen entfernten Server kopieren

Ein schöner Trick, der den Ordner mit Hilfe von bzip2 komprimiert (das ist das -j Argument im Befehl tar), und danach den Stream bzip2 auf der anderen Seite extrahiert und ein Duplikat des Ordners auf dem entfernten Server erstellt.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. Remote-GUI-Anwendungen mit SSH X11-Weiterleitung

Wenn auf dem Client und dem entfernten Server 'X' installiert ist, kann man einen GUI-Befehl remote ausführen, wobei sich das Fenster auf Ihrem lokalen Desktop öffnet. Diese Funktion gibt es schon lange, ist aber weiterhin sehr nützlich. Führen Sie einen Remote-Webbrowser oder sogar die VMWare Workstation-Konsole aus, wie ich es in diesem Beispiel mache.

localhost:~$ ssh -X remoteserver vmware

Es wird eine Zeile benötigt X11Forwarding ja in der Datei sshd_config.

12. Fernübertragung von Dateien mit rsync und SSH

rsync ist in vielerlei Hinsicht bequemer scp, wenn eine regelmäßige Sicherung eines Verzeichnisses, einer großen Anzahl von Dateien oder sehr großen Dateien erforderlich ist. Es gibt eine Wiederherstellungsfunktion für fehlgeschlagene Übertragungen und kopiert nur die geänderten Dateien, was den Traffic und die Zeit spart.

In diesem Beispiel wird Kompression verwendet gzip (-z) und der Archivmodus (-a), der die rekursive Kopie umfasst.

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH über das Tor-Netzwerk

Das anonyme Tor-Netzwerk kann den SSH-Verkehr mit dem Befehl torsockstunneln. Der folgende Befehl leitet den SSH-Proxy über Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsocks wird den Proxy-Port 9050 auf localhost verwenden. Wie immer, wenn Sie Tor verwenden, müssen Sie ernsthaft überprüfen, welcher Verkehr getunnelt wird und andere Probleme der Betriebssicherheit (opsec). Wohin gehen Ihre DNS-Anfragen?

14. SSH zu einer EC2-Instanz

Um sich mit einer EC2-Instanz zu verbinden, ist ein privater Schlüssel erforderlich. Laden Sie ihn (Erweiterung .pem) aus dem Amazon EC2-Dashboard herunter und ändern Sie die Berechtigungen (chmod 400 my-ec2-ssh-key.pem). Bewahren Sie den Schlüssel an einem sicheren Ort auf oder legen Sie ihn in Ihren Ordner ~/ .ssh/.

localhost:~$ ssh -i ~/ .ssh/my-ec2-key.pem ubuntu@my-ec2-public

Parameter -i weist den SSH-Client einfach an, diesen Schlüssel zu verwenden. Die Datei ~/.ssh/config eignet sich hervorragend für die automatische Konfiguration der Schlüsselverwendung beim Verbinden mit dem EC2-Host.

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/ .ssh/my-ec2-key.pem

15. Bearbeiten von Textdateien mit VIM über ssh/scp

Für alle Fans emacs wird dieser Ratschlag etwas Zeit sparen. Mit emacs werden Dateien über scp mit nur einem Befehl bearbeitet. Diese Methode erstellt einfach eine Datei lokal in /tmp, und kopiert sie dann zurück, sobald wir sie aus emacs.

localhost:~$ vim scp://user@remoteserver//etc/hosts

Hinweis: Das Format weicht etwas vom Gewöhnlichen ab scp. Nach dem Host haben wir ein doppeltes //. Dies ist ein Verweis auf den absoluten Pfad. Ein Schrägstrich bedeutet einen Pfad relativ zum Home-Verzeichnis users.

**Warnung** (netrw) kann die Methode nicht bestimmen (Format: protocol://[user@]hostname[:port]/[path])

Wenn Sie auf einen solchen Fehler stoßen, überprüfen Sie das Format des Befehls erneut. Normalerweise deutet dies auf einen Syntaxfehler hin.

16. Entfernen von SSH als lokales Verzeichnis mit SSHFS

Mit sshfs — Dateisystem-Client ssh — können wir ein lokales Verzeichnis mit einem entfernten Standort über alle Dateiinteraktionen in einer verschlüsselten Sitzung verbinden ssh.

localhost:~$ apt install sshfs

Auf Ubuntu und Debian installieren wir das Paket sshfs, und dann montieren wir einfach den entfernten Speicherort an unser System.

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. SSH-Multiplexing mit ControlPath

Standardmäßig wird bei einer bestehenden Verbindung zu einem entfernten Server über ssh eine zweite Verbindung über ssh oder scp eine neue Sitzung mit zusätzlicher Authentifizierung eingerichtet. Die Option ControlPath ermöglicht es, die bestehende Sitzung für alle nachfolgenden Verbindungen zu nutzen. Dies beschleunigt den Prozess erheblich: Der Effekt ist selbst im lokalen Netzwerk spürbar, umso mehr bei der Verbindung zu entfernten Ressourcen.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath gibt den Socket an, den neue Verbindungen nutzen, um auf eine aktive Sitzung zu überprüfen ssh. Die letzte Option bedeutet, dass die bestehende Sitzung sogar 10 Minuten nach dem Verlassen der Konsole offen bleibt, sodass Sie in dieser Zeit erneut über den bestehenden Socket eine Verbindung herstellen können. Weitere Informationen finden Sie in der Anleitung ssh_config man.

18. Streaming-Video über SSH mit VLC und SFTP

Selbst langjährige Nutzer ssh und vlc (Video Lan Client) wissen nicht immer über diese praktische Option Bescheid, wenn es erforderlich ist, Video über das Netzwerk abzuspielen. In den Einstellungen Datei | Netzwerkstream öffnen des Programms vlc kann das Speicherort als sftp://eingegeben werden. Wenn ein Passwort erforderlich ist, erscheint eine Aufforderung.

sftp://remoteserver//media/uploads/myvideo.mkv

19. Zwei-Faktor-Authentication

Die gleiche Zwei-Faktor-Authentifizierung wie bei Ihrem Bankkonto oder Google-Konto gilt auch für den SSH-Dienst.

Natürlich, ssh hat ursprünglich die Funktion der Zwei-Faktor-Authentifizierung, die ein Passwort und einen SSH-Schlüssel umfasst. Der Vorteil eines Hardware-Tokens oder der Google Authenticator-Anwendung besteht darin, dass dies normalerweise ein anderes physisches Gerät ist.

Siehe unser 8-Minuten-Video-Tutorial zur Verwendung von Google Authenticator und SSH.

20. Hops über Hosts mit ssh und -J

Wenn Sie aufgrund von Netzsegmentierung mehrere SSH-Hosts durchlaufen müssen, um zum endgültigen Zielnetz zu gelangen, spart der Schalter -J Ihnen Zeit.

localhost:~$ ssh -J host1,host2,host3 user@host4.internal

Hier ist es wichtig zu verstehen, dass dies nicht mit dem Befehl ssh host1, dann user@host1:~$ ssh host2 usw. Der Parameter -J verwendet geschickt die Umleitung, sodass localhost eine Sitzung mit dem nächsten Host in der Kette herstellt. In dem obigen Beispiel authentifiziert sich unser localhost also bei host4. Das bedeutet, dass unsere localhost-Schlüssel verwendet werden und die Sitzung von localhost zu host4 vollständig verschlüsselt ist.

Für diese Möglichkeit in ssh_config geben Sie die Konfigurationsoption ProxyJumpan. Wenn Sie regelmäßig mehrere Hosts durchqueren müssen, spart die Automatisierung über die Konfiguration viel Zeit.

21. Blockierung von Brute-Force-Versuchen bei SSH mit iptables

Jeder, der einen SSH-Dienst verwaltet und die Protokolle durchgesehen hat, kennt die Anzahl der Brute-Force-Versuche, die jede Stunde, jeden Tag auftreten. Ein schneller Weg, um den Lärm in den Protokollen zu reduzieren, besteht darin, SSH auf einen nicht standardmäßigen Port zu verlagern. Nehmen Sie Änderungen an der Datei vor sshd_config mit der Konfigurationsoption Port##.

Mit Hilfe von iptables lassen sich ebenfalls ganz einfach blockieren, wenn ein bestimmter Schwellenwert erreicht ist. Eine einfache Möglichkeit, dies zu tun, besteht darin, OSSECzu verwenden, da es nicht nur SSH blockiert, sondern auch eine Menge anderer Maßnahmen zur Erkennung von Eindringversuchen auf Basis des Hostnamens (HIDS) durchführt.

22. SSH Escape zur Änderung der Portweiterleitung

Und unser letztes Beispiel ssh soll dazu dienen, die Portweiterleitung zur Laufzeit innerhalb einer bestehenden Sitzung zu ändern. sshStellen Sie sich folgendes Szenario vor. Sie sind tief im Netzwerk; möglicherweise haben Sie über ein halbes Dutzend Hosts gewechselt, und Sie benötigen einen lokalen Port auf Ihrer Workstation, der auf Microsoft SMB eines alten Windows 2003 Systems umgeleitet ist (erinnert sich noch jemand an ms08-67?).

Drücken Sie enter, versuchen Sie, in die Konsole einzugeben ~C. Dies ist eine Steuersequenz in der Sitzung, die es Ihnen ermöglicht, Änderungen an der bestehenden Verbindung vorzunehmen.

localhost:~$ ~C
ssh> -h
Befehle:
      -L[bind_address:]port:host:hostport    Lokale Weiterleitung anfordern
      -R[bind_address:]port:host:hostport    Remote-Weiterleitung anfordern
      -D[bind_address:]port                  Dynamische Weiterleitung anfordern
      -KL[bind_address:]port                 Lokale Weiterleitung abbrechen
      -KR[bind_address:]port                 Remote-Weiterleitung abbrechen
      -KD[bind_address:]port                 Dynamische Weiterleitung abbrechen
ssh> -L 1445:remote-win2k3:445
Portweiterleitung.

Hier sehen Sie, dass wir unseren lokalen Port 1445 auf den Windows 2003 Host umgeleitet haben, den wir im internen Netzwerk gefunden haben. Starten Sie einfach msfconsole, und Sie können weitermachen (vorausgesetzt, Sie haben vor, diesen Host zu nutzen).

Abschluss

Diese Beispiele, Ratschläge und Befehle ssh sollten einen Ausgangspunkt bieten; zusätzliche Informationen zu jedem der Teams und deren Möglichkeiten sind auf den Hilfeseiten verfügbar (man ssh, man ssh_config, man sshd_config).

Ich war immer fasziniert von der Möglichkeit, auf Systeme zuzugreifen und Befehle von überall auf der Welt auszuführen. Durch die Weiterentwicklung meiner Fähigkeiten mit Werkzeugen wie ssh werden Sie in jedem Spiel effizienter, das Sie spielen.

Quelle: habr.com

60GB SSD 8Gb DDR4