Jump to content

[SOLVED] Vaultwarden nur über VPN erreichbar machen


sakistech

Recommended Posts

Hallo zusammen,

 

wie Ihr schon im Title sehen könnt, bin ich seit Stunden auf der Suche mein Vaultwarden lokal zu nutzen, ohne Letsencrypt, ohne Domain etc.

Ziel ist es das man nur per Wireguard darauf zugreifen kann.

 

Leider konnte ich im Internet nichts passendes dazu finden. kann mir da jemand weiterhelfen?

 

LG

Sakis

Edited by ich777
changed title to solved
Link to comment

Meinst du wegen der Fehlermeldung?

Quote

This browser requires HTTPS to use the web vault

Check the Vaultwarden wiki for details on how to enable it

 

Ich denke mal du musst sowas machen wie ich:

https://forums.unraid.net/topic/115369-nginx-ssl-zertifikat-für-lokal-genutzte-domains/?tab=comments#comment-1048918

 

Damit kann ich alles über https erreichen, aber eben nur lokal. Wobei man um die Portfreigabe nicht herum kommt, wenn man keine DNS Challenge machen kann (weil Let's Encrypt ja über Port 80 dann die URL Challenge macht). Also entweder hast du eine eigene Domain und machst eine DNS Challenge und lässt alle Ports zu oder du nimmst eine DDNS und öffnest Port 80 (ginge im Härtefall auch nur alle 3 Monate für den Refresh der Let's Encrypt Validierung). Oder vielleicht ein Cloudflare Zertifikat? Das ist ja meine ich auch kostenlos.

 

Ich habe dann über die erweiterten Einstellungen des Containers bei WebUI meine Domain https://passwords.example.com hinterlegt. Auf die Art geht die dann direkt über die verschlüsselte Domain auf.

 

Alternativ müsste man es mit einem self-signed Zertikat versuchen, das man in seinem Browser installiert. Aber ohne Proxy (NPM oder SWAG) davor geht es denke ich nicht, da der Container selbst ja nur auf Port 80, also http lauscht.

Link to comment
16 hours ago, mgutt said:

Meinst du wegen der Fehlermeldung?

Ein Fehler ist aufgetreten.
Username or password is incorrect. Try again

Ja genau.

 

16 hours ago, mgutt said:

 

Ich denke mal du musst sowas machen wie ich:

https://forums.unraid.net/topic/115369-nginx-ssl-zertifikat-für-lokal-genutzte-domains/?tab=comments#comment-1048918

 

Damit kann ich alles über https erreichen, aber eben nur lokal. Wobei man um die Portfreigabe nicht herum kommt, wenn man keine DNS Challenge machen kann (weil Let's Encrypt ja über Port 80 dann die URL Challenge macht). Also entweder hast du eine eigene Domain und machst eine DNS Challenge und lässt alle Ports zu oder du nimmst eine DDNS und öffnest Port 80 (ginge im Härtefall auch nur alle 3 Monate für den Refresh der Let's Encrypt Validierung). Oder vielleicht ein Cloudflare Zertifikat? Das ist ja meine ich auch kostenlos.

Ich habe eine Domain und verwalte die über Cloudflare. Da ich eine Fritzbox habe, kann ich mit hilfe diesem PHP-Script über Cloudflare eine DynDNS Adresse erstellen z.b. home.example.de

 

ich nutze Pihole und habe unter "Pi-hole domain name" die Dydns eingetragen, also home.example.de

 

Jetzt habe per NPM einen host erstellt (pass.home.example.de)  und die DNS-Validierung per Cloudflare durchgeführt (keine Ports geöffnet). und ich habe bei Advanced folgendes eingetragen.

location / {
  # allow anyone in 192.168.178.0/24
  allow 192.168.178.0/24;
  # allow our public ip
  allow 12.34.56.789; # aktuelle IP
  # drop rest of the world
  deny all;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection $http_connection;
  proxy_http_version 1.1;
  # Proxy!
  include conf.d/include/proxy.conf;
}

Wenn ich nun pass.home.example.de aufrufe, wird die mir unverschlüsselt geöffnet, also mit Port 80.

 

 

16 hours ago, mgutt said:

 

Ich habe dann über die erweiterten Einstellungen des Containers bei WebUI meine Domain https://passwords.example.com hinterlegt. Auf die Art geht die dann direkt über die verschlüsselte Domain auf.

Das habe ich schon probiert, bringt aber nichts. wird immer mit Port 80 geöffnet.

 

16 hours ago, mgutt said:

Alternativ müsste man es mit einem self-signed Zertikat versuchen

Das war auch mein gedanke. Wie kann ich für alle Docker Container einen self-signed Zertikat erstellen, oder gibt es da eine App?

 

16 hours ago, mgutt said:

Ich dachte ADMIN_TOKEN ist das Passwort?!

ja genau, die URL ist folgende https://example.de/admin den ADMIN-TOKEN kann man auch unter /mnt/user/appdata/bitwarden/config.json finden.

 

Hier die Ping ausgabe.

ping pass.home.example.de

Ping wird ausgeführt für pass.home.example.de [192.168.178.107] mit 32 Bytes Daten:
Antwort von 192.168.178.107: Bytes=32 Zeit<1ms TTL=64
Antwort von 192.168.178.107: Bytes=32 Zeit<1ms TTL=64
Antwort von 192.168.178.107: Bytes=32 Zeit<1ms TTL=64
Antwort von 192.168.178.107: Bytes=32 Zeit<1ms TTL=64

Ping-Statistik für 192.168.178.107:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

 

Wenn ich die Seite mit https aufrufe kommt folgende Fehlermeldung

Fehler: Verbindung fehlgeschlagen

Beim Verbinden mit pass.home.example.de trat ein Fehler auf.

    Die Website könnte vorübergehend nicht erreichbar sein, versuchen Sie es bitte später nochmals.
    Wenn Sie auch keine andere Website aufrufen können, überprüfen Sie bitte die Netzwerk-/Internetverbindung.
    Wenn Ihr Computer oder Netzwerk von einer Firewall oder einem Proxy geschützt wird, stellen Sie bitte sicher, dass Firefox auf das Internet zugreifen darf.

 

 

Link to comment
1 hour ago, sakistech said:

Das habe ich schon probiert, bringt aber nichts. wird immer mit Port 80 geöffnet.

 

Bei mir nicht. Bei mir geht das, außer eben die Fehlermeldung beim Login:

372173444_2021-12-0419_54_08.thumb.png.8ff818b2ef2f79495b7f80b6b8caeaf8.png

 

Bei NPM:

688809187_2021-12-0419_56_18.png.564bac0d834e2240ecf82737c57020bd.png

 

7899507_2021-12-0419_57_38.png.1899d1ccead97b2d940dfeb3a84a4f8e.png

 

1644034225_2021-12-0419_56_51.png.e287f194e50f6f29f4f6f1a3c823d0ee.png

 

Wie man sieht habe ich nicht mal https erzwungen. Ich kann daher bitwarden sowohl über http als auch über https öffnen.

 

1 hour ago, sakistech said:

ja genau, die URL ist folgende https://example.de/admin den ADMIN-TOKEN kann man auch unter /mnt/user/appdata/bitwarden/config.json finden.

Ok, die hab ich gar nicht ^^

image.png.623007a09cfdef33dc1afcbd434e3a26.png

 

 

Link to comment

Ok, ich bin maximal verwirrt. Über "Konto erstellen" konnte ich mir einen User anlegen und auch ein beliebiges Master-Passwort setzen und mich dann auch anmelden. Aber da können sich dann ja unendlich viele Leute Accounts anlegen oder wie?! Wozu kann man dann überhaupt die Variablen beim Container ausfüllen?!

 

EDIT: OK, macht Sinn. Ich habe ja SIGNUPS_ALLOWED auf true gesetzt. Aber warum ignoriert der SERVER_ADMIN_EMAIL und ADMIN_TOKEN? Und vor allem warum habe ich eine SQLite Datenbank und du eine json Datei als Speicherort?

 

EDIT2: Ich habe mir jetzt die sqlite Datenbank heruntergeladen und mal reingeschaut. Es gibt gar keine User, also SERVER_ADMIN_EMAIL scheint gar nichts zu machen:

361724860_2021-12-0420_12_50.png.04c4439af25089a019253b1a6fa74932.png

 

Erst wenn man ein Konto über die GUI erstellt, wird dieser User der Tabelle hinzugefügt.

 

EDIT3: OK. Das erstellt keinen User, sondern der User, der sich registriert und die selbe E-Mail-Adresse hat wie in SERVER_ADMIN_EMAIL, der hat in der GUI mehr Rechte. Diese Info wurde zwischenzeitlich aus der Read Me gelöscht. Findet man nur noch in der alten Version:

https://github.com/thelittlefireman/bitwarden_rs/tree/6d4786d379ea6503ebdc8457754b90eb61a6b130#configure-server-administrator

 

Wobei die Frage ist ob das bei Vaultwarden auch so existiert?!

 

EDIT4: Nein, die Variable gibt es gar nicht mehr:

https://github.com/dani-garcia/vaultwarden/search?q=SERVER_ADMIN_EMAIL&type=code

 

EDIT5: Hier stehen alle Variablen, die es noch gibt inkl Beschreibung:

https://github.com/dani-garcia/vaultwarden/blob/ead2f02cbd8a6fe29da0d0b09e68569920d3a4d2/src/config.rs#L371

 

Und wenn ich das richtig verstehe, kann quasi jeder User auf einen Admin-Link klicken, aber diesen nicht öffnen, wenn er nicht den ADMIN_TOKEN kennt:

https://github.com/dani-garcia/vaultwarden/blob/ead2f02cbd8a6fe29da0d0b09e68569920d3a4d2/src/api/admin.rs#L72

 

EDIT6: Ahaaaa. Man kann https://passwords.example.com/admin öffnen um das Admin-Panel zu erreichen. Da braucht es keinen User für. Nur den Token:

image.thumb.png.752e02fdc0c221144fafc90351a252e8.png

 

EDIT7: Ich habe einen Pull Request für das Template gestartet, damit das etwas klarer wird:

https://github.com/selfhosters/unRAID-CA-templates/pull/299 @Roxedus

Link to comment
23 hours ago, sakistech said:

Wenn ich die Seite mit https aufrufe kommt folgende Fehlermeldung

Fehler: Verbindung fehlgeschlagen

Beim Verbinden mit pass.home.example.de trat ein Fehler auf.

Deine Domain hat eine lokale IP. Ist das NPM mit einer statischen IP aus dem br0 Netzwerk oder die von Unraid und NPM läuft im Bridge Modus? Weil der Fehler sagt ja klar aus, dass auf Port 443 keine Antwort kommt. Lauscht NPM auf Port 443?

 

2 hours ago, sakistech said:

Wie ist dein "Netzwerk-Aufbau" ?

Bei mir läuft NPM als Host und Unraid lauscht auf Port 5000/5001. Dh NPM lauscht über die Unraid IP auf Port 80, 81 und 443.

Link to comment

Ich habe es nun geschaft. 😄

 

Ich möchte hier mein vorgehen genauer beschreiben, vielleicht hilft es den einen oder anderen.

 

Was ist unser Ziel?

  • Let`s Encrypt Zertifikate für die lokale Domain
  • keine Portfreigabe am Router, da Cloudflare DNS-Validierung genutzt wird
  • Host und SSL Verwaltung mittels Nginx Proxy Manager
  • alle Geräte im Heim-Netzwerk sollen über HTTPS kommunizieren können

 

Was wird benötigt?

  • eine eigene Domain
  • Pihole als DNS sowie DHCP
  • Cloudflare Account um DNS zu verwalten

 

Auf gehts.

  1. Domain kaufen
  2. Domain zu Cloudflare umziehen
  3. API-Token bei Cloudflare erstellen ("DNS:bearbeiten" reicht aus)
  4. "Nginx-Proxy-Manager-Official" installieren
  5. NPM WebGui öffnen und ein Letsencrypt Wildcard Zertifikat installieren mittels DNS-Challange (API-Token eintragen)
  6. In Pihole unter "Settings" -> "DHCP" -> "Pi-hole domain name:" folgendes eintragen "example.com"
  7. In Pihole unter "Local DNS" -> "DNS Records" -> subdomain und IP von NPM eintragen. z.b. proxy.example.com und 192.168.178.100
  8. SSH-Verbinung mit Pihole herstellen und folgendes .conf erstellen
  9. sudo nano /etc/dnsmasq.d/03-pihole-dns-reverse-proxy.conf
  10. Darin dann folgendes eintragen (example.com entsprechend anpassen und die IP vom NPM eintragen)
  11. address=/example.com/192.168.178.100

     

  12. dann einmal mit "pihole restartdns" den DNS-Resolver neustarten.
  13. Neuen Host erstellen in NPM (example.com und die ip vom NPM als Port 81 eingeben)
  14. Wenn ihr nun die Domain example.com öffnet, sollte das Login Fenster von NPM mit gültigen SSL erscheinen.

 

Somit kann ich nun mein Vaultwarden über VPN nutzen, da es ein gültiges Zertifikat hat.

Natürlich kann man auch weitere Dienste wie Plex, Nextcloud etc mittels HTTPS lokal absichern. Man muss dann nur unter "Local DNS" -> "CNAME Records" -> "Domain:" plex.example.com -> "Target Domain:" proxy.example.com.

 

Ich möchte betonen das ich kein ITler bin, wer Verbesserungen und Optimierungen hat, dann her damit. Mit dieser Anleitung funktioniert es soweit bei mir.

 

LG

Sakis

Edited by sakistech
Link to comment
  • ich777 changed the title to [SOLVED] Vaultwarden nur über VPN erreichbar machen

Optional kann es notwendig sein, dass du im Router den DNS rebind Schutz für deine Domain aufheben musst. Das ist z.b. bei einer Fritzbox der Fall.

 

Lassen sich custom DNS-Einträge bei pihole nicht über die GUI erstellen?

 

Wer das nachbauen will sollte übrigens eine separate Hardware für pi-hole haben. Ansonsten kommt man nicht mehr ins Internet wenn der unRAID Server aus ist und Pihole darauf läuft.

Link to comment
On 12/6/2021 at 8:25 AM, mgutt said:

Optional kann es notwendig sein, dass du im Router den DNS rebind Schutz für deine Domain aufheben musst. Das ist z.b. bei einer Fritzbox der Fall.

meine Fritzbox erreiche ich über die IP, daher habe ich bei den DNS Rebind Schutz nichts geändert-

 

On 12/6/2021 at 8:25 AM, mgutt said:

Lassen sich custom DNS-Einträge bei pihole nicht über die GUI erstellen?

Das ist korrekt. Man muss nur Punkt 9 bis 11 manuell per Putty eintragen, alles andere dann über die GUI.

 

On 12/6/2021 at 8:25 AM, mgutt said:

Wer das nachbauen will sollte übrigens eine separate Hardware für pi-hole haben. Ansonsten kommt man nicht mehr ins Internet wenn der unRAID Server aus ist und Pihole darauf läuft.

Ja genau, bei mir läuft Pihole auf einem Raspberry Pi 4.

 

Die oben genannte Anleitung ist noch experimentell, folgende probleme bestehen noch.

  • wenn ich unter Pihole einen CNAME für den Unraid Server erstelle z.b. server.example.com -> proxy.example.com und dann einen Proxy Host in NPM mit der Domain server.example.com und der ip vom Unraid-Server und Port 80, dann erhalte ich die Fehlermeldung "502 Bad Gateway" wenn die die Domain server.example.com aufrufe.
  • Wenn ich mich per Wireguard auf den Server verbinde kann ich z.b. die Fritzbox über die IP 192.168.178.1 aufrufen, aber die Docker Container nicht. Weder mit IP noch mit der internen Domain z.b. plex.example.com

Wo kann da der fehler liegen?

 

LG

Sakis

Link to comment
6 hours ago, jj1987 said:

Damit würde ich anfangen und z.B. "plex.example.com" im Rebind-Schutz eintragen

leider liegt es nicht daran. Es muss irgendwas mit dem Unraid-Server sein, vielleicht die Interfaces? Weil wenn ich z.b. über den VPN-Tunnel auf meiner tasmota zugreifen möchte (http://tasmota/) dann wird mir das ganz normal angezeigt, sogar ohne tasmota.example.com und ohne eintrag im DNS-Redind-Schutz. Auch auf die Fritzbox kann ich mittels IP zugreifen 192.168.178.1, nur auf alles andere was im Unraid-Server ist kann ich nicht zugreifen.

Edited by sakistech
Link to comment

Ich habe den fehler gefunden.

 

1.) Im Unraid unter "Settings" -> "Docker" -> "Host access to custom networks:" auf Enabled setzen.

2.) Im Unraid unter "Settings" -> "VPN Manager" -> "Local server uses NAT:" auf No setzen.

3.) in der Fritzbox eine statische Route machen (Netzwerk > Netzwerkeinstellungen > Statische Routingtabelle

von 10.253.0.0/24 (Das ist die IP die unter "VPN Manager" -> "Local tunnel network pool:" steht.)

zu 192.168.178.200 (Die IP eueres Unraid-Servers)

 

man braucht kein DNS Rebindschutz etc. vermutlich weil ich DNS und DHCP über Pihole amlaufen habe, auf einem Raspberry Pi 4.

 

Mit dieser Einstellung kann ich jetzt über VPN sowohl über die lokale IP als auch über die NPM erstellte Host zugreifen und das mit einem gültigen SSL fürs lokale Netz.

 

Link to comment
  • 1 year later...

Eine einfachere Lösung ist vielleicht per SSH und einen Portforward auf die GUI zuzugreifen und die Einstellungen sonst auf lokal zu lassen. Das funktioniert bei mir wunderbar und hat genau den Effekt dass Vaultwarden/Bitwarden nur von innen erreichbar ist und sonst in den Apps auf dem Handy problemlos funktioniert.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...