Ankündigung

Einklappen
Keine Ankündigung bisher.

Amazon Alexa Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • yachti
    antwortet
    Hallo schuma ,
    aus Sicherheitsgründen würde ich immer über einen Reverse Proxy gehen. Dieser gehört eigentlich auch auf einer eigenen Maschine in die DMZ. Das bekommts mit der Fritte aber nicht hin.

    Ich nutze für alexa auch einen anderen Port als tcp/443 .
    Man kann aber über tcp/443 auch mehrere Applikationen auf dem reverse proxy bringen. Der proxy entscheidet nach port und Hostname.

    PS. Um das SSL hardening mit ssllabs testen brauchst Du zwingen tcp/443. Ich will da immer ein A+

    Gruß
    Michael
    Zuletzt geändert von yachti; 19.01.2020, 19:14. Grund: Berichtigung

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo schuma

    Zitat von schuma Beitrag anzeigen
    Brauche ich denn überhaupt zwingend einen Reverse Proxy?
    Wenn Amazon mit dem Dyndns und Port die Verbindung aufbaut?
    das würde schon gehen, aktuell kann man das Zertifikat auch direkt beim Alexa4P3 Plugin einbinden, ich kenne aber keinen der das so nutzt.
    Ob das funktioniert - kommt noch vom ursprünglichen Plugin - hab ich nie getestet. Würde aber auch davon Abstand nehmen. Die Kommunikation über den
    NGINX hat sich bewährt. Wenn Du das Zertifikat direkt im Plugin einbinden möchtest bekommst du noch mehr Trödel mit Berechtigungen usw.
    Ausserdem prüft das Plugin nicht auf User/PWD sondern stellt nur einen SSL-HTTP-Server zur Verfügung. Dort wird dann ohne Berechtigungsprüfung alles akzeptiert.
    Über den NGINX hast Du auch gleichzeitig noch ein Logging für Fehler und Zugriffe - find ich gut und wollte ich nicht missen.

    P.S. Ich nutze als Zugang zum NGINX ein abweichenden Port - nicht 443 - den wollte ich mir freihalten.

    Gruss Andre

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Ok, vielen Dank euch Beiden!
    Das bringt wirklich etwas Licht ins dunkle.

    Ich versuche es morgen noch mal, mit der setup_all ein neues Zertifikat zu erstellen.

    Brauche ich denn überhaupt zwingend einen Reverse Proxy?
    Wenn Amazon mit dem Dyndns und Port die Verbindung aufbaut?
    Ich habe in der Fritte den Port 443 eh freigegeben...

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    schuma

    Kurze Erklärung was passiert / passieren soll :

    - die Lambda will eine SSL-Verbindung, diese baut sie zu Deinem Nginx auf, dieser macht das SSL-Handling und stellt (hoffentlich) ein öffentliches Zertifikat zur Verfügung. ( das will Amazon so . (Punkt im Sinne von Punkt - da führt kein Weg dran vorbei)
    - der Nginx gibt die Nutzdaten via forwarding an das Plugin (Definition in der location der nginx-Config)
    - das Plugin verarbeitetet die Daten und gibt den Response via Nginx (das passiert automatisch da die Verbindung von Amazon via Nginx aufgebaut wurde) zurück

    schematisch :

    Code:
    amazon:<Port_aus_der_Lambda>  <=> Nginx-IN :<Port_aus_der_Lambda> <=> Nginx-OUT:<Port_aus_der_plugin.yaml> <=> plugin:<Port_aus_der_plugin.yaml>
    Die Erstellung eines offiziellen Let's encrypt Zertifikats, falls nicht vorhanden findest Du in der shNG-Doku wie oben verlinnkt.

    Ich denke das bringt etwas Licht ins Dunkel.

    Gruss Andre

    Einen Kommentar schreiben:


  • yachti
    antwortet
    "errorMessage": "self signed certificate",
    Du brauchst ein öffentliches Zertifikat.

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Ich denke in dem Image von Onkelandy ist ja schon einiges vorkonfiguriert. Ip und Port habe ich gefunden ist bei 9000.
    Passwort habe ich jetzt auch so gesetzt wie du gesagt hast (htpasswd).

    Ich habe auch mit setup_ all Zertifikate erstellen lassen und einen Revers Proxy eingerichtet. (Wobei ich hier absolut nicht verstehe was da vor sich geht,-( )

    Bei dem Lambda Test bekomme ich diese Fehlermeldung:

    Code:
    {
    "errorType": "Error",
    "errorMessage": "self signed certificate",
    "trace": [
    "Error: self signed certificate",
    " at TLSSocket.onConnectSecure (_tls_wrap.js:1321:34)",
    " at TLSSocket.emit (events.js:210:5)",
    " at TLSSocket._finishInit (_tls_wrap.js:794:8)",
    " at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:608:12)"
    ]
    }
    Muss ich nicht irgenwie der Lambda Funktion das Zertifikat mitteilen?

    Ich gebe für heute erstmal auf....

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    schuma
    ich gehe davon aus

    Zitat von schuma Beitrag anzeigen
    Jetzt habe ich in der Datei nginx/.alexa mein Passwort und Benutzername aus der Lambdafunktion eingefügt.
    hast du so gemacht ?

    Code:
    sudo htpasswd -c /etc/nginx/.alexa <username>
    Desweiteren muss bei der Lambda-Funktion der Port deines Nginx stehen (der Port der auf SSL hört).
    In der Nginx Config muss Du dann auf den Port der in der plugin.yaml steht routen.
    Code:
    # Alexa Plugin Weiterleitung
    location /alexa {
    auth_basic "Restricted Area: Alexa";
    auth_basic_user_file /etc/nginx/.alexa;
    
    # Zugreifendes Land erlaubt?
    if ($allowed_country = no) {
    return 403;
    }
    
    proxy_pass http://<SmartHomeNG LAN IP>:<Alexa Plugin Port>/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    wobei
    Code:
    <SmartHomeNG LAN IP>  = 127.0.0.1
    sein kann wenn der Ngix auf Deiner ShNG-Maschine läuft.
    Code:
    <Alexa Plugin Port>            =  Port aus der plugin.yaml von shNG
    Nachtrag : Amazon will SSL - Zertifikat ist also ein MUSS
    Die aktuelle Config aus dem Image kenne ich nicht, es muss aber so sein, wie ich dem Verlauf entnehme, dass
    "alexa" als IP:Port irgendwo zu Beginn der config definiert wird. Also dort ändern und nicht bei der eigentlichen Location
    Ich will hier keine Verwirrung stiften


    Gruss Andre
    Zuletzt geändert von AndreK; 19.01.2020, 17:30. Grund: Nachtrag zum Thema Zertifikat

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    /etc/nginx/sites-available/default

    Allerdings ist da die Frage, ob es mit den Zertifakten der richtige Weg ist. Kannst aber natürlich auch einfach nur basic auth aktivieren.
    Die Zertifikate werden automatisch alle 3 Monate aktualisiert, sofern man aus dem Internet auf dem Port 80 auf deinen Rechner kommt.

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    schuma am besten orientierst du dich am monit Eintrag in der nginx Config Datei unter availablesites.
    Statt proxy_pass http://monithost; müsstest du http://alexa eingeben und ganz oben in der Datei checken, ob 9000 der richtige Port ist.
    Hmm, irgendwie schnalle ich es nicht....

    Es gibt ja unter nginx/conf.d die Datei https.conf

    Dort gibt es ja diesen Eintrag:
    Code:
    # Alexa Plugin Weiterleitung
    location /alexa/ {
    include /etc/nginx/headers.conf;
    satisfy any;
    auth_basic "Restricted Area: Alexa";
    auth_basic_user_file /etc/nginx/.alexa;
    allow 127.0.0.1;
    allow 192.168.0.0/16;
    allow 10.0.0.0/16;
    allow ::1;
    deny all;
    
    # This script tests the SSL certificate and enables Websocket access with Apple devices.
    # If you want to limit your access to devices with certificates (recommended!), don't remove this line!
    access_by_lua_file /etc/nginx/scripts/hass_access.lua;
    
    proxy_pass http://alexa;
    }
    Jetzt habe ich in der Datei nginx/.alexa mein Passwort und Benutzername aus der Lambdafunktion eingefügt.

    In welcher Datei soll ich nun den Port checken?

    Sorry, aber ich stehe hier echt auf dem Schlauch....

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    schuma ,
    schau mal hier, da steht wie man den User für Alexa und andere anlegt und wie die Config aussehen muss. Da hat sich meines Wissens nichts geändert.

    Am besten im AWS-Zentrum mal mit einer Test-Funktion zugreifen - dort bekommst du dann entsprechende Fehlermeldungen.

    Test-Funktion für ein Discovery :
    Code:
    {
    "directive": {
    "header": {
    "namespace": "Alexa.Discovery",
    "name": "Discover",
    "payloadVersion": "3",
    "messageId": "abc-123-def-456"
    },
    "payload": {
    "scope": {
    "type": "BearerToken",
    "token": "access-token-from-skill"
    }
    }
    }
    }
    Die Testfunktionen findest Du oben rechts - "configure Test-Events" bei der Lambda-Funktion - dort einfach den obigen Code einfügen und speichern, danach kannst Du mit "Test" die Funktions ausführen. - Meldungen kommen dann prompt.


    Gruss Andre

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Was muss ich dann in der Lambda Funktion bei SMARTHOME_AUTH als userasswort eintragen?
    Ich habe da den User und Passwort eingetragen aus der nginx

    Code:
    auth_basic "user";
    auth_basic_user_file /etc/nginx/htpasswd;

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Mit Zertifikaten müsste alles klappen, aber du musst neue anlegen lassen, am besten mit setup_all
    Das heißt, wenn ich setup_all aufrufe kann ich dort ein Zertifikat anlegen lassen, und damit sollte alexa dann funktionieren? Ohne weitere Einstellungen?
    Muss man dann das Zertifikat alle 3 Monate von Hand aktuallisieren und passiert das irgendwie automatisch?

    Was muss ich dann in der Lambda Funktion bei SMARTHOME_AUTH als userasswort eintragen?

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    schuma am besten orientierst du dich am monit Eintrag in der nginx Config Datei unter availablesites.
    Statt proxy_pass http://monithost; müsstest du http://alexa eingeben und ganz oben in der Datei checken, ob 9000 der richtige Port ist.

    Wäre super, du könntest hier die fertige Config posten, dann kann ich das aktualisieren. Persönlich würde ich präferieren, Alexa ist in einem entsprechenden Unterverzeichnis und nicht im HTML Root.

    Mit Zertifikaten müsste alles klappen, aber du musst neue anlegen lassen, am besten mit setup_all

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Bei mir ist die domain.conf im nginx wie folgt.
    Zitat von schuma Beitrag anzeigen

    Was muss ich in dem Image genau an den nginx Dateien ändern um das Alexaplugin zu benutzen?
    Code:
    # alexa
    server {
    server_tokens off;
    listen 443 ssl;
    server_name host.domain.de;
    # gzip should not be used with ssl
    gzip off;
    ##
    # SSL
    # Global SSL in nginx.conf
    ##
    # ssl on;
    ssl_certificate /etc/letsencrypt/live/host.domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/host.domain/privkey.pem;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    access_log /var/log/nginx/host.log combined;
    # maintain the .well-known directory alias for letsencrypt & renewals
    location /.well-known {
    auth_basic off;
    alias /var/www/html/.well-known;
    }
    auth_basic "user";
    auth_basic_user_file /etc/nginx/htpasswd;
    
    location / {
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://hostintern.domain.de:9000/;
    proxy_read_timeout 90;
    }
    
    }
    Gruß
    Michael

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Zitat von yachti Beitrag anzeigen
    Ich habe da nichts ausgefüllt
    OK, Danke für die Info!

    Onkelandy Was muss ich in dem Image genau an den nginx Dateien ändern um das Alexaplugin zu benutzen?
    Am besten ersteinmal mit basic auth. Oder ist das mit den Zertifikaten schon angelegt?

    Es schein jetzt, bei mir, nur noch daran zu liegen.

    Im Webif wird die eine Lampe angezeigt und in der Alexa App konnte ich den selbst erstellten Skill verbinden und aktivieren.
    Die Verbindung der beiden (Alexa/shng) scheint aber noch nicht zu klappen.
    Alexa findet keine Geräte.

    Grüße, Marc

    Einen Kommentar schreiben:

Lädt...
X