pfSense - Vaultwarden Server von extern

Hallo, ich komme von der Unifi UDM und bin seit kurzem auf die pfSense umgestiegen und habe jetzt das Problem, meinen Vaultwarden Server (Proxmox) von extern zu erreichen.
Hat jemand dazu zufällig eine passende Wiki oder ein paar Tipps.
Ich kann den Vaultwarden nur über die interne IP erreichen.

Aktueller Stand: 
Diese Website ist nicht erreichbar
**xxxxx.home64.de** hat die Verbindung abgelehnt.

Fritzbox (BridgeMode - 10.1.50.1)
I 10.1.50.111 pfSense WAN
I
pfSense (192.168.1.0/24 LAN - noch ohne VLAN)
I
I
UnifiSwitch
I
I
Proxmox Server (192.168.1.220:8006)
I
I
Vaultwarden LXC (192.168.1.231:8000)

bitte deine problematik etwas konkretisieren und klarstellen
oben steht pfsense unten udm
was hast gemacht bzw schon eingestellt

Sorry war wirklich etwas seltsam geschrieben.
Habe es auch oben etwas angepasst.

Was habe ich schon alles probiert.
Eigentlich alles mit dem HAproxy Plugin und dort am Backend & Frontend rum probiert.

Morgen gerne noch mehr dazu, was auch immer ihr von mir wissen wollt.

‚dig‘ zeigt mir nur auf die externe IP-Adresse (edit here)

; <<>> DiG 9.18.19 <<>> xxxxx.home64.de
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7827
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1432
;; QUESTION SECTION:
;xxxxx.home64.de.		IN	A

;; ANSWER SECTION:
xxxxx.home64.de.	60	IN	A	78.24.215.1

;; Query time: 143 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Wed Dec 13 07:31:53 CET 2023
;; MSG SIZE  rcvd: 60

Hier ist noch die HAproxy configuration ‚/var/etc/haproxy/haproxy.cfg file contents‘

# Automaticaly generated, dont edit manually.
# Generated on: 2023-12-13 07:31
global
	maxconn			500
	stats socket /tmp/haproxy.socket level admin  expose-fd listeners
	uid			80
	gid			80
	nbthread			1
	hard-stop-after		15m
	chroot				/tmp/haproxy_chroot
	daemon
	server-state-file /tmp/haproxy_server_state

listen HAProxyLocalStats
	bind 127.0.0.1:2200 name localstats
	mode http
	stats enable
	stats admin if TRUE
	stats show-legends
	stats uri /haproxy/haproxy_stats.php?haproxystats=1
	timeout client 5000
	timeout connect 5000
	timeout server 5000

frontend HTTP-to-HTTPS
	bind			10.1.50.111:80 name 10.1.50.111:80   
	bind			192.168.1.1:80 name 192.168.1.1:80   
	mode			http
	log			global
	option			http-keep-alive
	timeout client		30000
	http-request redirect scheme https 

frontend LocalFrontend
	bind			192.168.1.1:443 name 192.168.1.1:443   ssl crt-list /var/etc/haproxy/LocalFrontend.crt_list  
	mode			http
	log			global
	option			http-keep-alive
	option			forwardfor
	acl https ssl_fc
	http-request set-header		X-Forwarded-Proto http if !https
	http-request set-header		X-Forwarded-Proto https if https
	timeout client		30000
	http-response set-header X-Xss-Protection 1;\ mode=block
	http-response set-header X-Robots-Tag "noindex, nofollow"
	http-response set-header X-Frame-Options SAMEORIGIN
	http-response set-header Referrer-Policy same-origin
	acl			aclcrt_LocalFrontend	var(txn.txnhost) -m reg -i ^xxxxx\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_LocalFrontend	var(txn.txnhost) -m reg -i ^([^\.]*)\.yyyyy\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_LocalFrontend	var(txn.txnhost) -m reg -i ^([^\.]*)\.xxxxx\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_LocalFrontend	var(txn.txnhost) -m reg -i ^yyyyy\.home64\.de(:([0-9]){1,5})?$
	http-request set-var(txn.txnhost) hdr(host)

frontend vaultwarden-xxxxx-home64de
	bind			10.1.50.111:443 name 10.1.50.111:443   ssl crt-list /var/etc/haproxy/vaultwarden-xxxxx-home64de.crt_list crt-ignore-err all  
	mode			http
	log			global
	option			http-keep-alive
	option			forwardfor
	acl https ssl_fc
	http-request set-header		X-Forwarded-Proto http if !https
	http-request set-header		X-Forwarded-Proto https if https
	timeout client		30000
	acl			xxxxx.home64.de	var(txn.txnhost) -m str -i xxxxx.home64.de
	acl			aclcrt_vaultwarden-xxxxx-home64de	var(txn.txnhost) -m reg -i ^xxxxx\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_vaultwarden-xxxxx-home64de	var(txn.txnhost) -m reg -i ^([^\.]*)\.yyyyy\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_vaultwarden-xxxxx-home64de	var(txn.txnhost) -m reg -i ^([^\.]*)\.xxxxx\.home64\.de(:([0-9]){1,5})?$
	acl			aclcrt_vaultwarden-xxxxx-home64de	var(txn.txnhost) -m reg -i ^yyyyy\.home64\.de(:([0-9]){1,5})?$
	http-request set-var(txn.txnhost) hdr(host)
	use_backend vaultwarden-xxxxx_ipvANY  if  xxxxx.home64.de aclcrt_vaultwarden-xxxxx-home64de
	use_backend vaultwarden-xxxxx_ipvANY  if   aclcrt_vaultwarden-xxxxx-home64de

backend vaultwarden-xxxxx_ipvANY
	mode			http
	id			100
	log			global
	timeout connect		30000
	timeout server		30000
	retries			3
	load-server-state-from-file	global
	server			xxxxx.home64.de 192.168.1.231:8000 id 101 ssl  verify none

Mhhh haben meine Infos nichts gebracht??
Ich sehe in der Firewall immer nur die externe IP Adresse, die aber nicht auf die interne IP des Servers geleitet wird.

 	Dec 14 15:59:30 	LAN 	192.168.1.251:64607 	77.23.305.1:443 	TCP:S
	Dec 14 15:59:30 	LAN 	192.168.1.251:64606 	77.23.305.1:443 	TCP:S

Wo baue ich da noch Mist :slight_smile:

	; <<>> DiG 9.10.6 <<>> @8.8.8.8 xxxxxx.home64.de
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40550
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;xxxxxx.home64.de.		IN	A

;; ANSWER SECTION:
xxxxxx.home64.de.	60	IN	A	77.23.205.1

;; Query time: 110 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Dec 14 16:01:42 CET 2023
;; MSG SIZE  rcvd: 60

Hier die Haproxy config

# Automaticaly generated, dont edit manually.
# Generated on: 2023-12-14 15:38
global
	maxconn			100031
	stats socket /tmp/haproxy.socket level admin  expose-fd listeners
	uid			80
	gid			80
	nbthread			1
	hard-stop-after		15m
	chroot				/tmp/haproxy_chroot
	daemon
	server-state-file /tmp/haproxy_server_state

listen HAProxyLocalStats
	bind 127.0.0.1:2200 name localstats
	mode http
	stats enable
	stats refresh 10
	stats admin if TRUE
	stats show-legends
	stats uri /haproxy/haproxy_stats.php?haproxystats=1
	timeout client 5000
	timeout connect 5000
	timeout server 5000

frontend xxxxxx-Server
	bind			192.168.1.1:443 name 192.168.1.1:443   ssl crt-list /var/etc/haproxy/xxxxxx-Server.crt_list  
	mode			http
	log			global
	option			http-keep-alive
	timeout client		30000
	acl			vaultwarden	var(txn.txnhost) -m str -i xxxxxx.home64.de
	acl			unifi	var(txn.txnhost) -m beg -i xxxxxx.duckdns.org
	acl			aclcrt_xxxxxx-Server	var(txn.txnhost) -m reg -i ^xxxxxx\.home64\.de(:([0-9]){1,5})?$
	http-request set-var(txn.txnhost) hdr(host)
	use_backend vaultwarden_ipvANY  if  vaultwarden aclcrt_xxxxxx-Server
	use_backend unifi_ipvANY  if  unifi aclcrt_xxxxxx-Server

frontend HAProxy_stats_ssl_frontend
	bind			192.168.1.1:444 name 192.168.1.1:444   ssl crt-list /var/etc/haproxy/HAProxy_stats_ssl_frontend.crt_list  
	mode			http
	log			global
	timeout client		30000
	default_backend HAProxy_stats_ssl_backend_ipvANY

backend vaultwarden_ipvANY
	mode			http
	id			100
	log			global
	timeout connect		30000
	timeout server		30000
	retries			3
	load-server-state-from-file	global
	server			vaultwarden 192.168.1.231:8000 id 101 ssl  verify none crt /var/etc/haproxy/server_clientcert_657b0f05e4047.pem 

backend unifi_ipvANY
	mode			http
	id			102
	log			global
	timeout connect		30000
	timeout server		30000
	retries			3
	load-server-state-from-file	global
	server			unifi 192.168.1.221:8443 id 101 ssl  verify none crt /var/etc/haproxy/server_clientcert_657b0f05e4047.pem 

backend HAProxy_stats_ssl_backend_ipvANY
	mode			http
	id			105
	log			global
	stats			enable
	stats			uri /
	stats			realm .
	stats			refresh 10
	timeout connect		30000
	timeout server		30000
	retries			3
	load-server-state-from-file	global

Klingt für mich alles nach einem Problem vom HAProxy. Der ist nicht easy zu konfigurieren in der pfsense wenn man es zum ersten mal macht.

Der HAProxy hat auch Statistiken - siehst du denn da die Zugriffe ?

Hi Dennis, ja irgendwas passt mit dem HAProxy noch nicht. Ich komme mir gerade vor, als würde ich das alles zum ersten Mal machen :thinking: … Edit: hehehe, ja auf der pfsense mach ich das auch zum ersten Mal
So wie es aussieht, passiert da nichts oder?

Wenn ich einen dig auf die xxxx.home64.de mache, wird mir auch immer nur die externe IP angezeigt.

Muss ich eigentlich auf der ipv64.net einen DNS-Record (A) setzen?

nur wenn du willst dass die adresse auf deine ip zeigt

Ich möchte halt einen Server hinter der pfsense von extern erreichen

Vaultwarden benötigt bei mir ne Domainangabe als environmentvariable.
unter anderem benötigt er noch das websocket. Ohne diesen lief es bei mir nicht jedoch verwende ich nginx reverse proxy.
port 443 →
8xxx

port 3012 →
location /notifications/hub

port 8xxx →
location /notifications/hub/negotiate

gruss

1 Like

Lieben Dank für die Rückmeldung.
Kannst du das noch ein bisschen genauer beschreiben?
Ich habe aktuell auf der pfSense HAproxy am laufen.
Wenn ich das mit dem nginx besser hinbekomme, kein Thema.
NPM ist aktuell bei mir aus, habe ich aber auf einer Proxmox LXC instaliert,
welche ich vorher für die UDM genutzt habe.

Hi, du kannst ja mal erst versuchen den websocketport weiterzuleiten. Hatte den HAproxy noch nicht im einsatz aber ich sehe da nur http und https ports.
ich habe extern port 443 auf 800x und den port 3012 an die interne ip.

Hier noch meine nginx proxy directiven.

location / {
        proxy_pass http://deineinterneip:8001/;
                    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;


				  location /notifications/hub {
					proxy_pass http://13.10.1.2:3012;
					proxy_set_header Upgrade $http_upgrade;
					proxy_set_header Connection "upgrade";
				  }

				  location /notifications/hub/negotiate {
					proxy_pass http://deineinterneip:8001;
				  }
    }

zusätzlich nicht vergessen deine externe domain in der vaultwarden config anzugeben.
bei meinem habe ich in den enviroment
„- DOMAIN=https://meinedomain.de

gruss

1 Like

Hi, danke Dir für Deine Rückmeldung. Vom lauter probieren, weiß ich langsam gar nicht mehr wo hinten und vorne ist :slight_smile: :slight_smile:
Wenn du HAproxy nicht im Einsatz hast, nutzt Du dann nginx ?? Auch in Verindung mit der pfSense/openSense ??
Aktuell ist es immer noch so, das wohl HAproxy nicht zur internen weiterleitet.
Ein „dig“ auf die xxxxx.home64.de bringt mir die WAN IP der pfSense.