Oppsett av SSL VPN Road Warrior-tilgang
Road Warriors er eksterne brukere som trenger sikker tilgang til firmaets infrastruktur. OPNsense bruker OpenVPN som basis for dette SSL VPN Road Warrior-oppsettet og implementerer også OTP (One-Time Password) basert på standardtokens og Google Authenticator.
Denne artikkelen viser hvordan man setter opp OPNsense SSL VPN med konfigurasjonseksempler for:
- To-faktor-autentisering (2FA)
- Multifaktor-autentisering (Klientsertifikat + passord + OTP)
- Klientoppsett på Windows, MacOS, iOS og Android
NB
For dette eksempelet vil vi bruke private IP-adresser for WAN-forbindelsen. Dette krever at vi deaktiverer standard blokkeringsregel på WAN til å tillate privat nettverkstrafikk. For å gjøre dette, gå til og fjern avkryssingen for “Block private networks”. Husk å lagre og trykke Apply for å aktivere endringene.
Eksempeloppsett
For dette eksempelet setter vi opp OPNsense slik:
Firmanettverk med ekstern klient
Firmanettverk
Hostname | fw1 |
WAN IP | 172.18.0.129 |
LAN IP | 192.168.1.1/24 |
LAN DHCP Range | 192.168.1.100-192.168.1.200 |
SSL VPN Clients | 10.10.0.0/24 |
Steg 0 - Forberedelser
Vi vil benytte tofaktor-autentisering (2FA) og multifaktor-autentisering (MFA). Så, før vi starter på SSL VPN-oppsettet må vi sette opp en TOTP-server og en gyldig signeringsautoritet for sertifikater.
For helhetens del setter vi også opp en bruker.
Sett opp TOTP-server
For å sette opp en Time-based One Time Password (TOTP)-server, gå til
Add i øvre høyre hjørnet av skjemaet.Tips:
Du kan også bruke hurtigsøkefunksjonen for å gå direkte til Access Server-oppsettet. Prøv selv ved å skrive A…:
First endre Type til Local + Timebased One time Password
Skriv inn Descriptive name, f.eks. TOTP VPN Access Server
For denne artikkelen lar vi alt annet være som det er, siden vi skal bruke Google Authenticator og standardinnstillingene er riktige for dette formålet.
Hvis man bruker andre tokens, kan det være nødvendig å endre Token length.
Klikk Save for å legge til den nye serveren.
Opprett et serversertifikat
Etter å ha opprettet CA trenger vi også et sertifikat. For å opprette et sertifikat, gå til
og klikk Add i øvre høyre hjørne.Fyll inn skjemaet med følgende (la resten være som de er):
Method | Create an internal Certificate |
Descriptive name | SSLVPN Server Certificate |
Certificate authority | SSL VPN CA |
Type | Server Certificate |
Key length (bits) | 4096 |
Digest Algorithm | SHA512 |
Lifetime (days) | 365 |
Country Code | NL |
State or Province | ZH |
City | Middelharnis |
Organization | OPNsense |
Email Address | spam@opnsense.org |
Common Name | SSLVPN Server Certificate |
Klikk Save for å lagre sertifikatet.
Legg til bruker
For å legge til en ny bruker, gå til
og klikk Add i øvre høyre hjørne.Opprettingen av bruker vil skje i to steg. Første steg er å opprette en bruker med brukernavn, passord, TOTP seed og et brukersertifikat. Andre steg (etter lagring) er å aktivere den genererte OTP seeden med en Google Authenticator-kompatibel app.
For første steg legger vi inn følgende:
Username | Donald |
Password (2x) | S3cr3tP@ssw0rd |
Full name | Donald Duck |
Certificate | Check “Click to create a user certificate” |
OTP seed | Check “Generate new secret” |
Klikk Save, og du blir videresendt for å opprette User Certificate. Fyll inn sertifikatskjermaet med følgende informasjon (la alt som ikke er nevnt under være som det er):
Method | Create an internal Certificate |
Descriptive Name | Leave default (Donald) |
Certificate authority | SSL VPN CA |
Type | Client Certificate |
Key length | 4096 |
Digest Algorithm | SHA512 |
Klikk Save, og du blir vidersendt brukersiden. Nå skal vi aktivere den nyopprettede OTP Seed med Google Auth-appen. For å gjøre dette, klikk på Click to unhide-knappen i OTP QR code-raden, og du får en QR-kode du kan scanne med telefonen. Se også: Configure 2FA TOTP & Google Authenticator
Notat
Pass på å bruke samme Certificate authority som CA-en vi opprettet tidligere, da dette linker klientene/brukerne til riktig OpenVPN-server.
Steg 1 - Legg til SSL-server
Å legge til en SSL VPN-server er relativt enkelt. Vi starter med å legge til en som bruker tofaktor-autentiseringen vi har satt opp. Dette oppsettet tilbyr god beskyttelse og er lett å sette opp på klientene, da hver klient kan bruke samme oppsett.
Gå til
og klikk Add i øvre høyre hjørnet.I dette eksempelet bruker vi følgende innstillinger:
Notat
Innstillingen Hardware Crypto er ikke brukt i nyere systemer utstyrt med AES-NI. Når aesni-modulen er lastet inn blir den brukt automatisk.
Description | My SSL VPN Server |
Server Mode | Remote Access (User Auth) |
Backend for authentication | TOTP VPN Access Server |
Protocol | UDP |
Device Mode | tun |
Interface | WAN |
Local port | 1194 |
TLS Authentication | Leave both on enabled (checked) |
Peer Certificate Revocation List | N/A |
Server Certificate | SSLVPN Server Certificate (CA: SSL VPN CA) |
DH Parameters Length | 4096 bit |
Encryption algorithm | AES-256-CBC (256-bit key, 128-bit block) |
Auth Digest Algorithm | SHA512 (512-bit) |
Hardware Crypto | No Hardware Crypto Acceleration |
Certificate Depth | One (Client+Server) |
IPv4 Tunnel Network | 10.10.0.0/24 |
IPv6 Tunnel Network | Leave Empty |
Redirect Gateway | Leave Unchecked |
IPv4 Local Network/s | 192.168.1.0/24 |
IPv6 Local Network/s | Leave Empty |
IPv4 Remote Network/s | Leave Empty |
IPv6 Remote Network/s | Leave Empty |
Concurrent connections | Leave Empty |
Compression | Enabled with Adaptive Compression |
Type-of-Service | Leave Unchecked |
Duplicate Connections | Leave Unchecked |
Disable IPv6 | Checked |
Dynamic IP | Leave Unchecked |
Address Pool | Leave Checked |
Topology | Leave Unchecked |
DNS Default Domain | Leave Unchecked |
DNS Servers | Leave Unchecked |
Force DNS cache update | Leave Unchecked |
NTP Servers | Leave Unchecked |
NetBIOS Options | Leave Unchecked |
Client Management Port | Leave Unchecked |
Renegotiate time | 0 |
Notat
Renegotiate time brukes til å reforhandle datakanalnøkkelen etter n sekunder (standard er 3600). Når man bruker OTP, vær oppmerksom på at forbindelsen vil automatisk droppes fordi passordet ikke lenger er gyldig. Sett til 0 for å deaktivere, og husk å endre på klienten når vi endrer oppsettet senere.
Klikk Save for å legge til den nye serveren.
Tips
Bruk Strict User/CN Matching for å fremtvinge bruk av samme brukernavn som i angitt i CN-feltet i sertifikatet. Dette gjør at brukere ikke kan logge inn med andre brukernavn enn hva sertifikatet de har fått installert, angir (f.eks. fred kan ikke logge inn som root).
Tips
Alternativet Enforce local group kan brukes for å videre innskrenke tilgangen til kun brukere i spesifikke grupper.
Steg 2 - Brannmurregler
For å tillate SSL VPN-klienttilkoblinger må vi tillate tilgang til OpenVPN serverporten på WAN-grensesnittet. Hvis vi setter opp flere servere må vi åpne portene for hver serverinstans.
For vårt eksempel bruker vi bare én server, og den er tilgjengelig på UDP port 1194.
Neste steg er å også tillate trafikk fra VPN-klientene inn på LAN-grensesnittet. For dette eksempelet tillater vi klientene tilgang til alle ressurser på LAN-nettet. Dette er hvor man ville spesifisert tilgang til spesifikke tjenester internt.
Steg 3 - Eksporter klientkonfigurasjon
Ved å bruke Remote Access Server-dropdownlisten kan man velge hvilken server man ønsker å laste ned klientkonfigurasjonsfiler for. Hvis det er flere sertifikater tilknyttet samme server (med samme CA) vil den gi en liste over alle tilgjengelige klientsertifikater og tilhørende brukere.
macOS & Windows
For macOS & Windows-brukere kan man bruke Viscosity fra Sparklabs (https://www.sparklabs.com/viscosity/). Viscosity er enkel å sette opp og fungerer bra på begge plattformer.
Gå til
og velg VPN-serveren fra listen. La alle alternativer være som de er og last ned Viscosity-type fra listen over eksportmuligheter under Export type.På Mac- eller Windows-maskinen kan man nå pakke opp filen og importere Viscosity.visc-filen. Det burde være nok å dobbeltklikke filen for å importere profilen. Når du blir bedt om å velge en applikasjon for å åpne filen, velg Viscosity.
Eksempelskjermbilder (macOS):
Importer konfigurasjon
Tilkobling og innlogging
I passordfeltet skriver du først inn TOTP-token fra Google Auth-appen, direkte etterfulgt av passordet ditt.
Tilkoblet
Android
For Android-brukere anbefales OpenVPN for Android (https://play.google.com/store/apps/details?id=de.blinkt.openvpn) laget av Arne Schwabe.
Gå til
og velg VPN-serveren fra listen. La alle alternativer være som de er og velg File only-konfigurasjonen fra listen over mulige eksportvalg under Export type.Importer hostname-udp-1194-android-config.ovpn-filen til OpenVPN for Android.
Tilkobling skjer på samme måte som for Mac/Windows, skriv inn brukernavn og i passordfeltet, angi TOTP-token først, direkte etterfulgt av passordet.
iOS
For iOS users we recommend using OpenVPN Connect (https://itunes.apple.com/us/app/openvpn-connect/id590379981) from OpenVPN Technologies.
Gå til
og velg VPN-serveren fra listen. La alle alternativer være som de er og velg File only-konfigurasjonen fra listen over mulige eksportvalg under Export type.Importer hostname-udp-1194-android-config.ovpn-filen til OpenVPN Connect. Tilkobling skjer på samme måte som for Mac/Windows, skriv inn brukernavn og i passordfeltet, angi TOTP-token først, direkte etterfulgt av passordet.
Steg 4 - Multifaktor-autentisering
For tofaktor-autentisering trenger man de to faktorene brukernavn/passord og et token. OPNsense støtter en tredje faktor, nemlig brukersertifikat. Dette betyr at hver enkelt bruker vil være unikt identifisert av brukersertifikatet deres. I dette tilfelle er de tre faktorene
- Brukersertifikat
- Brukernavn/passord
- Token (TOTP)
Gå til
og klikk på blyant-ikonet ved siden av serveren vi opprettet, for å endre fra 2FA til multifaktor-autentisering.Endre Server Mode til Remote Access (SSL/TLS + User Auth) og la alt annet være uendret. Klikk Save nederst på siden.
Når du nå går til klient-eksport vil du se at hver bruker er listet separat. I tilfellet under ser vi kun Donald. Eksportering og importering av konfigurasjonen er identisk som tidligere, den eneste forskjellen er at hver bruker trenger sitt eget sertifikat og dermed hver sin konfigurasjonsfil.