DUO MFA voor SSTP VPN

Eerder hebben we de inrichting van een SSTP VPN oplossing via de Routing & Remote Access Service besproken. In deze tijd van ransomware aanvallen, social engineering etc is een extra beveiliging daarop een pré.

In deze handleiding staat beschreven hoe je een bestaande SSTP VPN via RRAS kunt aanpassen en voorzien van een multifactor beveiliging via de DUO Mobile app. In dit voorbeeld staat dit alles geinstalleerd op één en dezelfde server, een domain controller voorzien van de routing and remote access rol met intern ip-adres 192.168.22.2.

Volg dit artikel voor een basis installatie van SSTP VPN binnen RRAS. Daarop installeren we tevens de DUO authentication proxy die babbelt met het back-end van DUO Security.

Maak een “klant” aan op duosecurity.com en kies daarna ervoor om de RRAS applicatie te beschermen. Ga daarvoor naar Applications > Protect an Aplication, kies je voor Microsoft RRAS.

Daar krijg je een api-host van DUO, een ikey en een skey waarde welke je later nodig hebt in de configuratie van je duoauthproxy.

Maak een account aan waarmee DUO als service kan draaien, maar ook kan verbinden met Active Directory. Verzin ook alvast een radius secret, deze heb je nodig in je authproxy.cfg file. Vervolgens download en installeer je de DUOauthproxy, hetgeen gewoon “basic” is. De laatste versie van de DUO Authentication Proxy, download je hier.

Hieronder staat mijn minimalistische config file. Daarbij is het genoemde ip-adres 192.168.22.2 zoals eerder gemeld het ip-adres van mijn domain controller. Dit vind je samen met een AD-account onder het kopje [ad_client]. In eerste instantie zetten we de wachtwoorden even plaintext weg. Na het succesvol testen encrypten we deze middels een mee-geinstalleerde tool van DUO. Ook geen je het de notatie van je interne domein op bij search_dn=



Onder [radius_server_auto] zet je de keys en api-host die je bij het aanmaken van de applicatie beveiliging in het portal hebt gekregen. Bij radius_ip geef je het loopback adres op en een secret die je straks binnen RRAS ook moet opgeven. De port staat standaard op 1812, maar om zeker geen hinder te ondervinden van een Microsoft NPS server kiezen we ervoor om deze op 18120 te zetten. Ook dit kom je straks in het onderdeel RRAS weer tegen.

[main]
debug=true

[ad_client]
host=192.168.22.2
service_account_username=duo
service_account_password=s0m3pass\v/0rd
search_dn=DC=steijvers,DC=local

[radius_server_auto]
ikey=ikey_uit_duo_portal_bij_protect_application
skey=skey_uit_duo_portal_bij_protect_application
api_host=api-hostname_uit_duoportal.duosecurity.com
radius_ip_1=127.0.0.1
radius_secret_1=je_radius_secret
client=ad_client
port=18120
failmode=secure


[cloud]
ikey=ikey_uit_duo_portal_bij_dirsync
skey=skey_uit_duo_portal_bij_dirsync
api_host=api-hostname_uit_duoportal.duosecurity.com

Herstart de DUO service nadat je de authproxy.cfg file hebt gewijzigd. Test daarna je config met het test programma genaamd authproxy_connectivity_tool.exe. Deze vind je in “C:\Program Files\Duo Security Authentication Proxy\bin”

Nu je weet dat dit werkt, kun je de gebruikte wachtwoorden nog encrypten. Daarvoor gebruik je authproxy_passwd.exe in “C:\Program Files\Duo Security Authentication Proxy\bin”.

Let op, je dient dan wel je configuratie te wijzen door enkele labels te hernoemen. Indien je het radius wachtwoord versleuteld, pas je “radius_secret_1=” aan naar “radius_secret_protected_1=”. Versleutel je het wachtwoord van het service account, pas dan “service_account_password” naar “service_account_password_protected”.

[main]
debug=true

[ad_client]
host=192.168.22.2
service_account_username=duo
service_account_password_protected=2B4B6250655368566D597133743677397A..........
search_dn=DC=steijvers,DC=local

[radius_server_auto]
ikey=ikey_uit_duo_portal_bij_protect_application
skey=skey_uit_duo_portal_bij_protect_application
api_host=api-hostname_uit_duoportal.duosecurity.com
radius_ip_1=127.0.0.1
radius_secret_protected_1=244326462948404D635166546A576E5A7234753778214.......
client=ad_client
port=18120
failmode=secure


[cloud]
ikey=ikey_uit_duo_portal_bij_dirsync
skey=skey_uit_duo_portal_bij_dirsync
api_host=api-hostname_uit_duoportal.duosecurity.com

Herstart na de wijziging de DUO service en test nogmaals je config middels de authproxy_connectivity_tool.exe.

Als het bovenstaande allemaal succesvol is verlopen, kunnen we aan de slag binnen Routing and Remote Access. Pas de authentication provider aan van Windows Authentication naar Radius Authentication. Klik vervolgens op configure:



Geef als radius server 127.0.0.1 op en neem niet de standaard poort (1812) maar zet er bijvoorbeeld een 0 achter zoals ook in de bovenstaande config van DUOauthproxy (port=18120).

Klik ook op de knop Change bij Shared Secret en geef de shared secret op, die ook in je DUOauthproxy hebt staan. Pak hier de unencrypted shared secret 😉

Teruggekomen op het tabblad security pas je ook de Authentication Methods aan. DUO ondersteunt enkel PAP. Dat druist misschien tegen je principes in, maar data wordt via de SSTP verbinding alsnog versleuteld verstuurd. Meer daarover lees je hier.

Ook al heb je geen NPS rol geïnstalleerd, kan er toch een NPS Policy dwars zitten. Door binnen RRAS met rechts te klikken op Remote Access Logging kun je kiezen voor Launch NPS (nps.msc) om de policies te controleren.

Controleer dat de gebruikers binnen active directory een “allow access” hebben op het Dial-in tabblad van hun account properties.

Ter verificatie van je instellingen, heb je de beschikking over een test programma genaamd authproxy_connectivity_tool.exe. Ook deze vind je in “C:\Program Files\Duo Security Authentication Proxy\bin”

Hiermee heb je multifactor werkend.

Vergeet niet om op de clients eveneens het protocol op PAP te zetten…

Om deze verbinding toe te voegen via Powershell:

Add-VpnConnection -Name "mijnSSTPvpn" -ServerAddress "mijn.domein.ext" -TunnelType "Sstp" -AuthenticationMethod PAP -UseWinlogonCredential -AllUserConnection -PassThru -SplitTunneling  

De onderstaande links kun je doorgeven aan de users voor de app installatie op hun smartphones.
DUO Mobile Andriod
DUO Mobile IOS



Let op! Standaard staat DUO geen tekens als é, ę, ç en § toe. Deze tekens behoren niet toe aan de UTF-8 categorie.

Wanneer je een gebruiker hebt die non-UTF-8 karakters in zijn wachtwoord heeft, zul je het volgende zien in je authproxy.log:

Cannot decode password using the configured radius_secret. Please ensure the client and Authentication Proxy use the same shared secret.

Mogelijk denk je meteen aan een verkeerde versleuteling van je radius secret. Als andere gebruikers echter zonder problemen kunnen aanmelden, weet je dat de oorzaak iets anders is.

De oplossing is dan om het volgende toe te voegen ergens onder het kopje [radius_server_auto] in de authproxy.cfg

pw_codec='latin-1'

Dan wordt je authproxy.conf dus als volgt:

[main]
debug=true

[ad_client]
host=192.168.22.2
service_account_username=duo
service_account_password_protected=2B4B6250655368566D597133743677397A..........
search_dn=DC=steijvers,DC=local

[radius_server_auto]
ikey=ikey_uit_duo_portal_bij_protect_application
skey=skey_uit_duo_portal_bij_protect_application
api_host=api-hostname_uit_duoportal.duosecurity.com
radius_ip_1=127.0.0.1
radius_secret_protected_1=244326462948404D635166546A576E5A7234753778214.......
client=ad_client
port=18120
pw_codec='latin-1'
failmode=secure


[cloud]
ikey=ikey_uit_duo_portal_bij_dirsync
skey=skey_uit_duo_portal_bij_dirsync
api_host=api-hostname_uit_duoportal.duosecurity.com

Herstart je DUO service om deze laatste wijziging actief te maken.

Dit artikel is in samenwerking met Rooie Dokus opgesteld. Mocht je in een hybride omgeving met de userprincipalname gaan aanmelden op SSTP vpn (via RRAS) in combinatie met DUO MFA, kijk dan ook naar dit artikel.