Jeg har arbejdet lidt med en Microsoft SSTP løsning bag en HAproxy ReverseProxy enhed.

SSTP vpn er en port 443 (https) baseret vpn løsninger, og som "direct access" er den lagt på port 443 for at kunne bruges på de fleste offentlige netværk, hvor trationelle VPN porte er lukket.

 Selve Microsoft VPN SSTP installationen er blot del at den normale Microsoft RASS som ikke har ændret sig væsentligt de sidste 8 - 10 år, den er default med, der skal blot tilknyttes et certificat.

Der ligger flere fine guides rundt på nettet udover Microsoft egen dokumentation, et part stykker her med screenshots:
https://advancedhomeserver.com/windows-server-2012-sstp-vpn/

https://www.petenetlive.com/KB/Article/0000819

 

 

Mit setup

Wan Router Har kun 1 Public Ipaddresse, derfor er HAproxy i spil
Haproxy i TCP mode for at fordele port 443 trafik til interne services, herunder SSTP vpn.

Via lets Encrypt anskaffes en certificat for VPN.domain.navn og loades ind på Rproxy01.

Dette er en forholdvis simple opsætning, udover man man skal huske at SSTP vil blive termineret på RProxy01 og ikker på VPN01, set fra "klienterne af"

Derfor er det vigtigt at man ændre i VPN01 Registry, ellesr vil klienterne disconnecte efter 0 Sekunder, på grund at certificat hash ikke stemmer overens.

RProxy01 - HAProxy config:



acl host_vpn_sstp hdr(host) -i vpn.domain.name

use_backend bk_vpn_tcp if host_vpn_sstp

backend bk_vpn_tcp
server app01 VPN01-Ipaddresse:443 maxconn 1000 check ssl verify none
timeout server 4h
option srvtcpka

 

 I Registy på VPN01 skal følgene Registy Values ændres:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters]
"SHA256CertificateHash"=hex:c6,6e,b9,ea,b3,6b,E4,f7,58,9b,7a,ab,3e,a4,ac,vf,fb,\
bf,1e,a3,3d,ec,4f,e9,b7,eb,83,3c,03,24,46,79
"SHA1CertificateHash"=hex:27,2d,34,f6,27,cd,51,7f,5c,dc,60,2e,c2,12,2c,c3,fe,\
85,d5,40

Ændres oven stående 2 hash værdier ikke, til de Hash værdier som kommer fra certificatet installeres på RProxy01, vil man få følgende evnet i ens eventvwr, på klienterne.

CoId={ADDDC5BD-6045-4E02-8418-797F62932D20}:The SSTP-based VPN connection to the remote access server was terminated because of a security check failure. Security settings on the remote access server do not match settings on this computer. Contact the system administrator of the remote access server and relay the following information:

SHA1 Certificate Hash: 96335B0D851A406875650413AD2F9EDF82D12E40
SHA256 Certificate Hash: 3BB609AB523151ABA34A07096998A075412CBE0D7963FEB2E4749B387F0B837C

Årsagen er at kliente matcher Hash verdierne fra certificatet på Rproxy01 med de registry values som er på VPN01

Allignes disse 2 verdner, sådan at det er Hash fra Rproxy01 er lagt på VPN01 vil det virke uden fejl, eller vil man se klient maskinerne forbinde sig og derefter disconnect.

Allignes disse og man prøver at forbinde direkte VPN01 med SSTP uden om RProxy01 vil dette og fejle

 Ligenu arbejder jeg på et script som dynamisk overvåger Certificat Hash på Rproxy01 og ligger disse værdier inde i VPN01, Årsag er levetiden af Let encrypts certificater og at alt gerne skal køre automatisk.

Manuelt kan de 2 hashes hentes ud via openssl

openssl x509 -noout -fingerprint -sha256 -inform pem -in fullchain.pem

SHA256 Fingerprint=0F:A7:DB:37:2F:B4:6D:23:EE:66:E3:05:60:C7:F3:B3:03:B7:ED:D8:69:DC:31:19:F5:E3:C5:B2:F8:34:56:CF

openssl x509 -noout -fingerprint -sha1 -inform pem -in fullchain.pem

 SHA1 Fingerprint=FD:3B:F3:48:48:57:79:70:69:44:C5:06:7E:HF:64:63:78:03:1F:9F

 hefter der det forholdvis nemt at udskifte : til , og ligge det i en regfile som skal importes, dog skal det huskes hvorgang certificatet fornyes, eller døder sstp vpn