Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. SSH server + Tunnel

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SSH server + Tunnel

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      ignis-draco last edited by ignis-draco

      SSH Tunnel aufbauen

      Vorwort:

      Was ist das ziel?

      Beliebige Rechner bzw. Ports im eigenden Netzwerk durch einen sicheren Tunnel erreichen.

      Was wird benötigt?:

      • Router mit Internet verbindung
      • Linux Recher (egal ob VM oder Raspberry)
      • Rechner mit Terminal (ich verwede auch dort ein Linux Rechner)
        optional:
      • account bei einem Dyndns Anbieter.

      Nebensatz:

      Alle Befehle beziehen sich auf eine Debian basierte Linux Versione (z.b. Ubuntu/RaspberryOS usw.)

      Server einrichten und härten

      Auf dem Server:

      1. Benutzer einrichten
        Man sollte keinen Standard Benutzer (z.b. pi,admin,oracle,postgres,user,www,web,minerstat,) verwenden.
        Einen neuen Benutzer kann anlegen:
      sudo adduser <User>
      
      1. ssh Server Installieren
      sudo apt install openssh-server
      

      Konfigurieren

      Server config Datei editieren mit z.b.:

      sudo nano /etc/ssh/sshd_config
      
      Nr. Zeile von zu
      a 13 Port 22 Port XXXX
      b 19 HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key
      c 32 PermitRootLogin [no/yes] PermitRootLogin no
      d 37 PubkeyAuthentication yes PubkeyAuthentication yes
      e END AllowUsers <BenuterzerName>
      f END Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr

      Begründung

      a. Der Port 22 wird sehr viel Angefragt ist es besser einen Port >1000 zu wählen
      b. ecdsa ist kein sichere host key mehr.
      c. Prüfen ob da "no" steht da sonst ein login durch den Benutzer root möglich ist. [Es sollte eigentlich immer "no" stehen]
      d. Prüfen ob da "yes" steht damit der Login mit Keys funktioniert.
      e. Es wird nur einem Benutzer erlaubt sich einzuloggen
      f. Unsicher Verschlüsselungen deaktivieren und Chacha20 die höchste Priorität geben.

      Keys erneuern und server starten

      Des weiteren sollten die alten ssh Host keys gelöscht werden damit sie neu erzeugt werden.

      sudo rm /etc/ssh/ssh_host_ecdsa_key* 
      sudo rm /etc/ssh/ssh_host_ed25519*
      sudo rm /etc/ssh/ssh_host_rsa_key*
      

      und der autostart des SSH server aktiviert werden.

      sudo systemctl enable sshd.service
      

      Zum schluss wäre es noch sinnvoll einmal den Rechner neuzustarten. So kann man sicherstellen das auch nach z.b. einem Stromausfall alles normal laufen sollte.

      Verbindungs test

      Von einem Client bauen wir jetzt testweise eine Verbindung auf.

      ssh <User>@<IP> -p <Port>
      

      <User> = Benutzername z.b. den neu angelegten
      <IP>= IP Adresse des servers
      <PORT>= den SSH port der in die config Datei eingetragen wurde
      Nach Eingabe des Passwort sollte man sich auf dem Server befinden.

      Optional aber sehr sinnvoll wäre es auch noch Fail2Ban zu installatiern und einzurichten damit brute force Angriffe unterbinden werden.

      Client Konfigurieren

      Nach dem die grundsätzlich Verbindung funktioniert benötigen wir jetzt noch etwas sicheres als ein Password.
      Zu erste wird ein SSH-Key auf dem Client erzeugt.

      ssh-keygen -t ed25519 -f ~/.ssh/HomeKey
      

      Dieser wird dann auf den Server kopiert.

      ssh-copy-id -i ~/.ssh/HoemKey <User>@<IP> -p <Port>
      

      jetzt kann überprüft werden ob die Verbindung mit dem Key klappt.

      ssh -i ~/.ssh/HomeKey <User>@<IP> -p <Port>
      

      Nach eingabe des Passwort das bei der Key Erstellung gesetzt wurde sollte man auch wieder die Verbindung zum Server haben.

      Abschluss

      Wenn bis hier alles geht solte man noch den Login mit Passwort im Server deaktivieren.
      Also auf dem Server wieder
      sudo nano /etc/ssh/sshd_config

      Zeile von zu
      56 PasswordAuthentication yes PasswordAuthentication no

      Port öffnen und Dyndns einrichten

      Dieser Part ist leider sehr umfangreich da es unter anderem abhängig davon ist was für einen Router und Internetdienstanbieter man hat.

      Daher fasse ich mich nur algemein.

      1. Man sollte sicherstellen das der Server immer die gleiche IP bekommt. Also entwerder eine Statische einrichten oder
        den DHCP (meist im Router) so einrichten das er immer die gleiche vergiebt.
      2. Den Port der im ssh Server eingetragen wurde von außen auf den Rechner weiter leiten
      3. Da bei den meisten Anschlüssen die öffentlich Ip nicht fest ist wird ein Dyndns anbieter benötigt so dann man einen Namen hat unter dem man immer die Aktuelle IP nach schlagen kann. Je nach Anbieter müssen dafür unterschiedliche Sachen konfiguriert werden.

      Aufbau eines Tunnels

      Der einfachste Weg einen ssh Tunnel zu erzeugen ist auf dem Client die Datei
      .ssh/config
      anzulegen und dort

      Host ioBroker
              HostName <DynDNS Name>
              User <User>
              Port <Port>
              IdentityFile ~/.ssh/HoemKey
              LocalForward 8080 <IP>:8081
      

      <DynDNS Name> = DynDNS Name oder öffentliche IP adresse
      <IP>= IP adresse des servers (z.b. IOBroker)
      8081= Port bei dem entfernten Rechner (Ziel)
      8080= Lokaler Port kann fast beliebig sein
      <PORT>= den SSH port der in die config Datei eingetragen wurde

      Nach dem Speichern müssen noch die Rechte richtig gestezt werden

      chmod 600 ~/.ssh/config
      

      Jetzt kann einfach durch ein

      ssh -N ioBroker
      

      der Tunnel gestarte werden (Key Passwort). Bei dem Client kann man jetzt im Webbowser

      http://127.0.0.1:8080
      der Tunnel genutzt werden um z.b. auf das Admin interface im Iobroker zu kommen.

      Nachwort

      Die ssh config Datei ist sehr mächtig begriffe zum Googlen wäre z.b. "ssh config jumphost", "ssh config multiplexing"

      Wartung:

      Der Server sollte immer aktuell gehalten werden und man sollte daran denken das wenn man ihn dauerhaft ausschalte auch den offenen Port im Router wieder entfernt.

      Zwischen durch sollte man sich mit

      sudo journalctl -b -u ssh
      

      Die Logs vom ssh server anschauen ob da was komisches drin passiert.

      Windows Clients

      Auch für Windows gibt es möglichkeiten den ssh Tunnel zu benutzen. Ich persönlich verwende meinstens das "Windows-Subsystem für Linux" (WSL) oder MobaXterm für ssh und ssh Tunnels.

      Ich hoffe ich konnte damit etwas weiter helfen und würde mich über etwas feedback freuen.

      FredF 1 Reply Last reply Reply Quote 0
      • FredF
        FredF Most Active Forum Testing @ignis-draco last edited by

        @ignis-draco sagte in SSH server + Tunnel:
        Danke für diese Anleitung, werde ich wenn es die Zeit zulässt sicherlich mal probieren.
        Ist das nicht widersprüchlich:

        c 32 PermitRootLogin no PermitRootLogin no

        zu

        c. Prüfen ob da "no" steht da sonst ein login durch den Benutzer root möglich ist

        1 Reply Last reply Reply Quote 0
        • I
          ignis-draco last edited by ignis-draco

          @FredF

          Ja stimmt ich habe es hoffentlich jetzt deutlicher gemacht. Es sollte halt schon standard sein bei einem aktuelle Linux. Ich habe es mir nur halt angewöhnt es immer einmal zu Überprüfen.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          864
          Online

          31.7k
          Users

          79.8k
          Topics

          1.3m
          Posts

          2
          3
          421
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo