OPNsense Forum
International Forums => German - Deutsch => Topic started by: pumuckl on November 17, 2019, 06:00:23 pm
-
Hallo,
Ich möchte 2-3 http Dienste die über das Web erreichbar sind von http zu https umleiten.
zum beispiel Motioneye, Anleitungen wie man es am Client mit macht hab ich schon gesehen.
ich möchte das aber gleich direkt an der opnsense machen.
Gibt es da Ausführliche Anleitungen?
also wie ich dern Reverse Proxy einrichte und Anleitungen für die opnsese Erweiterung Nginx generell
grüsse
-
Geht mit nginx sicher auch...
Ich würde für den Fall jedoch auf HAProxy setzen.
Gesendet von meinem LG-H815 mit Tapatalk
-
nehme ich auch
gib es ein beispiel oder howto für eine http >https Weiterleitung
-
Naja.. eigentlich nicht wirklich schwer...
Ein Frontend anlegen
mit Port 80
Eine Bedingung anlegen:
Wenn die Verbindung nicht verschlüsselt ist
Eine Regel anlegen:
Wenn Verbindung nicht verschlüsselt dann "http-request redirect" mit "scheme https code 301"
Dann die Regel dem Frontend hinzufügen und es sollte funktionieren
-
Im nginx plugin ist es einfach nur ne checkbox. Kann sein, dass das ne advanced Einstellung ist. Also einfach oben mal auf advanced umschalten.
-
ich hab mich mal daran gehalten:
https://forum.opnsense.org/index.php?topic=11995.0 (https://forum.opnsense.org/index.php?topic=11995.0)
Das ist mein Server hab ihn so angelegt wie er im LAN erreichbar ist:
motioneye 10.10.10.18 xxxx motioneye
SSL und Überprüfen Sie das SSL-Zertifikat hab ich nicht angehakt weil die Seite http ist.
Dann hab ich ein Backend erstellt und meinen Server ausgewählt.
Frontend ist vermutlich der Öffentliche Dienst
Mir ist da nicht klar was ich als Hörende Adressen eintragen soll
intern: 10:10:10:18:80 ?
extern www.xxxxxxserver.duckdns.org:80 ? (wenn ich diese Adresse eingebe hängt der Haproxy,hab entfernt)
ab hier möchte ich verschlüsseln, hab mal alles Standard gelassen und 100 Verbindungen erlaubt
hab eine Bedingung erstellt:
Datenverkehr ist http
Regel erstellt:
Bedingungen Auswählen: Datenverkehr ist http
Funktion ausführen http-request redirect
HTTP-Umleitung scheme https code 301
habe diese Einstellungen angewendet
Wenn ich 10.10.10.18 aufrufe
Die Server-IP-Adresse von _ wurde nicht gefunden.
Der Proxy dürft arbeiten weil
10.10.10.18:8080 (geht ins lere) gibt folgende Ausgabe
10.10.10.18 hat die Verbindung abgelehnt.
Was fehlt noch?
_________________________
edit 1:
der HaProxy läuft nicht
Das Frontend bzw die listen Adressen sind Falsch
was muss ich da für Adressen eingeben?
-
HaProxy läuft jetzt
Konnte den Dienst nicht öffnen, weil ich kein Zertifikat habe.
Habe dann diese Anleitung gefunden:
https://www.google.com/amp/s/blog.bagro.se/lets-encrypt-with-haproxy-on-opnsense/amp/
(https://www.google.com/amp/s/blog.bagro.se/lets-encrypt-with-haproxy-on-opnsense/amp/)
Mein Problem:
Ich kann kein Zertifikat erstellen, weil ich keinen Server laufen habe . Der mit lets encrypt angesprochenen wird.
Wie komme ich am besten zu einen brauchbaren Zertifikat.
Kann ich das Zertifikat für die opnsense Webseite gui verwenden?
-
Wenn Du HA Proxy als Reverse Proxy verwendest kannst Du doch auf der OPNSense Firewall das Letsencrypt Packet installieren und entsprechend einrichten. Mit dem Packet wird alles automatisch nach konfiguration für ein Zertifikat gemacht. Das Zertifikat landet dann in Deinem Zertifikatsordner.
System -> Trust -> Authories
-
ich schaffe es nicht ein Zertifikat zu erstellen, bzw das es ausgestellt ist.
Certificate Options
Aktiviert
Common Name xxxxxxserver.duckdns.org
Beschreibung zertifikat
Alternative Namen
et's Encrypt Settings
LE-Konto zert1
Überprüfungsmethode zert1
Automatische Erneuerung x
Erneuerungsintervall 60
Sicherheitseinstellungen
Key Length 4096
OCSP Must Staple
Erweiterte Einstellungen
Automations auto
Alles entfernen
DNS Alias Mode not usin
xxxxxxserver.duckdns.org geht auf die ip von meinen router
von da hab ich nur wenige ports auf die opnsense weitergeleitet.
port 80 ist nicht dabei
wenn ich das zertifikat erstellen will bekomme ich diese Fehler:
[Wed Nov 20 12:56:08 CET 2019] Please check log file for more details: /var/log/acme.sh.log
[Wed Nov 20 12:56:08 CET 2019] _on_issue_err
[Wed Nov 20 12:56:08 CET 2019] skip dns.
[Wed Nov 20 12:56:08 CET 2019] dns_entries
[Wed Nov 20 12:56:08 CET 2019] _clearupdns
[Wed Nov 20 12:56:08 CET 2019] No need to restore nginx, skip.
[Wed Nov 20 12:56:08 CET 2019] pid
[Wed Nov 20 12:56:08 CET 2019] Create domain key error.
[Wed Nov 20 12:56:08 CET 2019] Add '--force', and try again.
[Wed Nov 20 12:56:08 CET 2019] Domain key exists, do you want to overwrite the key?
[Wed Nov 20 12:56:08 CET 2019] ACME_DIRECTORY='https://acme-staging-v02.api.letsencrypt.org/directory'
[Wed Nov 20 12:56:08 CET 2019] Using config home:/var/etc/acme-client/home
[Wed Nov 20 12:56:08 CET 2019] Creating domain key
[Wed Nov 20 12:56:08 CET 2019] Read key length:
[Wed Nov 20 12:56:08 CET 2019] _saved_account_key_hash is not changed, skip register account.
[Wed Nov 20 12:56:08 CET 2019] d
[Wed Nov 20 12:56:08 CET 2019] _currentRoot='/var/etc/acme-client/challenges'
[Wed Nov 20 12:56:08 CET 2019] Check for domain='xxxxxxserver.duckdns.org'
[Wed Nov 20 12:56:08 CET 2019] d='xxxxxxserver.duckdns.org'
[Wed Nov 20 12:56:07 CET 2019] Le_LocalAddress
[Wed Nov 20 12:56:07 CET 2019] _chk_alt_domains
[Wed Nov 20 12:56:07 CET 2019] _chk_main_domain='xxxxxxserver.duckdns.org'
[Wed Nov 20 12:56:07 CET 2019] _on_before_issue
[Wed Nov 20 12:56:07 CET 2019] ACME_VERSION='2'
[Wed Nov 20 12:56:07 CET 2019] ACME_NEW_NONCE='https://acme-staging-v02.api.letsencrypt.org/acme/new-nonce'
[Wed Nov 20 12:56:07 CET 2019] ACME_AGREEMENT='https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf'
[Wed Nov 20 12:56:07 CET 2019] ACME_REVOKE_CERT='https://acme-staging-v02.api.letsencrypt.org/acme/revoke-cert'
[Wed Nov 20 12:56:07 CET 2019] ACME_NEW_ACCOUNT='https://acme-staging-v02.api.letsencrypt.org/acme/new-acct'
[Wed Nov 20 12:56:07 CET 2019] ACME_NEW_ORDER='https://acme-staging-v02.api.letsencrypt.org/acme/new-order'
[Wed Nov 20 12:56:07 CET 2019] ACME_NEW_AUTHZ
[Wed Nov 20 12:56:07 CET 2019] ACME_KEY_CHANGE='https://acme-staging-v02.api.letsencrypt.org/acme/key-change'
[Wed Nov 20 12:56:07 CET 2019] ret='0'
[Wed Nov 20 12:56:07 CET 2019] _CURL='curl -L --silent --dump-header /var/etc/acme-client/home/http.header -g '
[Wed Nov 20 12:56:07 CET 2019] timeout=
[Wed Nov 20 12:56:07 CET 2019] url='https://acme-staging-v02.api.letsencrypt.org/directory'
[Wed Nov 20 12:56:07 CET 2019] GET
[Wed Nov 20 12:56:07 CET 2019] _init api for server: https://acme-staging-v02.api.letsencrypt.org/directory
[Wed Nov 20 12:56:07 CET 2019] Using ACME_DIRECTORY: https://acme-staging-v02.api.letsencrypt.org/directory
[Wed Nov 20 12:56:07 CET 2019] DOMAIN_PATH='/var/etc/acme-client/home/xxxxxxserver.duckdns.org'
[Wed Nov 20 12:56:07 CET 2019] ACME_DIRECTORY='https://acme-staging-v02.api.letsencrypt.org/directory'
[Wed Nov 20 12:56:07 CET 2019] Using stage ACME_DIRECTORY: https://acme-staging-v02.api.letsencrypt.org/directory
Brauche ich eine Domain um ein Zertifikat zu bekommen?
______________________________________________________
Edit1:
vermutlich muss ich Port 80 und 443 vom Router zu Firewall weiter leiten.
bzw Opensense als DMZ im Router setzen
Damit die Let's Encryp Erweiterung einen Antwort bekommt.
-
Wie Du schon richtig erkannt hast musst Du Port 80 auf die Firewall weiterleiten lassen. Von da an gibt es dann in "wenn Du HA Proxy" in der Letsencrypt Konfig angegeben hast einen Eintrag in der HA Proxy Konfig damit Deine Domain gecheckt werden kann.
-
Irgendwie klappt das mit dem Zertifikat noch nicht.
Hab folgende Ports geöffnet und zur Opnsese weitergeleitet.
IPv4 TCP * * Diese Firewall 42520 * * HTTP_HAproxy
IPv4 TCP * * Diese Firewall 80 (HTTP) * * HTTP_HAproxy
oder geht das so gar nicht?
Brauche ich eine registrierte Domain oder geht das auch mit dem dns dienst von duckdns?
-
Ich konnte mit dem Nginx Plugin nach dieser Anleitung:
https://docs.opnsense.org/manual/how-tos/nginx.html (https://docs.opnsense.org/manual/how-tos/nginx.html)
es einrichten das wenn ich die IP der Firewall auf port 8080 aufrufe ich zu meinen Server weitergeleitet werde.
Edit Location:
root / 0 1
HTTP Server:
127.0.0.1 1 8080 8443
Port 8443 ist aber nicht erreichbar
bzw wie richte ich ab hier den reverse proxy ein?
-
Hast du Zertifikat etc. auch konfiguriert? Ohne wird TLS nicht funktionieren.
Ansonsten ist der Port in der Firewall offen?
-
hab ein Selbst signiertes Zertifikat erstellt via trust und certificates
https://www.thomas-krenn.com/de/wiki/Selbstsignierte_SSL_Zertifkate_mit_OPNsense_erstellen (https://www.thomas-krenn.com/de/wiki/Selbstsignierte_SSL_Zertifkate_mit_OPNsense_erstellen)
:'( Damit hab mich erfolgreich ausgesperrt
Wenn ich den Zugriff wieder hergestellt habe, wie erstelle ich am besten ein Zertifikat für meine opnsense und andere Dienste bzw reicht ein Zertifikat für den https proxy?
geht das via trust und certificates über haut noch oder sollte ich das lets encrypt plugin nehmen. `
gibt es eine Anleitung für das lets encrypt plugin?
grüsse und thx
-
Ja, geht noch über trust aber LE wäre besser. Für LE muss dein Server auf Port 80 hören oder du musst DNS konfigurieren.
Für LE gibt es eine Checkbox (könnte advanced sein) im Server um die Challenge umzuleiten (acme plugin).
Das kann bei richtiger Konfiguration zertifikate ausstellen und die können dann in den nginx eingespielt werden.
-
Ja, geht noch über trust aber LE wäre besser. Für LE muss dein Server auf Port 80 hören oder du musst DNS konfigurieren.
Für LE gibt es eine Checkbox (könnte advanced sein) im Server um die Challenge umzuleiten (acme plugin).
Das kann bei richtiger Konfiguration Zertifikate ausstellen und die können dann in den nginx eingespielt werden.
Opnsense Port 80 und 443 sind durch das GUI blockiert
Nginx läuft auf der sense und hört auf 8080
Let's Encryptist auch auf der sense installiert und unter den erweiterten Einstellungen kann man einen Port einstellen zb 40350 muss der in der Firewall geöffnet oder weitergeleitet werden?
Ich habe eine Selfhost Domain und einen duck dns beides wird via dyndns auf meine IP weitergeleitet.
Ich denke mit Le sollte beides gehen.
Also der common name bei LE wäre zb irgendwas-Selfhost.de der wird dann auf meine IP geleitet.
Versucht LE dann auf meier Sense zu schreiben?
Oder wird über Nginx da schon auf meinen Server auf port 80 zugegriffen? Was müsste da dann lauschen?
-
Du kannst den Port vom Web interface ändern. Dann kann nginx die Ports 80 und 443 verwenden und LE funktioniert.
LE gibt nun mal vor, dass es Port 80 für die Challenge HTTP 01 sein muss.
Der Port Om LE wird verwendet, weil intern vom LE plugin ein kleiner Webserver zur Verarbeitung der Challenge gestartet wird der diese bearbeitet. HAProxy und nginx leiten ACME Anfragen an diesen weiter. Dieser muss von außen nicht direkt erreichbar sein. Nur Port 80 mit nginx oder HAProxy plugin.
-
Ich habs irgendwie geschafft
In das LE plugin hab ich meine Domain eingetragen.
Den Opnsese GUI https Port habe ich geändert
Aber es gibt noch die Antiaussperr NAT die http 80 auf den neuen https Port der Opnsese weiterleitet.
nginx läuft jetzt auf 8080,
Wie kann ich die anti aussperr NAT ändern?
Beim Aufrufen meines Servers habe ich folgende Meldung:
NET::ERR_CERT_COMMON_NAME_INVALID
Dieser Server konnte nicht beweisen, dass er 10.10.10.1 ist. Sein Sicherheitszertifikat stammt von XXXXXserver.duckdns.org. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.
Wo muss ich die IP beim zertifikat hinzufügen?
schönen Advent beginn
-
Die IP-Adresse kannst du in ein LE-Zertifikat eintragen - da musst du den Hostnamen verwenden.
Die Umleitung wird dort konfiguriert, wo du auch den Port änderst. Da gibt's ne Checkbox für die Port 80 Weiterleitung.
-
Das mit Port 80 Hab ich hinbekommen.
Beim Zertifikat und bei den URL Pattern hab ich noch Probleme:
Das ist die Einstellung von meinem Zertifikat:
Suche
Aktiviert
Common Name Multi-Domain (SAN) Beschreibung Ausstellungs-/Erneuerungsdatum Letzter Acme-Status Letzter Acme-Durchlauf Befehle
xxxxserver.duckdns.org Let's Encrypt: Zertifikat 2.12.2019, 14:08:38 Überprüfung Ok 2.12.2019, 22:36:44
Ich kann bei Common Name nicht den Hostnamen angeben, weil mindestens ein Punkt vorhanden sein muss
Eine IP kann man auch nicht angeben.
wenn ich den Hostname , oder die IP bei Multi-Domain eingebe wird das Zertifikat Fehler haft.
oder muss ich sense.localdomain oder so ähnlich im Zertifikat angeben?
Hostname sense
Domain localdomain
Wenn ich bei URL Pattern was anderes als / eingebe wir mein server nicht gefunden
ich hab folgendes probiert:
/server
/server/
Match Type alle ausprobiert
und so im Browser eingegeben
meineip/server
meineip/server
ode rmuss ich da mit den Präfix machen ?
-
Du brauchst dann mehrere HTTP Server (nginx) für unterschiedliche Hostnamen.
Zum Beispiel:
firewall.example.net
app.example.net
Von außen kannst du dann für beide jeweils ein Zertifikat ausstellen lassen. Dann kannst du über firewall.example.net auf die FW über HTTPS zugreifen.
Das App-Zertifikat wird dann nur für deine Applikation verwendet.
-
zwischen durch ein Danke schön
Ich hab mittlerweile 2 sub Domains bei selfhost erstellt, so wie zwei http server und locations.
Bei mir hakt es noch mit den Locations
wie funktioniert das matchen vom URL Pattern?
was muss ich bei URL Pattern und Match Type eingeben
in den Anleitungen zu nginx und opnsese steht dazu nichts Ausseer das / als matched
das funktioniert nicht:
URL Pattern
server1.xxxxxx.selfhost.co
/server1.xxxxxx.selfhost.co
kann ich dann auch noch eine Location erstellen die alle andere anfragen blockt?
oder ist das nicht notwendig
mfg
-
/ heist eigentlich alles. Die Hostnamen werden über verschiedene HTTP Server voneinander getrennt. Da können gerne mehrere auf Port 80 oder 443 antworten, solange es das gleiche Protokoll ist.
alles was im location block gemacht wird, bezieht sich auf dem Pfad. Zum Beispiel für das OPNsense blog allein würdest du den folgenden teil als location match angeben:https://opnsense.org/blog/
-
Ich rufe die URL exakt wie im URL Pattern angegeben auf, bzw hat die url kopiert und eingefügt.
Bei beiden Varianten bekomme ich den Fehler "Not Found"
Beschreibung URL Pattern Match Type WAF Enabled Force HTTPS Befehle
server1 https://server1.xxxxxx.selfhost.co/server1/ Exakte Übereinstimmung ("=") 0 1
Beschreibung URL Pattern Match Type WAF Enabled Force HTTPS Befehle
server1 server1.xxxxxx.selfhost.co/server1/ Exakte Übereinstimmung ("=") 0 1
was ist hier noch Falsch?
-
Dass du immer noch die volle URL rein schreibst. Du bist mit der location im http Server relativ zu diesem.
Nochmal: nur den resourcenpfad in dieses Feld eingeben. Kein Protokoll, keinen Port und keinen Hostnamen.
-
so hatte ich es schon zu beginn versucht
URL Pattern:
/server1/
url richtiger aufruf:
https://xxxxxx.selfhost.co/server1/
dann bekomme ich nur den Fehler angezeigt:
{"error": "not found"}
wenn ich die url falsch eingebe sieht es aber so aus:
url:
https://xxxxxx.selfhost.co/serverxxxxx/
Not Found
The resource you want to access is not available.
Please contact the webmaster if you think this is an error.
Web Application Protection by OPNsenseOPNsense Logo
die weiterleitung auf meinem Server funktioniert nur wenn ich / als Pattern eingebe, was auch klar ist.
muss ich bei der Location noch was angeben?
URL Rewriting, Pfadpräfix, File System Root , Index File oder Automatic Index
-
Die upstreams aber die wirst du schon haben.
-
so funktionierts ja
/
danach werde ich auf meinen upstream server weitergeleitet
so nicht:
/server1/
also denke ich das das Problem bei der Location liegt
-
mit der location gibts du an, auf welchen pfad du matchen willst - das wird dann trotzdem so an den server weitergeleitet.
/server1/ als match bedeutet, dass du alles was gleich /server1/ ist oder darunter liegt, so an den server um upstream weiterleiten willst.
also www.example.com/server1/test geht an testip:80/server1/test. Alles wofür es keine spezielle Location gibt, landet im http server und damit vermutlich im nirgendwo.
Was du haben willst.
Willst du VHosts trennen, geht das anders:
HTTP Server 1 (server1.example.com) -> Location H1 (Match /) -> Upstream (1)
HTTP Server 2 (server2.example.com) -> Location H2 (Match /) -> Upstream (1)
(1) die können theoretisch ident sein, wenn beide webseiten am selben server liegen.
-
Das War eine Zangengeburt, jetzt funktionierte es und das Zertifikat passt auch.
Location: URL Pattern: "/"
Beim HTTP Server habe ich bei Servername, die Domain meiner Anwendung anstatt von "localhost" eingetragen.
vielen Dank Fabian
Ich hätte jetzt noch Fragen zur Sicherheit:
Meine 2 Webanwendungen werden von nginx mit Benutzer und Passwort(35 Zeichen) abgefragt .
Fasche Anfragen führen zu einem error not found.
Ich hab eine Limit Zone angelegt mit 10MB und 10 Zugriffen/Sekunde.
Schützt mich das von ddos und brut force?
Auf meine Webanwendungen greife <5 Personen / Geräte zu
Ist das sicher genug oder sollte ich noch etwas machen?
grüsse
-
Mehr wirst du kaum machen können da es sonst nur noch die IP ACLs gibt. Gegen DDoS kannst du genau genommen gar nix machen.