Implementazione di una VPN SSTP
Chiunque si trovi ad amministrare dei server, sia propri o dei propri clienti, usa sicuramente una VPN per collegarsi con la propria rete LAN. Fino a qualche tempo fa le uniche alternative di tunneling erano il PPTP o l’L2TP/IPSEC. Con l’uscita di Windows Server 2008 e Windows Vista SP1 è stato aggiunto un ulteriore protocollo di tunneling Secure Socket Tunneling Protocol (SSTP) che usa eslusivamente il protocollo HTTPS sulla porta TCP 443. Questo lo rende immune da tutti i problemi che ben conosciamo relativamente ai firewall, proxy, etc. che spesso bloccano gli altri protocolli.
Nel server SSTP deve avere un certificato computer con l’opzione Server Authentication o All-Purpose Enhanced Key Usage (EKU). Questo certificato è usato dal client SSTP per autenticare il server quando la sessione viene inizializzata. Per validare il certificato del server nel computer client deve essere installato il certificato della root authority (CA) che ha rilasciato il certificato del server.
Vediamo una tabella comparativa dei tre protocolli.
Attributes | PPTP | L2TP/IPSEC | SSTP |
Encapsulation | GRE | L2TP over UDP | SSTP over TCP |
Encryption | Microsoft Point-to-Point Encryption (MPPE) with RC4 | IPsec ESP with Triple Data Encryption Standard (3DES) or Advanced Encryption Standard (AES) | SSL with RC4 or AES |
Tunnel maintenance protocol | PPTP | L2TP | SSTP |
When user authentication occurs | Before encryption begins | After the IPsec session is established | After the SSL session is established |
Certificates required to establish the VPN tunnel | none | Computer certificates on both the VPN client and VPN server | Computer certificate on the VPN server and root CA certificate on the VPN client |
Quando un utente su un computer che esegue Windows Server 2008, Windows Server 2008 R2, Windows Vista SP1 o Windows 7 inizia una connessione VPN basata su SSTP i seguenti passaggi vengono eseguiti:
- The SSTP client establishes a TCP connection with the SSTP server between a dynamically-allocated TCP port on the client and TCP port 443 on the server.
- The SSTP client sends an SSL Client-Hello message, indicating that the client wants to create an SSL session with the SSTP server.
- The SSTP server sends its computer certificate to the SSTP client.
- The SSTP client validates the computer certificate, determines the encryption method for the SSL session, generates an SSL session key and then encrypts it with the public key of the SSTP server’s certificate.
- The SSTP client sends the encrypted form of the SSL session key to the SSTP server.
- The SSTP server decrypts the encrypted SSL session key with the private key of its computer certificate. All future communication between the SSTP client and the SSTP server is encrypted with the negotiated encryption method and SSL session key.
- The SSTP client sends an HTTP over SSL request message to the SSTP server.
- The SSTP client negotiates an SSTP tunnel with the SSTP server.
- The SSTP client negotiates a PPP connection with the SSTP server. This negotiation includes authenticating the user’s credentials with a PPP authentication method and configuring settings for IPv4 or IPv6 traffic.
- The SSTP client begins sending IPv4 or IPv6 traffic over the PPP link.
In questa guida cercherò di descrivere i passi fondamentali per creare una semplice struttura in grado di accettare connessioni VPN SSTP. Molte impostazioni saranno scelte per semplificare la guida e non devono assolutamente essere implementate in produzione.
L’ambiente utilizzato è un ambiente virtuale composto da 3 macchine:
- DC1 (Windows Server 2008 R2) – Domain Controller, Server DNS
- VPN1 (Windows Server 2008 R2) – Routing and Remote Access (2 eth), AD Certificate Services, IIS
- CLIENT1 (Windows 7 Business) – Client
La figura seguente illustra la configurazione dell’ambiente:
Configurazione di DC1
Il server DC1 va configurato come Domain Controller e Server DNS, i passi da seguire sono:
- Rinominare il server in DC1
- Assegnare all’interfaccia di rete l’indirizzo IP 192.168.0.1, subnet mask 255.255.255.0, gateway 192.168.0.2, server DNS 192.168.0.1
- Aggiungere il ruolo Active Directory Domain Services
- Creare un nuovo dominio in una nuova foresta tramite il comando DCPROMO e chiamarlo CONTOSO.COM
- Impostare il livello di funzionalità del dominio e della foresta ad almeno Windows Server 2003
- Installare il server DNS
- Creare l’utente user1 con password P@ssw0rd e assegniamo l’accesso dial-in tramite la console Active Directory Users and Computers, tasto destro sull’utente, Dial-in tab, in Network Access Permission cliccare su Allow access.
Nota: In uno scenario reale è preferibile gestire i permessi di accesso tramite Network Policy Server (NPS).
Configurazione di VPN1
Questo server ha due schede di rete, una Privata e una Pubblica e svolgerà i ruoli di server RRAS, Active Directory Certificate Services, Certification Authority Web Enrollment, Web Server (IIS). I passi da seguire sono:
- Rinominare il server in VPN1
- Rinominare l’interfaccia interna in Private e l’interfaccia esterna in Public
- Assegnare all’interfaccia Private l’IP 192.168.0.2, subnet mask 255.255.255.0, server dns 192.168.0.1
- Assegnare all’interfaccia Public l’IP 131.107.0.2 e subnet mask 255.255.0.0
- Verificare che il server DC1 sia raggiungibile tramite il comando ping DC1
- Unire il computer al dominio contoso.com
- Installare il ruolo Active Directory Certificate Services con il servizio Certification Authority Web Enrollment, scegliere una CA standalone e poi Root CA, creare una chiave private e proseguire con le impostazioni di default. Il nome della CA dovrebbe essere contoso-VPN1-CA
- Impostare il security level di Internet Explorer per la zona Local Intranet a Low
Nota: In uno scenario reale si dovrebbe modificare l’impostazione individuale realtiva ai controlli ActiveX.
- Richiedere un nuovo certificato del tipo Server Authentication tramite Internet Explorer andando all’indirizzo http://localhost/certsrv scegliere Request a certificate, e poi advanced certificate request e infine Create and submit a request to this CA, cliccare si per permettere il controllo ActiveX e compilare il form con i seguenti valori:
- Name: vpn1.contoso.com
- Country/Region: IT
- Type of Certificate Needed: Server Authentication Certificate
- Mark keys as exportable: Yes
- Cliccare su Submit
- Aprire la console Certification Authority
- Scegliere il tab Extensions nelle proprietà del server contoso-VPN1-CA e cancellare la riga http://<ServerDNSName>/CertEnroll/<CaName><CRLNameSuffix><DeltaCRLAllowed>.crl
- Inserire la riga http://vpn1.contoso.com/CertEnroll/<CaName><CRLNameSuffix><DeltaCRLAllowed>.crl e spuntare le voci Include in CRLs. Clients use this to find Delta CRL locations e Include in the CDP extension of issue certificates
- Rilasciare il certificato richiesto andando in Pending Requests e scegliere Issue sulla richiesta presente.
- Tornare all’indirizzo http://localhost/certsrv e cliccare su View the status of a pending certificate request e poi su Server Authentication Certificate (mercoledì 27 aprile 2011 00:06:22), consentire l’ActiveX e installare il certificato cliccando su Install the certificate. Il certificato sarò così installato nel datastore dell’utente, dobbiamo spostarlo nel datastore computer.
- Aprire la console MMC e aggiungere due volte lo snap-in Certificates, una volta per gestire i certificati dell’account utente e una volta per l’account computer locale
- Andare in Console Root\Certificates – Current User\Personal\Certificates, cliccare sul certificato vpn1.contoso.com e scegliere Export, scegliere Yes, export the private key, scegliere una password e salvare il file sul desktop con il nome vpn1cert.pfx
- Cancellare il certificato appena esportato
- Andare in Console Root\Certificates (Local Computer)\Personal\Certificates, cliccare su Certificates e scegliere Import, selezionare il file salvato in precedenza, inserire la password e proseguire con le impostazioni di default
Nota: La presenza del certificato contoso-VPN-CA1 di tipo all purposes può causare problemi, conviene quindi eliminarlo
- Installare il ruolo Network Policy and Access Services e scegliere il servizio Routing and Remote Access Services
- Aprire la console di gestione del Routing and Remote Access e cliccare con il tasto destro sul nome del server VPN1 e scegliere Configure and Enable Routing and Remote Access, scegliere Remote access (dial-up or VPN) e successivamente spuntare la casella VPN, selezionare l’interfaccia Public e togliere la spunta su Enable security on the selected interface by setting up static packet filters.
Nota: In uno scenario reale si dovrebbe lasciare questa opzione abilitata. - Non avendo in questo lab un server DHCP scegliamo From a specified range of address nel successivo passo e impostiamo il range 192.168.0.200-192.168.0.210 e nella richiesta successiva lasciamo l’opzione di default per non usare un server RADIUS per l’autenticazione.
- Nella finestra successiva di informazione circa la necessità di configurare le proprietà del DHCP Agent clicchiamo su Ok.
Configurazione di CLIENT1
L’interfaccia di rete del CLIENT1 andrà collegata allo stesso switch virtuale dell’interfaccia pubblica di VPN1 e i successivi passi da seguire sono:
- Rinominare il client in CLIENT1
- Assegnare all’interfaccia di rete l’indirizzo IP 131.107.0.3, subnet mask 255.255.0.0
- Non avendo un server DNS nella parte pubblica del lab creiamo un record nel file hosts del client per risolvere il server vpn1.contoso.com. Apriamo il Notepad con i privilegi elevati e carichiamo il file %windir%\system32\drivers\etc\hosts e inseriamo alla fine la riga seguente:
131.107.0.2 vpn1.contoso.com
in modo da risolvere il FQDN vpn1.contoso.com con 131.107.0.2 che è l’ip assegnato all’interfaccia pubblica di VPN1.
- Possiamo testare la connessione con il server VPN1 eseguendo un ping vpn1.contoso.com
- Nel caso il ping fallisca modifichiamo le impostazioni del Firewall sul server VPN1 per accettare le richieste di ping sull’interfaccia Public
Configurazione connessione VPN PPTP
Testiamo ora una connessione VPN PPTP per verificare che tutto sia configurato correttamente. Dal CLIENT1 creare una nuova connessione di rete del tipo Connect to a workplace
scegliamo Use my Internet connection (VPN) e successivamente I’ll set up an Internet connection later, come indirizzo inseriamo vpn1.contoso.com e come utente e password quelli creati in AD, utente user1 e password P@ssw0rd.
Terminata la configurazione della connessione possiamo farla partire cliccando sull’icona nell’elenco delle connessioni VPN:
e una volta stabilito il collegamento possiamo verificare la configurazione di rete tramite il comando ipconfig:
come si può vedere ci è stato assegnato l’indirizzo 192.168.0.203. Andando a visualizzare lo stato della connessione VPN ci accorgiamo che stiamo utilizzando il PPTP:
A questo punto possiamo disconnetterci e nel server VPN1 configurare il firewall per bloccare il protocollo GRE così da bloccare i tunnel PPTP:
dopodichè se proviamo a connetterci in VPN dovremmo ottenere un errore e la connessione non sarà instaurata.
Configurazione connessione VPN SSTP
Un client VPN per usare una connessione STP deve aver installto il certificato della root CA che ha rilasciato il certificato usato dal server. Durante il fase di autenticazione SSL il client verifica il certificato del server.
Per ottenere il certificato della root CA basta andare all’indirizzo http://vpn1.contoso.com/certsrv cliccare su Download a CA certificate, Certificate Chain, or CRL e poi su Download CA certificate.
Nella finestra che si apre scegliamo Open
e nelle proprietà del certifichiamo clicchiamo su Install Certificate… per installarlo scegliendo tutte le impostazioni di default
Il certificato sarà installato nel datastore dell’utente, dobbiamo ora spostarlo in quello relativo al computer per poterlo usare per la connessione VPN. Per far questo apriamo una console MMC e inseriamo due volte lo snap-in Certificates, una volta per l’account utente e una volta per il computer locale.
Apriamo il percorso Console Root\Certificates – Current User\Intermediate Certification Authorities\Certificates e dovremmo vedere il certificato rilasciato a contoso-VPN1-CA, tramite un’operazione di Cut&Paste andiamo ad spostarlo nel percorso Console Root\Certificates (Local Computer)\Trusted Root Certification Authorities\Certificates
Visualizziamo ora le proprietà della connessione VPN e nel tab Security impostiamo il tipo VPN a Secure Socket Tunneling Protocol (SSTP):
dopodichè possiamo far partire la connessione. Se tutto è andato a buon fine la connessione VPN dovrebbe instaurarsi correttamente e nelle proprietà della connessione possiamo vedere il tipo SSTP:
Il tutto sfruttando esclusivamente la porta TCP 443 (HTTPS)
Link
- VPN Tunneling Protocols – http://technet.microsoft.com/en-us/library/dd469817(WS.10).aspx
- The Secure Socket Tunneling Protocol – http://technet.microsoft.com/en-us/magazine/2007.06.cableguy.aspx
- SSTP Remote Access Step-by-Step Guide: Deployment – http://technet.microsoft.com/en-us/library/cc731352(WS.10).aspx
- How to troubleshoot Secure Socket Tunneling Protocol (SSTP) based connection failures when client fails to connect to SSTP VPN server giving error message 0x80092013 – http://support.microsoft.com/kb/961880
Ottima spiegazione, solo una domanda: se non ho IP pubblico funziona ugualmente con l’IP temporaneo? Sulla scheda configurata per la WAN non serve inserire il gateway?
Grazie.
Per IP temporaneo intendi un IP dinamico? Se si non ci dovrebbero essere problemi.
Si esatto, intendevo l’Ip dinamico, grazie.