Portfreigabe mit FHEM einschalten

Begonnen von Amenophis86, 26 November 2016, 10:21:49

Vorheriges Thema - Nächstes Thema

Amenophis86

Ich suche schon länger, aber ich kann leider nichts dazu finden. Gibt es eine Möglichkeit mittels des Moduls Fritzbox eine Portfreigabe zu aktivieren bzw zu deaktivieren?

Natürlich kann man das auch mit Myfritz machen, aber man kann vieles auch anders machen und möchte es doch gerne FHEM machen lassen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Otto123

Hi,

soweit ich weiß geht es mit dem Modul FRITZBOX nicht.
Aber es könnte über ein Script gehen welches die Box per TR064 steuert.
https://www.administrator.de/wissen/powershell-fritzbox-tr-064-netzwerk-konfigurieren-auslesen-303474.html
Laut dem Artikel gibt es:
Get-FBPortMappings Portfreigaben auslesen
Add-FBPortMapping Portfreigabe erstellen. Beispiel:
Add-FBPortmapping -ExternalPort 8080 -InternalClient '192.168.1.2' -InternalPort 8090 -Protocol TCP -Description 'Test-Beschreibung'
Delete-FBPortMapping Portfreigaben löschen. Beispiel:
Delete-FBPortMapping -ExternalPort 443 -Protocol TCP


Da könntest Du weiterforschen, so ein Script kannst Du ja per FHEM ausführen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Amenophis86

Danke für den Hinweis. Mir war bisher nur Telnet bekannt und das wurde ja abgeschaltet. Werde mal ein bisschen forschen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Marlen

Zitat von: Amenophis86 am 06 Dezember 2016, 17:32:48
Danke für den Hinweis. Mir war bisher nur Telnet bekannt und das wurde ja abgeschaltet. Werde mal ein bisschen forschen.

Hallo Amenophis86,

hast du da schon was gefunden?

LG
  Marlen

Mitch

Dumme frage, warum will ich das machen?
Verstehe den Sinn nicht.
FHEM im Proxmox Container

frank

Zitat von: Otto123 am 06 Dezember 2016, 16:51:55
Hi,

soweit ich weiß geht es mit dem Modul FRITZBOX nicht.
Aber es könnte über ein Script gehen welches die Box per TR064 steuert.
https://www.administrator.de/wissen/powershell-fritzbox-tr-064-netzwerk-konfigurieren-auslesen-303474.html
Laut dem Artikel gibt es:
Get-FBPortMappings Portfreigaben auslesen
Add-FBPortMapping Portfreigabe erstellen. Beispiel:
Add-FBPortmapping -ExternalPort 8080 -InternalClient '192.168.1.2' -InternalPort 8090 -Protocol TCP -Description 'Test-Beschreibung'
Delete-FBPortMapping Portfreigaben löschen. Beispiel:
Delete-FBPortMapping -ExternalPort 443 -Protocol TCP


Da könntest Du weiterforschen, so ein Script kannst Du ja per FHEM ausführen.

Gruß Otto
das sollte dann auch mit dem fritzbox modul funktionieren, wenn man das attr allowTR064Command setzt.
siehe wiki https://wiki.fhem.de/wiki/FRITZBOX#TR-064
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Amenophis86

Hey,
ich habe es auf meiner Todo Liste stehen, da aber erste Recherchen ergaben, dass ich mich dort weit in die Materie einarbeiten muss, gibt es leider nocht nichts Neues.

@Mitch:
Warum ist relativ einfach: Eine Portfreigabe birgt immer das Risiko eines Angriffs von außen bzw. erleichtert diesen. Sollte ich mittels FHEM dies steuern können, kann ich FHEM eine Telegram/WhatsApp/Email schicken, welche den Port öffnet und wenn ich fertig bin, dieses auf gleiche Art wieder schließen. Somit ist die Gefahr nur für eine bestimmte Zeit erhöht.

Sollte jemand schon etwas in der Richtung gemacht habe, oder wissen, würde ich mich freuen. Biete auch gerne meine Unterstützung an, wie gesagt ist meine Erfahrung in die benötigte Richtung (Umgang mit TR064 Steuerung) faktisch (noch) nicht vorhanden.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

marvin78

Wäre VPN nicht einfacher? Dann ist es auch in der Zeit sicher, in der du zugreifst?

Portreigabe alleine ist IMMER unsicher. Auch für kurze Zeit.

Mitch

Zitat von: Amenophis86 am 09 Februar 2017, 15:58:55
@Mitch:
Warum ist relativ einfach: Eine Portfreigabe birgt immer das Risiko eines Angriffs von außen bzw. erleichtert diesen. Sollte ich mittels FHEM dies steuern können, kann ich FHEM eine Telegram/WhatsApp/Email schicken, welche den Port öffnet und wenn ich fertig bin, dieses auf gleiche Art wieder schließen. Somit ist die Gefahr nur für eine bestimmte Zeit erhöht.

oder einfach Dein Netz vernüftig aufbauen und absichern  ;)
FHEM im Proxmox Container

Amenophis86

Viele Wege führen nach Rom :)

VPN ist natürlich auch eine Sache, welche möglich ist. Aber zB für einen FTP Zugriff von außen von verschiedenen PCs benötige ich die Portfreigabe. Nicht an jedem PC kann ich ein VPN einrichten um die Daten zu transferieren. Und mein Netz vernünftig absichern bin ich immer für Tipps dankbar und auch hier würde ich sagen, dass verschieden Maßnahmen gemeinsam helfen und dies kann eine davon sein ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Wernieman

Wobei gerade die Kombi FTP/Portfreigabe ... nicht gerade optimal ist. Willst Du wirkklich nicht ftp verwenden?

Alternativ währe ein ssh-Zugang zu empfehlen. Ist etwas "VPN-light". Und für Windows gibt es auch programme für den Zugriff, die man nicht installieren muß (putty, winscp ....)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

Zitat von: Amenophis86 am 09 Februar 2017, 16:24:20
Nicht an jedem PC kann ich ein VPN einrichten um die Daten zu transferieren.
Moin,
das wäre auch Quatsch und völlig unnötig. Ein VPN auf den Router ist völlig ausreichend. Damit hast Du einen Remote Client im lokalen Netzwerk.

Oder ich habe den Ansatz nicht verstanden  :-[

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Amenophis86

Hattest du falsch verstanden. Ich meinte, dass ich an manchen PCs nicht die rechte habe mich in einem VPN anzumelden, weil zB Windows ohne Zusatzprogramm sich wohl aktuell nicht ins VPN der Fritzbox einloggen kann. Hab mich vermutlich nicht richtig ausgedrückt. Natürlich läuft mein VPN bei meiner Fritzbox auf ;)

ssh ist richtig, dass es eine Alternative ist. Könnte ich mal drüber nachdenken auf ssh umzustellen. Danke für den Tipp.

Aber z.B. greife ich auch von außen gerne auf meine Synologie zu und die brauch dafür brauche ich auch eine Portfreigabe. Auch nicht immer, aber sollte ich etwas ändern oder testen wollen dann schon. Auch hier kann man mit einem VPN arbeiten ist richtig :) In erster Linie ging es mir beim erstellen auch darum, ob es möglich es einen Port freizugeben, oder nicht mittels FHEM ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Otto123

Ach so rum ok.  :D

Aber auf der anderen Seite, ich würde von PCs die nicht mir gehören niemals auf mein "offenes" Heimnetzwerk zugreifen. Auch nicht für eine Sekunde.
Wenn ich da Bedarf nach Daten habe, würde ich das immer anders organisieren.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Fixel2012

Zitat von: Mitch am 09 Februar 2017, 16:03:41
oder einfach Dein Netz vernüftig aufbauen und absichern  ;)

Habt ihr da konkrete Tips? Sind Port-Freigaben wirklich so "gefährlich"?

Ich habe bisher nur eine, und zwar die alexa-fhem Freigabe auf Port 3000. Dieser wird auf Fhem-Raspi geleitet. Was könne denn in einem versuchten Angriff so angestellt werden?

Wäre über ein Paar Infos dankbar  :D

Gruß Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Wernieman

Was angestellt werden kann ... kommt auf das Produkt drauf an.

z.B: bei einer direkten Freigabe von FHEM kann man praktisch alles mit FHEM-Rechten auf Deinem Rechner ausführen, da FHEM in der Eingabe auch perl-Code erlaubt. Deshalb ist .z.B. in dem Falle ein Zusätzlicher Loginmechanismuß absolut notwendig.

In diesem Falle (ftp) sehe ich das Problem darin, das
-  FTP eigentlich mehr als einen Port verwendet
- Alle Passwörter wirklich im Klartext über die Leitung gehen
- ftp ... deshalb mittlerweile "am sterben ist"

Btw:
Per ssh kannst Du auch Portforwarding machen, d.h. der Zugriff auf ALLES im Netz ist immer noch möglich, nur eben auf der Sicherheitsstufe ssh
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Mitch

Also ich habe das bei mir so gelöst:

1. Portfreigabe nur 3000 für Alexa, 443 für HTTPS auf genau eine Webseite
2. keinen öffentlichen DynDNS Service
3. VPN Zugriff (danach gehen FTP, FHEM, ssh, usw.
4. ReverseProxy
5. Enterprise Firewall von Ubiquiti (KEINE FRITTE)

Ich hatt enoch nie das Problem, dass ich nicht an irgend welche Daten kam, oder fhem nicht benutzen kann.
Wenn ich an einem fremden Rechner bin, wo kein VPN geht, dann halt mit dem iPhone oder iPad. Dort habe ich VPN und ssh Client, also alles, was man braucht.
Für den reinen Datenaustausch habe ich meinen eigene Privatcloud basierend auf NextCloud.
FHEM im Proxmox Container

Jamo

Hier der code um mittels des Moduls Fritzbox eine Portfreigabe zu aktivieren bzw zu deaktivieren:

define FritzBox_Port dummy
attr   FritzBox_Port webCmd on:off

define FritzBox_Port_n notify FritzBox_Port:.* {\
  if ($EVENT eq "off") {\
    fhem("get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 0 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0")\
  } \
  else {\
    fhem("get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 1 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0")\
  }\
}

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Amenophis86

Ja geil, vielen Dank.

Allerdings noch Fragen dazu:

1. FritzBox = Das wirkliche FritzBox Device in FHEM?
2. NewExternalPort 3000 = Die Portnummer, welche von außen angefragt wird?
3. NewInternalPort 3000 = Die Portnummer, auf die weitergeleitet werden soll?
4. NewInternalClient fh.em.ip.ad = Die IP oder Name des Geräts im Netzwerk, auf welches weitergeleitet werden soll?
5. NewPortMappingDescription HTTPS-Server = Der Name für die Portfreigabe?

Ist zwar relativ eindeutig, aber frage lieber nochmal nach, um sicher zu gehen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Wernieman

#19
@inoma:

Kleine Kritik:
Warum macht Du ein notify .* mit einem IF, wenn Du es auch gleich beim notify machen könntest?
also eines auf FritzBox_Port:on und eines auf FritzBox_Port:off

Hat den Nachteil: 2 Notify anstatt einem
Hat den Vorteil: Ds Notify wird wirklich nur aufgerufen, wenn es nötig ist.

z.B. für on
define FritzBox_Port_on notify FritzBox_Port:on get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 0 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0

Findet meinereiner übersichtlicher (aber Geschmackssache)

P.S. Nicht getestet, da ich mich mit tr064 nicht auskenne
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Marlen

Hi,

ich bekomm immer diesen Fehler! Was mach ich falsch?

2017.02.16 13:58:03 3: FritzBox_Port_n return value: Service='WANIPConnection:1'   Control='wanipconnection1'   Action='AddPortMapping'
Parameter1='NewRemoteHost' => '0.0.0.0'
Parameter2='NewExternalPort' => '8083'
Parameter3='NewProtocol' => 'TCP'
Parameter4='NewInternalPort' => '8083'
Parameter5='NewInternalClient' => 'http://192.168.178.33'
Parameter6='NewEnabled' => '1'
Parameter7='NewPortMappingDescription' => 'HTTPS-Server'
Parameter8='NewLeaseDuration' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'UPnPError' => {
                           'errorDescription' => 'Invalid Args',
                           'errorCode' => '402'
                         }
        };

Wernieman

Ich berfüchte, Du darfst nicht copy&paste, sondern musst anpassen.
Oder ist Deine IP 0.0.0.0 ???
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Marlen

Und was ist dann NewRemoteHost? Die IP meiner Fritzbox?

Marlen

O.k.

Danke @ inoma  :-* :-* :-*

Klappt super!

LG
  Marlen

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Jamo

#25
Einfach mal manuell in der Fritzbox die gewünschte Portfreigabe einrichten.
Dann in FHEM in die Kommandozeile folgendes eingeben:

get FritzBox tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0

Dann erscheint sowas wie:

Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
{
  'GetGenericPortMappingEntryResponse' => {
                                            'NewEnabled' => '1',
                                            'NewLeaseDuration' => '0',
                                            'NewExternalPort' => '3000',
                                            'NewPortMappingDescription' => 'HTTPS-Server',
                                            'NewInternalClient' => 'fh.em.ip.ad',
                                            'NewInternalPort' => '3000',
                                            'NewProtocol' => 'TCP',
                                            'NewRemoteHost' => '0.0.0.0'
                                          }
}


Das sind dann die Werte, die man weiter oben in Antwort #17 dann eingeben muss.

Die  'fh.em.ip.ad' ist meine IP Adresse, auf dem der FHEM Server läuft, also bei mir der RaspberryPi. die Portfreigabe 3000 brauche ich für Alexa.

@Werniemann, Antwort #21: Ich glaube die '0.0.0.0' heisst einfach, dass für alle ankommenden Anfragen, egal von welcher IP, die Portfreigabe gilt.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Jamo

Hier nochmal eine etwas schickere Version, die $EVENT zum ein-/ausschalten des Ports verwendet:
define FritzBox_Port3000 dummy
attr   FritzBox_Port3000 eventMap on:1 off:0
attr   FritzBox_Port3000 webCmd on:off

define FritzBox_Port3000_n notify FritzBox_Port3000:(1|0) get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient de.in.e.IP NewEnabled $EVENT NewPortMappingDescription Alexa-3000 NewLeaseDuration 0
attr   FritzBox_Port3000_n verbose 0


Die Parameter auslesen mit:
get FritzBox tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

heinzfo

Hallo

Bei meiner FB7390 war die Portfreigabe kein Problem.

Mit der FB7590 FW7.0 und vorher FW6.92 bekomme ich leider diesen Fehler bei "get xxxx tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0"


Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'Error' => '401 Unauthorized'
        };



Was kann das sein?

Die restlichen Funktionen mit dem FRITZBOX Modul funktionieren einwandfrei.
Das Passwort hab ich nochmal gesetzt, hilft leider nicht.
Das "attr xxxx allowTR064Command 1" hat den Wert 1

Danke und beste Grüße
Heinz

Fixel2012

Zitat von: heinzfo am 27 Juli 2018, 18:34:53
Hallo

Bei meiner FB7390 war die Portfreigabe kein Problem.

Mit der FB7590 FW7.0 und vorher FW6.92 bekomme ich leider diesen Fehler bei "get xxxx tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0"


Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'Error' => '401 Unauthorized'
        };



Was kann das sein?

Die restlichen Funktionen mit dem FRITZBOX Modul funktionieren einwandfrei.
Das Passwort hab ich nochmal gesetzt, hilft leider nicht.
Das "attr xxxx allowTR064Command 1" hat den Wert 1

Danke und beste Grüße
Heinz

Port freigaben gehen meines Wissens seit der 6.8 nur noch für das Gerät, was auch die Portfreigabe durchführt. Dies wurde aus Sicherheitsgründen von AVM so implementiert.
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

heinzfo