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

 

TLS 1.2 giver til tider udfordringer, dvs. disablingen af TLS 1.0 er den realle udfordring.

Her er lidt af det jeg har gravet frem over de sidste par uger.

Powershell

 

# EITHER: Enable all current TLS variants:

[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,Tls11,Tls12'

# OR: Enforce TLS 1.2 only and also check Certificate Revocation Lists (CRLs):

[System.Net.ServicePointManager]::SecurityProtocol = 'Tls12'

[System.Net.ServicePointManager]::CheckCertificateRevocationList  = $true  

 

Url: http://davestechnology.blogspot.dk/2017/07/2012-r2-support-tls-12-but-defaults-to.html

 

WinHttp



HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp

DefaultSecureProtocols Protocol enabled
0x00000008 Enable SSL 2.0 by default
0x00000020 Enable SSL 3.0 by default
0x00000080 Enable TLS 1.0 by default
0x00000200 Enable TLS 1.1 by default
0x00000800 Enable TLS 1.2 by default

url: https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-a-default-secure-protocols-in

 

Prioritering af cipher suites
URL: https://msdn.microsoft.com/en-us/library/windows/desktop/mt767780(v=vs.85).aspx samt https://msdn.microsoft.com/en-us/library/windows/desktop/aa374757(v=vs.85).aspx

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002
https://blogs.technet.microsoft.com/askds/2015/12/08/speaking-in-ciphers-and-other-enigmatic-tonguesupdate/ 

Dagens lektion.

En SSD disk som tidligere har været brugt i en server 2012 R2 storage pool - ses IKKE af server 2012R2 installeren, faktisk kan denne slet ikke køre, da disken gøre installeren forvirret.

Det sjove var at en alm. sata harddisk som havde været brug sammen med ssd'en i en storage pool uden problemer godt kunne ses af installeren. ( dette er set på desktop hardware, dvs. sandsynligvis vil man aldrig opleve dette i et rigtigt server miljø.

Løsning var at boote på alternativ medie Linux PXE og fjerne rest partitionerne på SSD'en.

Windows 10 har været releaset i mere end en måned nu, dog er der lidt udfordringer for mindre virksomhedder da microsoft gratis managment værktøjer endnu ikke er released i en version som har fuld understøttelse af windows 10, herunder vises en windows 10 pc, på en server 2012R2 eller server 2008R2 Wsus installation som windows vista :-(

server 2012R2 wsus udfordrnger

En omgåelse af dette, kan man læse på nette kunne være at hacke sin wsus database, med fare for at den springer i luften når microsoft kommer med officielt understøttelse af windows 10 på server 2012R2 / server 2008R2 wsus, til gængæld kan man faktisk  installer en server 2016 Release candidate 3, her understøtter wsus nemlig Windows 10 :-)
Server 2016 Preview 3 er naturligvis ikke en 100% stabil version endnu, men det er en bedre løsning end hacke wsus database, imo.

server 2016 preview3 wsus windows 10 understøttelse

Andre værktøjer som savnes er forsat den fulde nye version af MDT,  microsoft released i foråeret en "preview opdatering af MDT for windows 10 understøttelse" denne kan man naturligvis vælge at bruge, men den rigtige næste version afventer med stor sandsynlighed server 2016 går live.

UPDATE
06.11.2015  -  Der er kommet en MDT 2013 Update 1 omkring den 15/9/2015  som giver MDT understøttelse af windows 10 

Konsolidering, en KVM host over på en Hyper-v host er forholdvis nemt.

Ideen tager herfra http://blogs.technet.com/b/enterprise_admin/archive/2010/05/13/linux-p2v-with-dd-and-vhdtool-easy-and-cheap.aspx

Mit lap forgåer det mellem en Debian KVM server og en 2012R2 Hyper-V server.

Forudsætninger.
KVM imaged er i RAW format, er man i tvivl om ens IMG format, kan man altid køre qemu-img info imagefile.img

#qemu-img info SMS.img
image: SMS.img
file format: raw
virtual size: 12.0G (12884901888 bytes)
disk size: 12.0G

få imagefilen over på en "Windows dåse" hvor vhdtool er tilrådighed.

C:\Download>VhdTool.exe /convert c:\tmp\SMS.img
        Status: Converting "c:\tmp\SMS.img" to a fixed format VHD.
        Status: Attempting to open file "c:\tmp\SMS.img"
        Status: File opened, current size is 12884901888
        Status: VHD footer generated
        Status: VHD footer written to file.
        Status: Complete

Ovenstående commando tager ikke mange minutter at køre.
Nu kan .img filen blot renames fra .img og til .vhd for at hyper-v kan bruge den.

Ønsker man at .vhd skal blive til en vhdx file, dynamisk osv. skal man i gang med powershell og convert-vhd commandlet.
F.eks.
PS C:\> Convert-VHD –Path c:\tmp\SMS.vhd –DestinationPath c:\tmp\SMS.vhdx

Alternativ er at gøre det via hyper-v gui, som beskrevet her:
http://blogs.technet.com/b/aviraj/archive/2012/05/06/windows-server-2012-convert-vhd-to-vhdx-using-hyper-v-manager.aspx


Hermed er jeg ved at være klar til at spare de ca. 50 Watt som min debian kvm host trækker.