robert464984
Goto Top

Webhook einrichten (Firewall, DNS, certbot SSL-Zertifikat)

Folgendes muss ich einrichten:
Eine Subdomain, beispielhaft "https://webhook.domain.de", soll als WebHook agieren. Sprich wenn ein POST-Request darauf geschickt wird und die Authentifizierung stimmt landet das bei einem Server der etwas mit der Anfrage anfangen kann und daraufhin einen entsprechenden response schickt.

  • Zwischen dem Webhoster der Domain und dem Server im Netzwerk liegt eine Lancom Firewall.

  • Auf dem Server läuft eine spezielle Software welche einen HTTP auf Port 51080 und einen HTTPS-Listener auf Port 51081 laufen hat. Zudem noch auf 51088 eine GraphQL API und ein WebPortal auf 51089.

Folgendes habe ich bisher eingerichtet und hat soweit funktioniert:
Beim Webhoster (Hetzner) habe ich ein A-Record DNS Eintrag eingerichtet der von der subdomain "webhook." auf die externe IP Adresse zeigt.
In der Firewall (Lancom) habe ich allePorts 1 - 65534 TCP/UDP geöffnet in beide Richtungen auf die IP Adresse des Servers.
In der Software des Servers wartet der listener auf einem speziellen endpoint Bsp. "/rainbow".
Wenn ich nun von außen einen POST Request auf http://webhook.domain.de:51080/rainbow sende kommt dieser Request durch und bekommt auch sofort eine Rückmeldung des Servers.

Um das SSL Zertifikat einzurichten muss man es in der Software hinterlegen. Entweder als Datei oder direkter Wert.
Es gibt die Felder "Zertifikat", "Privater Schlüssel" und "Passwort für privaten Schlüssel".

Da das SSL Zertifikat der Domain beim Hoster ( Hetzner ) automatisch über LetsEncrypt erstellt wird, habe ich mir gedacht ich mach das für den Server genauso. Ich hab mir also certbot auf den Server geladen und dort mit den Befehlen:
.certbot.exe certonly --standalone -d webhook.domain.de

Certbot fordert ein Zertifikat an aber bei der http-01 challenge scheitert es dann. Fehler 404.
Was ja auch stimmt ohne die Angabe des Ports funktioniert der WebHook nicht.
Also hab ich die Einstellungen in der Firewall geändert. Ich habe für http und https Regeln hinterlegt. Eingehende Verbindungen von port 80 und 443 sollen auf 51080 weitergeleitet werden. Es funktioniert dennoch nicht. Man erreicht den Endpoint von außen nicht und certbot kann die challenge nicht beenden. Wenn ich bei cerbot die url um den Port erweitere nimmt er trotzdem nur die URL ohne Port.

Kurzum ich bin gerade ziemlich ratlos und würde mich über eure Hilfe freuen.

Content-Key: 5111760637

Url: https://administrator.de/contentid/5111760637

Printed on: July 24, 2024 at 16:07 o'clock

Member: micneu
micneu Dec 28, 2022 updated at 00:31:45 (UTC)
Goto Top
für http-01 muss auch der Port 80 offen sein (nicht genutzt, von aussen erreichbar)
- nginx läuft auf meinem Webserver als reverse-proxy
- stoppen des webserver
- certbot aktualisiert die Zertifikate
- nginx starten
Member: em-pie
em-pie Dec 28, 2022 at 07:11:24 (UTC)
Goto Top
Moin,

In der Firewall (Lancom) habe ich allePorts 1 - 65534 TCP/UDP geöffnet in beide Richtungen auf die IP Adresse des Servers.
Das bitte überdenken! Mit dieser Regel hast du die ganze Welt eingeladen, sich mit deinem Server zu verbinden, den zu übernehmen ubd Schabernack zu betreiben. Wenn du plötzlich Bildmaterial von freizügig „gekleideten“ Kindern in nicht-jugendfreien Handlungen bereitstellst, wirst du sehr schnell Besuch bekommen…


Deinen Server packst HDI hinter einen WebApplication Filter. Beide Systeme schiebst du zudem in eine DMZ. Und dann lässt du nur die Dienste/ Ports durch den Lancom, die auch wirklich nur benötigt werden.

Gruß
em-pie
Member: robert464984
robert464984 Dec 28, 2022 at 09:29:07 (UTC)
Goto Top
Quote from @micneu:

für http-01 muss auch der Port 80 offen sein (nicht genutzt, von aussen erreichbar)
- nginx läuft auf meinem Webserver als reverse-proxy
- stoppen des webserver
- certbot aktualisiert die Zertifikate
- nginx starten

Danke für dein Beitrag micneu.

Das hatte ich auch schon, ist aber ein anderer Fehler. Wenn der Port nicht frei ist weil z.B. ein Apache auf 80 läuft kommt die Fehlermeldung "Cannot bind port 80" oder so ähnlich. Ist hier aber wie gesagt nicht der Fall.
Die Ports sind frei weil die Listener auf einem anderen Port laufen 51080 etc.
Mitglied: 4863114660
4863114660 Dec 28, 2022 updated at 09:46:43 (UTC)
Goto Top
Moin,
Eingehende Verbindungen von port 80 und 443 sollen auf 51080 weitergeleitet werden.
Das ist ja auch falsch. Certbot startet bei Verwendung der Option --standalone temporär eine eigenen Webserver-Prozess auf Port 80 also muss dieser vom Router auch auf Port 80 der Maschine gehen und nicht auf den bestehenden Webserver mit deinem Webhook weitergeleitet werden.
https://eff-certbot.readthedocs.io/en/stable/using.html#standalone
Use standalone mode to obtain a certificate if you don’t want to use (or don’t currently have) existing server software. The standalone plugin does not rely on any other server software running on the machine where you obtain the certificate.
To obtain a certificate using a “standalone” webserver, you can use the standalone plugin by including certonly and --standalone on the command line. This plugin needs to bind to port 80 in order to perform domain validation, so you may need to stop your existing webserver.


Alternativ kannst du auch den bestehenden Webserver-Prozess dafür verwenden (ohne --standalone Parameter), dann musst du aber das Webroot dessen angeben und Port 80 wie du oben vorhattest auf den Port 51080 des Servers weiterleiten. Der Certbot Prozess benötigt dann zusätzlich Schreibrechte auf das Webroot im .well-known/acme-challenge Verzeichnis weil er dort die Challenge-Datei für die Verifizierung hinterlegen muss.
https://eff-certbot.readthedocs.io/en/stable/using.html#webroot

Gruß s.