Anleitung: SSH-Tunnel mit der Fritz!Box

1,184 views
Skip to first unread message

Jürgen Weiß

unread,
Jun 25, 2014, 2:21:46 PM6/25/14
to

Anleitung zum Einrichten eines SSH-Tunnels in der Fritz!Box

ACHTUNG: Diese Vorgehensweise funktioniert nur bei Fritz!Boxen mit Firmware bis 6.03! Ab 6.04 hat AVM Änderungen vorgenommen durch die nachfolgende Modifikationen nicht mehr möglich sind!

Vorab: Dieser Eingriff sollte nur von Profis vorgenommen werden! Wir übernehmen keine Verantwortung für Schäden an der Fritz!Box!
Diese Anleitung ist als Experimentell anzusehen, d.h. alle Angaben sind ohne Gewähr. Sie soll als Richtwert für die Konfiguration eines SSH-Servers auf der Fritz!Box für den gesicherten Zugriff auf die Homematic via SSH-Tunnel dienen.
Technisches KnowHow ist für diesen Eingriff zwingend notwendig!

Auf Basis dieser hervorragenden Anleitung zum Einrichten eines SSH-Servers (http://www.fritzmod.net/de/modification/ssh-sftp/installation/) habe ich diese leicht für die App HomeKey angepasst, sodass dieser Zugang nur mit entsprechend erstelltem Schlüssel verwendet werden kann:


Schritt 1:

Zuerst muss ein SSH-Schlüssel erstellt werden.
Dies geht am Einfachsten mit PuTTYgen (Download unter http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)

Wähle hierbei die folgenden Einstellungen:
- SSH-2 DSA
- 2048 bits

Dann klicke auf "Generate" zum Generieren eines neuen SSH-Schlüssels.

Weitere Einstellungen nachdem der Schlüssel generiert wurde:
- Key comment: Name des Smartphones, z.B. LG G2
- Key passphrase: leer lassen

Jetzt den privaten Schlüssel "Save private key" auf dem Computer abspeichern (zum Beispiel homekey.ppk) und aufs Smartphone hochladen.
Wichtig: Dieser private Schlüssel ist GEHEIM und darf unter keinen Umständen in die Hände Dritter gelangen, denn damit ist zukünftig ein Zugriff auf Deine Fritz!Box sowie auf Dein LAN möglich!

Den Public Key können wir ebenfalls speichern, benötigen den Schlüssel jedoch in einer anderen Form, als dieser hier gespeichert wird. In dem Textfeld "Public key for pasting into OpenSSH authorized_keys file" steht dieser bereits in der richtigen Form.
Dieser wird gleich im Skript der Fritz!Box mit eingebaut. Dazu aber gleich mehr... Am Besten lasse den PuTTY Key Generator noch offen.


Schritt 2:

Nachdem wir nun den SSH-Schlüssel haben, machen wir uns an die Fritz!Box.

Zuerst müssen wir Telnet freischalten.
Dies geht mit folgendem Tastaturcode, der an jedem an die Fritz!Box angeschlossenem Telefon eingegeben werden kann:
Telnet einschalten: #96*7*
Telnet ausschalten: #96*8*

Als nächstes bedienen wir uns erneut einem kleinen Tool von http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html: PuTTY.
Lade hierzu PuTTY.exe herunter und führe es aus.

Als Host Name (or IP address) gebe entweder fritz.box oder die IP-Adresse Deiner Fritz!Box ein, z.B. 192.168.178.1
Connection type: Telnet

Mit "Open" kann die Verbindung zur Fritz!Box hergestellt werden.
In dem darauf öffnendem Fenster wird als "password" das Kennwort eingegeben, welches wir zur Anmeldung an der Weboberfläche der Fritz!Box verwenden.

Hat alles geklappt werden wir mit Informationen zu einer BusyBox sowie mit dem Cursor hinter dem Hash (#) begrüßt.

Dann kann es losgehen:


Schritt 3:

Das nachfolgende Skript wird zunächst in einen Editor kopiert, damit wir den public SSH Key austauschen können:

# Untersuchung: mips oder mipsel Fritz!Box.
# Darf nur einmal vor Benutzung von "$CPU" in debug.cfg eingetragen werden!
if egrep -q 'AR9|AR10|VR9|Fusiv' /proc/cpuinfo ; then CPU='mips'; else CPU='mipsel'; fi

DOWNLOADPAGE
="http://www.fritzmod.net/download/$CPU"
# Bitte passende Versionen wählen (die neueste ist ausgewählt):
# DROPBEARMULTI='dropbearmulti_v2012.55_'
# DROPBEARMULTI='dropbearmulti_v2013.58_'
# DROPBEARMULTI='dropbearmulti_v2013.62_'
DROPBEARMULTI
='dropbearmulti_v2014.63.'

while !(ping -c 1 8.8.8.8); do sleep 5; done

echo
"homekey:x:100:100:homekey user:/var/tmp/homekey:/bin/sh" >> /var/tmp/passwd
mkdir
-p /var/tmp/homekey/.ssh
chmod
700 /var/tmp/homekey /var/tmp/homekey/.ssh
wget
-O /var/tmp/homekey/dropbearmulti $DOWNLOADPAGE/$DROPBEARMULTI$CPU
chmod
+x /var/tmp/homekey/dropbearmulti
ln
-s /var/tmp/homekey/dropbearmulti /var/tmp/homekey/dropbear
ln
-s /var/tmp/homekey/dropbearmulti /var/tmp/homekey/dropbearkey
/var/tmp/homekey/dropbearkey -t rsa -f /var/tmp/homekey/rsa_host_key
/var/tmp/homekey/dropbearkey -t dss -f /var/tmp/homekey/dss_host_key
echo
"ssh-dss ABCDEF...HIER.DER.PUBLIC.KEY...ABCDEF Bezeichnung" >> /var/tmp/homekey/.ssh/authorized_keys
chown
-R homekey /var/tmp/homekey
/var/tmp/homekey/dropbear -r /var/tmp/homekey/rsa_host_key -d /var/tmp/homekey/dss_host_key -s


Tausche nun "ssh-dss ABCDEF...HIER.DER.PUBLIC.KEY...ABCDEF Bezeichnung" mit dem aus Schritt 1 erstellten public key aus.
Das Format sollte dem vorgenanntem Beispiel entsprechen, ist jedoch viel länger als hier beispielhaft abgebildet.


Testweise führen wir das fertige Script erst einmal auf der Fritz!Box aus, um zu testen ob Fehler auftreten.
Hierzu kopiere das Skript in die Zwischenablage (STRG+C). Dann kann es auf der Fritz!Box mit der rechten Maustaste eingefügt werden. Es wird sofort ausgeführt.

Am Ende prüfen wir ob alles erfolgreich war mit dem Befehl:
ps

Es sollte nun der Dropbear auftauchen: /var/tmp/homekey/dropbear -r /var/tmp/homekey/rsa_host_key -d /var/tmp/homekey/dss_host_key


Schritt 4:

Wenn das so ist, dann hat alles geklappt und wir können das Skript dauerhaft in der Fritz!Box einbauen, damit der SSH-Server auch nach Neustart wieder installiert wird:

Gebe dazu folgenden Befehl ein, gefolgt von einem Enter:

cat > /var/flash/debug.cfg


Nun wird ein Inhalt zum Einfügen in diese Datei erwartet.
Hier klicken wir nun wieder mit der rechten Maustaste in das Telnet Fenster, um das oben erstellte Skript einzufügen.
Mit STRG+D wird die Datei nun gespeichert. Wichtig ist dabei, dass der Cursor in der nächsten Zeile am Anfang steht und nicht hinter dem letzten Befehl. Falls dem nicht so ist, vor STRG+D noch einmal Enter drücken.

Achtung: Hier nochmal der Hinweis, dass durch unsachgemäße Änderungen an der debug.cfg die Fritz!Box möglicher Weise nicht mehr startet und wiederhergestellt werden muss!


Schritt 5:

Da uns die Fritz!Box Firewall von Internetseite noch nicht auf den Port 22 des SSH-Servers zugreifen lässt, müssen wir hier noch eine Anpassung in der Datei ar7.cfg vornehmen:
nvi /var/flash/ar7.cfg

Wer sich mit vi nicht auskennt, hier eine kleine Anleitung: http://linux.die.net/man/1/nvi

Als kleiner Crashkurs:
Taste "i" bringt vi in den Einfügemodus. Man kann jetzt an beliebiger Stelle etwas in der Datei ergänzen oder entfernen.
Mit ESC kommt man aus dem Einfügemodus wieder raus.
Mit ":wq" gefolgt von einem Enter wird die Datei gespeichert und der Editor verlassen.
Hat man einen Fehler gemacht und möchte den Editor ohne Änderungen verlassen, tippt man ":q!" gefolgt von Enter.

In der ar7.cfg sucht man nun nach "internet_forwardrules" (suchen kann man im nvi mit einem Slash, also z.B.: "/internet_forwardrules")

Wenn diese bereits existiert, wird sie ergänzt, zum Beispiel:
internet_forwardrules = "tcp 0.0.0.0:443 0.0.0.0:443 0", "tcp 0.0.0.0:1222 0.0.0.0:22 0";

Anderenfalls erstellen wir diese in der Rubrik "ar7cfg { }" neu:
ar7cfg {
   
/* ... */
    internet_forwardrules
= "tcp 0.0.0.0:1222 0.0.0.0:22 0";
   
/* ... */
}


Hier wurde der Port 1222 gewählt, der von Internetseite auf den Port 22 der Fritz!Box  (unser SSH-Server) weiterleitet.
Dieser Port wird später in HomeKey eingetragen und kann natürlich beliebig geändert werden.

Achtung: Bei Änderungen an den Freigaben in der Fritz!Box Weboberfläche wird diese Einstellung überschrieben und unser Eintrag fliegt wieder raus.
Falls jemand eine bessere / permanente Lösung hierfür hat, freue ich mich über eine Nachricht.


Schritt 6:


Nun wird in der App HomeKey in den Einstellungen unter "SSH Tunneleinstellungen" der Tunnel konfiguriert:

Hostname:
Das ist die öffentliche IP-Adresse eurer Fritz!Box (herauszufinden via http://www.wieistmeineip.de/) oder ein DynDNS Hostname. Da sich die IP-Adresse in der Regel alle 24 Stunden ändert, sollte in der Fritz!Box DynDNS konfiguriert werden (Internet => Freigaben => Dynamic DNS), sonst kann man am nächsten Tag nicht mehr zugreifen!
Da wir nicht mit dem Standardport 22 arbeiten, muss der Hostname um den Port ergänzt werden.
Zum Beispiel:     myfritzbox.dyndns.org:1222

Username:
Wenn an obigen Skript nichts geändert wurde, lautet dieser schlicht "homekey"

Privater Schlüssel:
Hier ist der private Schlüssel, den wir unter Schritt 1 erstellt und auf das Smartphone übertragen haben, auszuwählen.


Fertig.


Wenn wir nun "Warte auf WLAN" einschalten, ggf. noch die SSID des eigenen WLAN-Netzwerks eingeben und Wifi auf dem Smartphone deaktivieren, sollte - wenn alles richtig eingestellt wurde - HomeKey eine Verbindung zur HomeMatic via gesichertem SSH-Tunnel aufbauen!

Falls nicht, überprüfe nochmal die oben genannten Schritte, und/oder lese die hierzu verfügbaren Anleitungen:
http://www.fritzmod.net/de/modification/ssh-sftp/installation/
http://linux.die.net/man/1/nvi

Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages