NEWS
SSH server + Tunnel
-
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:
- 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>
- 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.
- 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. - Den Port der im ssh Server eingetragen wurde von außen auf den Rechner weiter leiten
- 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 dortHost 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 wurdeNach 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.
-
@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
-
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.