Zum Inhalt springen

SSH/Gateway: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „z. B. “ durch „beispielsweise “
 
(111 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Ein '''SSH-Gateway''' soll einen problemlosen sicheren Zugriff auf entfernte Rechner ermöglichen
'''SSH-Gateway''' - vermittelt verschlüsselte Tunnelverbindungen zwischen SSH-Clients


== Beschreibung ==
== Beschreibung ==
* Supporter und Kunde bauten aktiv einen SSH-Tunnel zum SSH-Gateway auf
; Teilnehmer bauen aktiv einen Tunnel zum Gateway auf
** Gateway ist ein SSH-Server im Internet
* Keine Portweiterleitungen erforderlich
** SSH-Gateway vermittelt den Kontakt zum Support-Rechner
* Keine Namensauflösung der Teilnehmer erforderlich
* Keine Firewall-Anpassungen am Client erforderlich
; Gateway vermittelt den Kontakt
* Keine Namensauflösung des Clients erforderlich
* Gateway ist ein SSH-Server im Internet
; Trennung verschiedener Kunden/Dienstleiter
* Je Tunnel (Kombination aus Kunde/Dienstleiter) ein Zugang
 
; Szenario
{| class="wikitable sortable"
! Hostname !! Username
|-
| gateway.foxtom.de || sshTnlKunde001
|-
| kunde001 || support
|-
| support || user
|}
 
== Gateway ==
=== Kunden-Zugang ===
==== Tunnel-Benutzerkonto ====
'''root@gateway#''' useradd --create-home --groups users --shell /bin/bash --comment "Tunnel-User Kunden001" sshTnlKunde001
<!-- Ist ein Loginshell notwendig?, Ist die Gruppe users erforderlich? -->
 
==== Passwort vergeben ====
'''root@gateway#''' passwd sshTnlKunde001
New password:
Retype new password:
passwd: password updated successfully
 
==== Zugang testen ====
'''user@support#''' ssh -p22 sshTnlKunde001@gateway.foxtom.de
sshTnlKunde001@gateway's password:
 
=== SSH-Server ===
; UNIX Sockets
Damit sich Kunden nicht mit dem System eines anderen Kunden verbinden können, werden hier UNIX Sockets verwandt.
* Diese besitzen im Gegensatz zu TCP-Ports eine Zugriffssteuerung
 
Damit der Socket beim Abbau des Tunnels eine neue Socket-Datei erstellt wird, wird die Konfiguration des SSH-Dienstes ergänzt
* ein erneuter Aufbau des Tunnels ist ansonsten mit dem gleichen Socket-Namen nicht möglich
 
''/etc/ssh/sshd_config''
# Specifies whether to remove an existing Unix-domain socket file for local or remote port forwarding before creating a new one.
StreamLocalBindUnlink yes
 
== Kunden-Rechner ==
=== Tunnel-Benutzerkonto ===
'''root@kunde001#''' useradd -m -G users -s /bin/bash kunde001Tnl


=== Szenario ===
=== SSH-Key erzeugen ===
; Gateway
'''root@kunde001#''' sudo -u support -i
* Hostname: ''gateway.foxtom.de''
'''support@kunde001$''' ssh-keygen -f /home/support/.ssh/gateway -t ecdsa
* Port: ''2227''
* Username: ''sshTnlKunde001''


; Kundenrechner
Keine Passphrase eingeben (Enter)
* Hostname: ''kunde001''
* Username: ''support''


; Support-Rechner
=== Public-Key übertragen ===
* Hostname: ''support''
'''support@kunde001$''' ssh-copy-id -p22 -i /home/support/.ssh/gateway.foxtom.de.pub sshTnlKunde001@gateway.foxtom.de
* Username: ''user''


== Automatisierung ==
=== Public-Key-Zugang testen ===
=== Systemd konfigurieren ===
'''support@kunde001$''' ssh -i /home/support/.ssh/gateway.foxtom.de -p22 sshTnlKunde001@gateway.foxtom.de
Systemd-Service-Unit erstellen


'''/etc/systemd/system/ssh-reverse@.service'''
# [[SSH/Fingerprint |Fingerprint vergleichen]]
# Bestätigung durch Eingabe von "yes"
Fehlermeldung "PTY allocation request failed on channel 0" und die Verbindung wird abgebrochen. Das ist beabsichtigt.
 
=== Automatisierung ===
==== Systemd konfigurieren ====
; Systemd-Service-Unit
 
''/etc/systemd/system/ssh-reverse@.service''
  [Unit]
  [Unit]
  Description=Reverse SSH Tunnel Service
  Description=Reverse SSH Tunnel Service
Zeile 55: Zeile 102:
* Hier ergibt das auf dem Gateway TCP-Sockets mit den Ports 4022 und 40443.
* Hier ergibt das auf dem Gateway TCP-Sockets mit den Ports 4022 und 40443.


Die Parameter für die Instanzen sollten über Drop-In-Files angepaßt werden:
; Parameter für Instanzen
* Drop-In-Files


'''/etc/systemd/system/ssh-reverse@22.service.d/tunnel.conf'''
''/etc/systemd/system/ssh-reverse@22.service.d/tunnel.conf''
  [Service]
  [Service]
  # Port of the tunnel at the remote gateway
  # Port of the tunnel at the remote gateway
Zeile 68: Zeile 116:
  ##Environment="SSHKEY=/home/support/.ssh/gateway"
  ##Environment="SSHKEY=/home/support/.ssh/gateway"


'''/etc/systemd/system/ssh-reverse@443.service.d/tunnel.conf'''
''/etc/systemd/system/ssh-reverse@443.service.d/tunnel.conf''
  [Service]
  [Service]
  # Port of the tunnel at the remote gateway
  # Port of the tunnel at the remote gateway
Zeile 82: Zeile 130:
* Außerdem wird ein anderer User auf dem Gateway verwendet.
* Außerdem wird ein anderer User auf dem Gateway verwendet.


== Konfiguration ==
[[Kategorie:SSH]]
=== Gateway ===
; Nutzung von UNIX Sockets
Damit sich Kunden nicht mit dem System eines anderen Kunden verbinden können, werden hier UNIX Sockets verwandt.
* Diese besitzen im Gegensatz zu TCP-Ports eine Zugriffssteuerung


Damit der Socket beim Abbau des Tunnels eine neue Socket-Datei erstellt wird, wird die Konfiguration des SSH-Dienstes ergänzt
== Support-Rechner ==
* ein erneuter Aufbau des Tunnels ist ansonsten mit dem gleichen Socket-Namen nicht möglich
=== Public-Key-Zugang ===
==== Public-Key übertragen ====
'''user@support#''' ssh-copy-id -p22 sshTnlKunde001@gateway.foxtom.de


'''/etc/ssh/sshd_config'''
==== Public-Key-Zugang testen ====
# Specifies whether to remove an existing Unix-domain socket file
'''user@support#''' ssh -p22 sshTnlKunde001@gateway.foxtom.de
# for local or remote port forwarding before creating a new one.
  '''sshTnlKunde001@gateway:~$''' exit
  '''StreamLocalBindUnlink yes'''


==== Kunden-Zugang ====
== Anwendung ==
; Trennung verschiedener Kunden/Dienstleiter
=== Public-Key-Zugang ===
Auf dem Gateway je Tunnel (Kombination aus Kunde/Dienstleiter) ein Zugang angelegen
  '''support@kunde001$''' ssh -i /home/support/.ssh/gateway.foxtom.de.pub -p22 sshTnlKunde001@gateway.foxtom.de
===== Tunnel-Benutzerkonto =====
# Fingerprint vergleichen
  '''root@gateway#''' useradd --create-home --groups users --shell /bin/bash --comment "Tunnel-User Kunden001" sshTnlKunde001
# Bestätigung durch Eingabe von "yes"
 
<!-- Ist ein Loginshell notwendig?, Ist die Gruppe users erforderlich? -->


===== Passwort vergeben =====
'''"PTY allocation request failed on channel 0"'''  
'''root@gateway#''' passwd sshTnlKunde001
New password:
Retype new password:
passwd: password updated successfully


===== Zugang testen =====
Fehlermeldung und die Verbindung wird abgebrochen, das ist beabsichtigt.
'''user@support#''' ssh -p2227 sshTnlKunde001@gateway.foxtom.de
sshTnlKunde001@gateway's password:


=== Kunden-Rechner ===
=== Tunnel starten ===
==== Tunnel-Benutzerkonto ====
  '''user@support$''' ssh -nNT -L 10022:localhost:10001 sshTnlKunde001@gateway
  '''root@kunde001#''' useradd -m -G users -s /bin/bash kunde001Tnl


==== SSH-Key erzeugen ====
Damit wird ein Tunnel vom lokalen Port 10022 zum Port 10001 auf dem Gateway erstellt
'''root@kunde001#''' sudo -u support -i
'''support@kunde001$''' ssh-keygen -f /home/support/.ssh/gateway -t ecdsa
 
Passphrase nicht verwenden (Enter)
 
==== Public-Key übertragen ====
'''support@kunde001$''' ssh-copy-id -p2227 -i /home/support/.ssh/gateway.foxtom.de.pub sshTnlKunde001@gateway.foxtom.de
 
==== Public-Key-Zugang testen ====
'''support@kunde001$''' ssh -i /home/support/.ssh/gateway.foxtom.de -p2227 sshTnlKunde001@gateway.foxtom.de
 
# [[ssh:fingerprint |Fingerprint vergleichen]]
# Bestätigung durch Eingabe von "yes"
Fehlermeldung "PTY allocation request failed on channel 0" und die Verbindung wird abgebrochen. Das ist beabsichtigt.


==== Tunnelaufbau ====
=== Tunnelaufbau ===
'''Beispiel'''
; Manueller Aufbau
  '''support@debian01:~$''' ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i ~/.ssh/gateway.foxtom.de -R 22277:localhost:2227 -p2227 sshTnlKunde001@gateway.foxtom.de
  '''support@debian01:~$''' ssh -N -T -C -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i '''${SSHKEY}''' -R '''${GWSOCK}''':localhost:'''${LOCALPORT}''' '''${GWUSER}'''@'''${GWHOST}'''
 
'''Manueller Aufbau'''
'''support@kunde001$''' ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i '''${SSHKEY}''' -R '''${GWSOCK}''':localhost:'''${LOCALPORT}''' '''${GWUSER}'''@'''${GWHOST}'''


{| class="wikitable sortable"
{| class="wikitable sortable"
Zeile 157: Zeile 176:
| '''-o StrictHostKeyChecking=no''' ||
| '''-o StrictHostKeyChecking=no''' ||
|-
|-
| '''-i ''' ||
| '''-i ${SSHKEY}''' ||absoluter Pfad zum SSH-Key, beispielsweise  ~/.ssh/gateway
|-
|-
| '''-R''' ||  wird ein reverse Tunnel erstellt, um vom Gateway aus auf den Kundenrechner zugreifen zu können
| '''-R ${GWSOCK}:localhost:${LOCALPORT}''' ||  Reverse Tunnel erstellt, um vom Gateway aus auf den Kundenrechner zugreifen zu können
|}
|}


Zeile 166: Zeile 185:
! Parameter !! Bedeutung
! Parameter !! Bedeutung
|-
|-
| '''${SSHKEY}''' || Der komplette Pfad zum SSH-Key, z.B. ~/.ssh/gateway
| '''${SSHKEY}''' || Der komplette Pfad zum SSH-Key, beispielsweise  ~/.ssh/gateway
|-
|-
| '''${GWSOCK}''' || Der Socket, welcher auf dem Gateway für den Tunnel verwendet wird
| '''${GWSOCK}''' || Der Socket, welcher auf dem Gateway für den Tunnel verwendet wird
* Diesen muss man dort ansprechen, um sich mit dem Zielsystem zu verbinden
* Diesen muss man dort ansprechen, um sich mit dem Zielsystem zu verbinden
* Werden mehrere Tunnel zum Gateway aufgebaut (was recht wahrscheinlich ist), muss natürlich für jeden ein anderer Socket verwendet werden
* Werden mehrere Tunnel zum Gateway aufgebaut (was recht wahrscheinlich ist), muss jeweils ein anderer Socket verwendet werden
* Ein Socket kann ein TCP- oder ein UNIX-Socket sein. Ein TCP-Socket ist einfach eine Port-Nummer
* Ein Socket kann ein TCP- oder ein UNIX-Socket sein. Ein TCP-Socket ist einfach eine Port-Nummer
* Da zum Tunnelaufbau normale User (nicht root) genutzt werden, können dabei nur Ports über 1024 verwendet werden. Bei einem UNIX-Socket muss dessen kompletter Pfad angegeben werden, z.B. "/home/ssh-kunde1/zielsystem3.socket" (nicht "~/zielsystem3.socket")
* Da zum Tunnelaufbau normale User (nicht root) genutzt werden, können dabei nur Ports über 1024 verwendet werden. Bei einem UNIX-Socket muss dessen kompletter Pfad angegeben werden, beispielsweise  "/home/ssh-kunde1/zielsystem3.socket" (nicht "~/zielsystem3.socket")
|-
|-
| '''${LOCALPORT}''' ||
| '''${LOCALPORT}''' ||
Zeile 183: Zeile 202:
|-
|-
| '''${GWHOST}''' ||
| '''${GWHOST}''' ||
* Der Hostname des Gateways, also z.B. "gateway".
* Der Hostname des Gateways, also beispielsweise  "gateway".
|}
|}


; Beispiel
$ ssh -N -T -C -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i ~/.ssh/gateway.foxtom.de -R 227:localhost:22 -p22 sshTnlKunde001@gateway.foxtom.de


=== Support-Rechner ===
== Sicherheit ==
==== Public-Key-Zugang ====
; Angriffsmöglichkeiten
===== Public-Key übertragen =====
Es wird ein Tunnel durch die Firewall gebohrt, welche das Netzwerk mit dem Zielsystem schützt
'''user@support#''' ssh-copy-id -p'''2227''' sshTnlKunde001@gateway.foxtom.de


===== Public-Key-Zugang testen =====
; Risiken
  '''user@support#''' ssh -p'''2227''' sshTnlKunde001@gateway.foxtom.de
Angreifer erlangt Zugriff auf das Gateway
'''sshTnlKunde001@gateway:~$''' exit
* könnte von dort alle zu managenden Zielsysteme erreichen
* Das Zielsystem und das dahinter liegende Netzwerk ist dann nur noch durch die Sicherheitsmechanismen geschützt, welche die über den Tunnel erreichbare Anwendung auf dem Zielsystem bietet (beispielsweise SSH- oder Webserver).


==== Tunnel starten ====
; Gateway gut absichern
'''user@support$''' ssh -nNT -L 10022:localhost:10001 sshTnlKunde001@gateway
Das ist gar nicht so anspruchsvoll
* weil es sich beim Gateway um ein Minimalsystem handelt
* welches vergleichsweise einfach upgedatet und sicher konfiguriert werden kann


Damit wird ein Tunnel vom lokalen Port 10022 zum Port 10001 auf dem Gateway erstellt
; Sicherheitsmaßnahmen auf dem Zielsystem
 
* laufende Updates
==== Verbindung zum Zielrechner ====
* kein root-logins zulassen
'''user@support$''' ssh -p 10022 admin@localhost
* starke Passwörter
 
"admin" ist ein Nutzer auf dem Zielsystem, über welchen der Support abgewickelt wird.


== Anwendungen ==
; Bewertung
Bei Einhaltung dieser Maßnahmen die Sicherheit im Vergleich zu anderen Varianten (proprietäre Fernwartungstools, Port-Forwarding durch Firewalls) als höher einzuschätzen


== Sicherheit ==
; Zusätzliche Absicherung
== Dokumentation ==
* [[fail2ban]]
=== Siehe auch ===
* Durch die Supporter benutzte SSH-Schlüssel auf Smartcard ablegen
* Die können beispielsweise , wie unter "[https://www.unitas-network.de/support/wiki/smartcards/ssh-login-mit-openpgp-card/ SSH-Login mit OpenPGP Card]" beschrieben, auf einer Smartcard abgelegt werden


== Links ==
== Siehe auch ==
=== Weblinks ===
# http://www.unitas-network.de/support/wiki/management/remote-management-mit-ssh-tunnel/


=== Einzelnachweise ===
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
<references />
=== Dokumentation ===
==== RFC ====
==== Man-Page ====
==== Info-Pages ====
=== Links ===
==== Projekt ====
==== Weblinks ====
# https://www.unitas-network.de/support/wiki/management/remote-management-mit-ssh-tunnel/


== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


[[Kategorie:Netzwerk:Sicherheit]]
[[Kategorie:SSH]]
[[Kategorie:ssh]]
[[Kategorie:Entwurf]]

Aktuelle Version vom 28. April 2025, 10:38 Uhr

SSH-Gateway - vermittelt verschlüsselte Tunnelverbindungen zwischen SSH-Clients

Beschreibung

Teilnehmer bauen aktiv einen Tunnel zum Gateway auf
  • Keine Portweiterleitungen erforderlich
  • Keine Namensauflösung der Teilnehmer erforderlich
Gateway vermittelt den Kontakt
  • Gateway ist ein SSH-Server im Internet
Trennung verschiedener Kunden/Dienstleiter
  • Je Tunnel (Kombination aus Kunde/Dienstleiter) ein Zugang
Szenario
Hostname Username
gateway.foxtom.de sshTnlKunde001
kunde001 support
support user

Gateway

Kunden-Zugang

Tunnel-Benutzerkonto

root@gateway# useradd --create-home --groups users --shell /bin/bash --comment "Tunnel-User Kunden001" sshTnlKunde001

Passwort vergeben

root@gateway# passwd sshTnlKunde001
New password:
Retype new password:
passwd: password updated successfully

Zugang testen

user@support# ssh -p22 sshTnlKunde001@gateway.foxtom.de
sshTnlKunde001@gateway's password:

SSH-Server

UNIX Sockets

Damit sich Kunden nicht mit dem System eines anderen Kunden verbinden können, werden hier UNIX Sockets verwandt.

  • Diese besitzen im Gegensatz zu TCP-Ports eine Zugriffssteuerung

Damit der Socket beim Abbau des Tunnels eine neue Socket-Datei erstellt wird, wird die Konfiguration des SSH-Dienstes ergänzt

  • ein erneuter Aufbau des Tunnels ist ansonsten mit dem gleichen Socket-Namen nicht möglich

/etc/ssh/sshd_config

# Specifies whether to remove an existing Unix-domain socket file for local or remote port forwarding before creating a new one.
StreamLocalBindUnlink yes

Kunden-Rechner

Tunnel-Benutzerkonto

root@kunde001# useradd -m -G users -s /bin/bash kunde001Tnl

SSH-Key erzeugen

root@kunde001# sudo -u support -i
support@kunde001$ ssh-keygen -f /home/support/.ssh/gateway -t ecdsa

Keine Passphrase eingeben (Enter)

Public-Key übertragen

support@kunde001$ ssh-copy-id -p22 -i /home/support/.ssh/gateway.foxtom.de.pub sshTnlKunde001@gateway.foxtom.de

Public-Key-Zugang testen

support@kunde001$ ssh -i /home/support/.ssh/gateway.foxtom.de -p22 sshTnlKunde001@gateway.foxtom.de
  1. Fingerprint vergleichen
  2. Bestätigung durch Eingabe von "yes"

Fehlermeldung "PTY allocation request failed on channel 0" und die Verbindung wird abgebrochen. Das ist beabsichtigt.

Automatisierung

Systemd konfigurieren

Systemd-Service-Unit

/etc/systemd/system/ssh-reverse@.service

[Unit]
Description=Reverse SSH Tunnel Service
ConditionPathExists=|/usr/bin
After=network.target

[Service]
User=support
Environment="GWSOCK=40%I"
Environment="GWUSER=sshTnlKunde001"
Environment="GWHOST=gateway"
Environment="SSHKEY=/home/support/.ssh/gateway"
ExecStart=/usr/bin/ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i ${SSHKEY} -R ${GWSOCK}:localhost:%I ${GWUSER}@${GWHOST}

# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=3
Restart=always

[Install]
WantedBy=multi-user.target

Durch das @ im Namen der Unit-Datei können verschiedene Instanzen (also Tunnel) erstellt werden:

root@kunde001# systemctl daemon-reload
root@kunde001# systemctl start ssh-reverse@22.service
root@kunde001# systemctl start ssh-reverse@443.service
  • Der Port des Tunnels auf dem Gateway wird auf "40%I" gesetzt wobei %I dem Instanznamen (hier 22 und 443) entspricht
  • Hier ergibt das auf dem Gateway TCP-Sockets mit den Ports 4022 und 40443.
Parameter für Instanzen
  • Drop-In-Files

/etc/systemd/system/ssh-reverse@22.service.d/tunnel.conf

[Service]
# Port of the tunnel at the remote gateway
Environment="GWSOCK=/home/ssh-kunde1/ziel3-ssh.socket"
# User at gateway to create the tunnel
Environment="GWUSER=ssh-kunde1"
# remote gateway
##Environment="GWHOST=gateway"
# Location of the SSH key
##Environment="SSHKEY=/home/support/.ssh/gateway"

/etc/systemd/system/ssh-reverse@443.service.d/tunnel.conf

[Service]
# Port of the tunnel at the remote gateway
Environment="GWSOCK=/home/ssh-kunde1/ziel3-https.socket"
# User at gateway to create the tunnel
Environment="GWUSER=ssh-kunde1"
# remote gateway
##Environment="GWHOST=gateway"
# Location of the SSH key
##Environment="SSHKEY=/home/support/.ssh/gateway"
  • Hier werden die auf dem Gateway verwendeten Sockets angepasst, statt den TCP-Ports werden verschiedene UNIX-Sockets verwendet.
  • Außerdem wird ein anderer User auf dem Gateway verwendet.

Support-Rechner

Public-Key-Zugang

Public-Key übertragen

user@support# ssh-copy-id -p22 sshTnlKunde001@gateway.foxtom.de

Public-Key-Zugang testen

user@support# ssh -p22 sshTnlKunde001@gateway.foxtom.de
sshTnlKunde001@gateway:~$ exit

Anwendung

Public-Key-Zugang

support@kunde001$ ssh -i /home/support/.ssh/gateway.foxtom.de.pub -p22 sshTnlKunde001@gateway.foxtom.de
  1. Fingerprint vergleichen
  2. Bestätigung durch Eingabe von "yes"

"PTY allocation request failed on channel 0"

Fehlermeldung und die Verbindung wird abgebrochen, das ist beabsichtigt.

Tunnel starten

user@support$ ssh -nNT -L 10022:localhost:10001 sshTnlKunde001@gateway

Damit wird ein Tunnel vom lokalen Port 10022 zum Port 10001 auf dem Gateway erstellt

Tunnelaufbau

Manueller Aufbau
support@debian01:~$ ssh -N -T -C -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i ${SSHKEY} -R ${GWSOCK}:localhost:${LOCALPORT} ${GWUSER}@${GWHOST}
Optionen Bedeutung
-N Keinen Befehl in der Ferne ausführen
-T Deaktiviert Pseudo-Terminal-Zuweisung
-C Komprimierung sämtlicher Daten
-o ServerAliveInterval=60
-o ExitOnForwardFailure=yes
-o StrictHostKeyChecking=no
-i ${SSHKEY} absoluter Pfad zum SSH-Key, beispielsweise ~/.ssh/gateway
-R ${GWSOCK}:localhost:${LOCALPORT} Reverse Tunnel erstellt, um vom Gateway aus auf den Kundenrechner zugreifen zu können
Parameter Bedeutung
${SSHKEY} Der komplette Pfad zum SSH-Key, beispielsweise ~/.ssh/gateway
${GWSOCK} Der Socket, welcher auf dem Gateway für den Tunnel verwendet wird
  • Diesen muss man dort ansprechen, um sich mit dem Zielsystem zu verbinden
  • Werden mehrere Tunnel zum Gateway aufgebaut (was recht wahrscheinlich ist), muss jeweils ein anderer Socket verwendet werden
  • Ein Socket kann ein TCP- oder ein UNIX-Socket sein. Ein TCP-Socket ist einfach eine Port-Nummer
  • Da zum Tunnelaufbau normale User (nicht root) genutzt werden, können dabei nur Ports über 1024 verwendet werden. Bei einem UNIX-Socket muss dessen kompletter Pfad angegeben werden, beispielsweise "/home/ssh-kunde1/zielsystem3.socket" (nicht "~/zielsystem3.socket")
${LOCALPORT}
  • Das ist der Port, mit welchem der Tunnel auf dem Zielsystem verbunden wird
  • Soll über den Tunnel eine SSH-Sitzung aufgebaut werden, nimmt man den Port 22. Läuft auf dem Zielsystem ein Webserver und dieser soll über den Tunnel erreichbar sein, wird Port 443 genommen (für verschlüsselte Seiten).
${GWUSER}
  • Der User auf dem Gateway
  • In unserem Beispiel also "sshTnlKunde001" oder "ssh-kunde1". [FIXME]
${GWHOST}
  • Der Hostname des Gateways, also beispielsweise "gateway".
Beispiel
$ ssh -N -T -C -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i ~/.ssh/gateway.foxtom.de -R 227:localhost:22 -p22 sshTnlKunde001@gateway.foxtom.de

Sicherheit

Angriffsmöglichkeiten

Es wird ein Tunnel durch die Firewall gebohrt, welche das Netzwerk mit dem Zielsystem schützt

Risiken

Angreifer erlangt Zugriff auf das Gateway

  • könnte von dort alle zu managenden Zielsysteme erreichen
  • Das Zielsystem und das dahinter liegende Netzwerk ist dann nur noch durch die Sicherheitsmechanismen geschützt, welche die über den Tunnel erreichbare Anwendung auf dem Zielsystem bietet (beispielsweise SSH- oder Webserver).
Gateway gut absichern

Das ist gar nicht so anspruchsvoll

  • weil es sich beim Gateway um ein Minimalsystem handelt
  • welches vergleichsweise einfach upgedatet und sicher konfiguriert werden kann
Sicherheitsmaßnahmen auf dem Zielsystem
  • laufende Updates
  • kein root-logins zulassen
  • starke Passwörter
Bewertung

Bei Einhaltung dieser Maßnahmen die Sicherheit im Vergleich zu anderen Varianten (proprietäre Fernwartungstools, Port-Forwarding durch Firewalls) als höher einzuschätzen

Zusätzliche Absicherung
  • fail2ban
  • Durch die Supporter benutzte SSH-Schlüssel auf Smartcard ablegen
  • Die können beispielsweise , wie unter "SSH-Login mit OpenPGP Card" beschrieben, auf einer Smartcard abgelegt werden

Siehe auch

Dokumentation

RFC

Man-Page

Info-Pages

Links

Projekt

Weblinks

  1. https://www.unitas-network.de/support/wiki/management/remote-management-mit-ssh-tunnel/