it-swarm.com.de

Öffnen Sie Port 443 für eine Node-Web-App

Ich habe versucht, eine Node-Web-App auf Port 443 auszuführen, erhalte jedoch die folgende Ausgabe: listen EACCES 0.0.0.0:443

Ufw allow 443/tcp wurde bereits ausprobiert, aber nmap zeigt 443 immer noch nicht als offenen Port an.

Auch Sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT ohne Erfolg versucht.

Jede Hilfe wird geschätzt.

2
kikemx78

Danke @exore, ich habe das Problem mit gelöst

Sudo setcap 'cap_net_bind_service = + ep' $ (readlink -f $ (welcher Knoten))

Das Problem war meines Erachtens eine manuelle Installation von node.js. Es ist standardmäßig in Ubuntus letzter Version enthalten, aber ich wusste das nicht und habe es erneut über das Terminal installiert.

Sie können hier für die gesamte Diskussion gehen.

https://Gist.github.com/firstdoit/6389682

Grüße,

1
kikemx78

EACCES bedeutet, dass Port 443 nicht überwacht werden darf. Dies liegt daran, dass Sie Ihre App nicht als Root ausführen. Ports unter 1024 sind reservierte Ports und dürfen nur von Root verwendet werden.

Der Versuch, die Firewall-Regeln zu ändern, hat keine Auswirkungen. Firewall Paket durchlassen oder stoppen. Es erlaubt niemandem, einen bestimmten Port abzuhören.

Lösung: Führen Sie Ihren Code mit Sudo aus. Dies ist jedoch ein Sicherheitsrisiko. Daher sollte Ihre App nach dem erfolgreichen Abhören so bald wie möglich zu einem anderen Benutzer wechseln (oder einen anderen Mechanismus finden, von dem ich nicht weiß, dass er Berechtigungen aufhebt).

Da dies kompliziert ist, ist eine gute Lösung

  • ihre App überwacht die Loopback-Schnittstelle an einem nicht privilegierten Port, z. B. 127.0.0.1:10443
  • Sie richten einen Webserver für Proxy-Anforderungen von 0: 443 bis 127.0.0.1:10443 ein. Ich denke an nginx, aber viele andere Server sind für diese Aufgabe geeignet. Wählen Sie einfach Ihren Favoriten aus.

Wenn Sie SSL auf Port 443 wünschen, was normalerweise der Fall ist, sollten Sie auch Zertifikate einrichten (ein selbstsigniertes erstellen oder ein oder noch besseres kaufen, ein kostenloses Zertifikat von let's encrypt erhalten), Protokolle konfigurieren, verfügbare Chiffren usw. Das ist auch kompliziert.

beispiel für eine minimale Nginx-Konfigurationsdatei, die verbessert werden muss und funktionieren sollte (kann derzeit nicht getestet werden): server { server_name me.example.com; listen 0.0.0.0:443 ssl; ssl_certificate /etc/mycerts/fullchain.pem; ssl_certificate_key /etc/mycerts/privkey.pem; ssl_session_timeout 30m; ssl_session_cache shared:SSL:400k; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; server_tokens off; charset utf-8; location / { proxy_pass http://127.0.0.1:10443/; } }

0
exore