StrongSwan: Diferenzas entre revisións

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura
 
(Non se amosan 42 revisións do historial feitas polo mesmo usuario.)
Liña 1: Liña 1:
[[Category:Bulletins]]<teaser>Creación dun Servidor VPN con StrongSwan e acceso dende Clientes Linux/Windows</teaser>
==Creación dunha VPN con StrongsWan==
==Creación dunha VPN con StrongsWan==
StrongSwan é unha implementación de VPN basada en IPSEC incluída nos repositorios oficiais Debian, que ofrece múltiples características, entre elas o traspaso de NAT mediante encapsulación UDP e o uso de IKEv2 para a autenticación, soportada en Windows 7 e Android. Podes consultar as características completas na [[http://www.strongswan.org/ páxina de StrongSwan]].
StrongSwan é unha implementación de VPN basada en IPSEC incluída nos repositorios oficiais Debian, que ofrece múltiples características, entre elas o traspaso de NAT mediante encapsulación UDP e o uso de IKEv2 para a autenticación, soportada en Windows 7 e Android. Podes consultar as características completas na [[http://www.strongswan.org/ páxina de StrongSwan]].
Liña 18: Liña 17:
openssl req -newkey rsa:2048 -keyout vpn.iesrodeira.com.key -out vpn.iesrodeira.com.csr
openssl req -newkey rsa:2048 -keyout vpn.iesrodeira.com.key -out vpn.iesrodeira.com.csr
</source>
</source>
:d) Enviaremos a solicitude de certificado (''vpn.iesrodeira.com.csr'') a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, '''''vpn.iesrodeira.com.crt''''', e o certificado da autoridade de certificación '''''rodeiraCA.crt'''''. Mediante o comando:
:d) Enviaremos a solicitude de certificado (''vpn.iesrodeira.com.csr'') a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, '''''vpn.iesrodeira.com.crt''''', e o certificado da autoridade de certificación '''''rodeiraCA.crt'''''. A firma a realizará a autoridade de certificación, previa comprobación dos datos da solicitude mediante o comando:
<source lang='text'>
<source lang='text'>
openssl x509 -in winvirtual.iesrodeira.com.crt -noout -text
openssl ca -config ../../openssl.cnf -in vpn.iesrodeira.com.csr -out vpn.iesrodeira.com.crt
</source>
No cliente, mediante:
<source lang='text'>
openssl x509 -in vpn.iesrodeira.com.crt -noout -text
</source>
</source>
:poderemos comprobar si o certificado incorpora as extensións indicadas.
:poderemos comprobar si o certificado incorpora as extensións indicadas.
Liña 46: Liña 49:
auto=add
auto=add
</source>
</source>

'''left''' representa o extremo local. ''left=%any'' indica que a IP do extremo local será calqueira lado polo que chegue a conexión, ''leftsubnet'' será a rede á que se conectarán os clientes e ''leftcert'' indicará o certificado de servidor a utilizar. '''right''' serán os extremos remotos. ''right=%any'' indica que calqueira IP poderá actuar como cliente, ''rightdns'' é o DNS a asignar aos clientes de xeito automático e ''rightsourceip'' fai referencia ao rango de IP a asignar aos clientes de xeito automático. ''auto=add'' indica que o servicio IPSec estára en execución á espera de conexións entrantes.

Con '''''/etc/init.d/ipsec start''''' se iniciará o servidor VPN. Normalmente se iniciará automáticamente no arranque do sistema.
{{boxinfo|En Debian e necesario instalar tamén os plugins para ARP e outros que xa non veñen na instalación por defecto. Polo tanto debemos instalar: '''apt-get install libcharon-extra-plugins libstrongswan-extra-plugins'''}}

=== Firewall ===
O Servidor StrogSwan debe permitir o acceso aos seguintes portos UDP:

<source lang='text'>
bootpc 68/udp
isakmp 500/udp # IPsec - Internet Security Association and Key Management Protocol
ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947]
</source>

Será tamén necesario vixilar os posibles SNAT e DNAT da rede realizados no servidor VPN, insertando reglas RETURN para evitalo, e permitir o tráfico a través do server (cadea FORWARD) hacia a rede coa queremos conectar a VPN.

==Cliente VPN==
===Linux===
===Certificados===
Os clientes VPN necesitarán un certificado de cliente, firmado dixitalmente pola autoridade CA IES de Rodeira. Debemos:
:a) Habilitar extensións nas solicitudes de certificados, descomentando a liña '''req_extensions = v3_req''' na sección ''[req]'' de ''/etc/ssl/openssl.conf''
:b) Indicar na sección ''[v3_req]'' que será un certificado de cliente para o servidor VPN que queremos utilizar (Neste caso será '''DNS:vpn.iesrodeira.com''), mediante a propiedad ''extendedAltName'':
<source lang='text'>
subjectAltName = DNS:vpn.iesrodeira.com
</source>
:c) Crear a chave primaria e a solicitude de certificado:
<source lang='text'>
openssl req -newkey rsa:2048 -keyout vpnclient.iesrodeira.com.key -out vpnclient.iesrodeira.com.csr
</source>
:d) Enviaremos a solicitude de certificado (''vpnclient.iesrodeira.com.csr'') a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, '''''vpnclient.iesrodeira.com.crt''''', e o certificado da autoridade de certificación '''''rodeiraCA.crt'''''. Mediante o comando:
<source lang='text'>
openssl x509 -in vpnclient.iesrodeira.com.crt -noout -text
</source>
:poderemos comprobar si o certificado incorpora as extensións indicadas.

===Instalación e Configuración de StrongSwan===
En primeiro lugar, instalaremos strongswan:
<source lang='text'>
apt-get update && apt-get install strongswan
</source>
Debemos copiar a nosa chave privada (''vpn.iesrodeira.com.key'') en ''/etc/ipsec.d/private'', o noso certificado en ''/etc/ipsec.d/certs'' e o certificado da autoridade de certificación (IES de Rodeira) en ''/etc/ipsec.d/cacerts''. No ficheiro ''/etc/ipsec.secrets'' se especifica o modo de autenticación, que no noso caso é intercambio de certificados RSA. Si a chave do noso certificado está protexida, será necesario indicar a clave neste ficheiro:
<source lang='text'>
: RSA vpn.iesrodeira.com.key "passdesbloqueodakey"
</source>
Unha vez instalados os certificados, únicamente faltará configurar o punto de conexión IPSec no ficheiro ''/etc/ipsec.conf''. No noso caso será:

config setup
conn iesrodeira
left=%defaultroute
leftsourceip=%config
leftcert=vpnclient.iesrodeira.com.crt
right=iesrodeira.com
rightsubnet=172.20.0.0/16
rightid="/C=ES/ST=Galiza/O=IES de Rodeira/OU=Departamento de Informatica/CN=vpn.iesrodeira.com/emailAddress=xavi@iesrodeira.com"
auto=start


'''left''' representa o extremo local. ''left=%defaultroute'' indica que a IP local será a IP correspondente a ruta por defecto, ''leftsourceip=%config'' indica que o extremo local collerá a IP que lle indique o servidor VPN, e ''leftcert'' indicará o certificado de cliente a utilizar.

'''right''' será os extremo remoto. ''right=iesrodeira.com'' indica que o extremo remoto será ''iesrodeira.com'', ''rightsubnet=172.20.0.0/16'' indica a qué rede nos imos a conectar e ''rightid'' debe ser o ''subject'' do certificado do servidor VPN, que podemos ver mediante:

<source lang='text'>
openssl x509 -in vpn.iesrodeira.com.crt -noout -subject
</source>

Por último ''auto=start'' indica que iniciaremos a conexión manualmente mediante o comando '''/etc/init.d/ipsec start'''. Para parar a conexión faremos '''/etc/init.d/ipsec stop'''.

{{boxinfo|E moi importante indicar correctamente o rightid do certificado do servidor VPN, se non é así, a conexión será denegada}}

===Windows 7===
Windows 7 soporta VPN basadas en IPSec utilizando autenticación IKEv2. Necesitaremos o certificado da autoridade de certificación, e un certificado de cliente firmado en formato pks12.
===Certificados===
Os clientes VPN necesitarán un certificado de cliente, firmado dixitalmente pola autoridade CA IES de Rodeira. Utilizando unha máquina con OpenSSL instalado debemos:
:a) Habilitar extensións nas solicitudes de certificados, descomentando a liña '''req_extensions = v3_req''' na sección ''[req]'' de ''/etc/ssl/openssl.conf''
:b) Indicar na sección ''[v3_req]'' que será un certificado de cliente para o servidor VPN que queremos utilizar (Neste caso será '''DNS:vpn.iesrodeira.com''), mediante a propiedad ''extendedAltName'':
<source lang='text'>
subjectAltName = DNS:vpn.iesrodeira.com
</source>
:c) Crear a chave primaria e a solicitude de certificado:
<source lang='text'>
openssl req -newkey rsa:2048 -keyout winvpnclient.iesrodeira.com.key -out winvpnclient.iesrodeira.com.csr
</source>
:d) Enviaremos a solicitude de certificado (''winvpnclient.iesrodeira.com.csr'') a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, '''''winvpnclient.iesrodeira.com.crt''''', e o certificado da autoridade de certificación '''''rodeiraCA.crt'''''. Mediante o comando:
<source lang='text'>
openssl x509 -in winvpnclient.iesrodeira.com.crt -noout -text
</source>
:poderemos comprobar si o certificado incorpora as extensións indicadas.

{{boxinfo|Tamén é posible crear as solicitudes de certificado mediante as utilidades de certificación de Windows, pero debemos ter coidado de incorporar as extensións axeitadas ao mesmo}}

Precisaremos o certificado en formato pkcs12, que inclúe tanto a chave privada como a pública nun único arquivo. A conversión podemos facela co seguinte comando (precisamos a chave privada do certificado):
<source lang='text'>
openssl pkcs12 -export -inkey winvpnclient.iesrodeira.com.key -in winvpnclient.iesrodeira.com.crt -name "winvpnclient"
-certfile CArodeira.pem -caname "IES de Rodeira" -out winvpnclient.pkcs12
</source>
===Configuración da Conexión===
Unha vez dispoñemos do certificado da autoridade de certificación e do certificado de cliente pkcs12, o debemos importar ao sistema, e configurar a conexión posteriormente en "redes e recursos compartidos".
<gallery>
Image:mmc.png|Microsoft Management Console
Image:complemento.png|Agregar Complemento
Image:complemento_cert.png|Complemento Xestión de Certificados
Image:activar_complemento.png|Instalación Complemento - 1
Image:activar_complemento_2.png|Instalación Complemento - 2
Image:Importar_PKCS12.png|Importar Certificado PKCS12
Image:Importar_CA.png|Importar Autoridade de Certificación
Image:Configuracion_conexion.png|Configurar Conexión - 1
Image:ConfigurarConexion2.png|Configurar Conexión - 2
Image:ConfigurarConexion3.png|Configurar Conexión - 3
Image:ConfigurarConexion4.png|Configurar Conexión - 4
Image:PropiedadesConexion.png|Configurar Conexión - 1
Image:PropiedadesConexion2.png|Configurar Conexión - 2
Image:ConexionVPN.png|Conectar coa VPN
</gallery>
==Comprobación da Conexión==
Unha vez iniciada a conexión mediante ''/etc/init.d/ipsec start'' no caso de Linux, ou iniciando a conexión VPN no caso de Windows, podemos comprobar a conexión VPN a rede mediante o comando 'ping' a algún equipo da rede interna, ou intentando o acceso a algún servizo interno.

Ademáis, no servidor e nos clientes Linux, podemos examinar o protocolo de intercambio e verificación de certificados e o establecemento da conexión en ''/var/log/syslog''. Mediante os comandos '''ip xfrm policy''' e '''ip xfrm state''' poderemos verificar o estado do túnel, e por último, podemos examinar a táboa de rutado do túnel IPSec mendiante '''ip route show table 220'''.

Revisión actual feita o 24 de xullo de 2014 ás 09:00

Creación dunha VPN con StrongsWan

StrongSwan é unha implementación de VPN basada en IPSEC incluída nos repositorios oficiais Debian, que ofrece múltiples características, entre elas o traspaso de NAT mediante encapsulación UDP e o uso de IKEv2 para a autenticación, soportada en Windows 7 e Android. Podes consultar as características completas na [páxina de StrongSwan].

En este artigo, configuraremos un servidor StrongsWan que permitirá o establecimento dunha VPN IPSec entre unha rede local e clientes remotos Linux ou Windows 7 mediante o uso de certificados expedidos por unha autoridade de certificación na que teñamos confianza. Neste caso concreto, os certificados serán expedidos pola CA IES de Rodeira, que se encargará da firma das solicitudes de certificados enviadas polos clientes e de proporcionar o servizo OCSP necesario para a súa verificación.

Servidor VPN

Certificados

O servidor VPN terá un certificado de servidor, firmado dixitalmente pola autoridade CA IES de Rodeira. Debemos:

a) Habilitar extensións nas solicitudes de certificados, descomentando a liña req_extensions = v3_req na sección [req] de /etc/ssl/openssl.conf
b) Indicar na sección [v3_req] que será un certificado de autenticación, e o nome do servidor para o que se vai a utilizar. (Neste caso será 'DNS:vpn.iesrodeira.com), mediante as propiedades extendedKeyUsage e extendedAltName:
extendedKeyUsage = serverAuth
subjectAltName = DNS:vpn.iesrodeira.com
c) Crear a chave primaria e a solicitude de certificado:
 openssl req -newkey rsa:2048 -keyout vpn.iesrodeira.com.key -out vpn.iesrodeira.com.csr
d) Enviaremos a solicitude de certificado (vpn.iesrodeira.com.csr) a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, vpn.iesrodeira.com.crt, e o certificado da autoridade de certificación rodeiraCA.crt. A firma a realizará a autoridade de certificación, previa comprobación dos datos da solicitude mediante o comando:
openssl ca -config ../../openssl.cnf -in vpn.iesrodeira.com.csr -out vpn.iesrodeira.com.crt

No cliente, mediante:

 openssl x509 -in vpn.iesrodeira.com.crt -noout -text
poderemos comprobar si o certificado incorpora as extensións indicadas.

Instalación e Configuración de StrongSwan

En primeiro lugar, instalaremos strongswan:

apt-get update && apt-get install strongswan

Debemos copiar a nosa chave privada (vpn.iesrodeira.com.key) en /etc/ipsec.d/private, o noso certificado en /etc/ipsec.d/certs e o certificado da autoridade de certificación (IES de Rodeira) en /etc/ipsec.d/cacerts. No ficheiro /etc/ipsec.secrets se especifica o modo de autenticación, que no noso caso é intercambio de certificados RSA. Si a chave do noso certificado está protexida, será necesario indicar a clave neste ficheiro:

 : RSA vpn.iesrodeira.com.key "passdesbloqueodakey"

Unha vez instalados os certificados, únicamente faltará configurar o punto de conexión IPSec no ficheiro /etc/ipsec.conf. No noso caso será:

config setup
     
conn vpnrodeira
        left=%any
        leftsubnet=172.20.0.0/16
        leftcert=vpn.iesrodeira.com.crt
        right=%any
        rightdns=172.20.2.1
        rightsourceip=172.20.80.0/16
        auto=add

left representa o extremo local. left=%any indica que a IP do extremo local será calqueira lado polo que chegue a conexión, leftsubnet será a rede á que se conectarán os clientes e leftcert indicará o certificado de servidor a utilizar. right serán os extremos remotos. right=%any indica que calqueira IP poderá actuar como cliente, rightdns é o DNS a asignar aos clientes de xeito automático e rightsourceip fai referencia ao rango de IP a asignar aos clientes de xeito automático. auto=add indica que o servicio IPSec estára en execución á espera de conexións entrantes.

Con /etc/init.d/ipsec start se iniciará o servidor VPN. Normalmente se iniciará automáticamente no arranque do sistema.

Boxinfo info.png
En Debian e necesario instalar tamén os plugins para ARP e outros que xa non veñen na instalación por defecto. Polo tanto debemos instalar: apt-get install libcharon-extra-plugins libstrongswan-extra-plugins

Firewall

O Servidor StrogSwan debe permitir o acceso aos seguintes portos UDP:

bootpc		68/udp
isakmp		500/udp	  # IPsec - Internet Security Association and Key Management Protocol
ipsec-nat-t	4500/udp  # IPsec NAT-Traversal [RFC3947]

Será tamén necesario vixilar os posibles SNAT e DNAT da rede realizados no servidor VPN, insertando reglas RETURN para evitalo, e permitir o tráfico a través do server (cadea FORWARD) hacia a rede coa queremos conectar a VPN.

Cliente VPN

Linux

Certificados

Os clientes VPN necesitarán un certificado de cliente, firmado dixitalmente pola autoridade CA IES de Rodeira. Debemos:

a) Habilitar extensións nas solicitudes de certificados, descomentando a liña req_extensions = v3_req na sección [req] de /etc/ssl/openssl.conf
b) Indicar na sección [v3_req] que será un certificado de cliente para o servidor VPN que queremos utilizar (Neste caso será 'DNS:vpn.iesrodeira.com), mediante a propiedad extendedAltName:
subjectAltName = DNS:vpn.iesrodeira.com
c) Crear a chave primaria e a solicitude de certificado:
 openssl req -newkey rsa:2048 -keyout vpnclient.iesrodeira.com.key -out vpnclient.iesrodeira.com.csr
d) Enviaremos a solicitude de certificado (vpnclient.iesrodeira.com.csr) a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, vpnclient.iesrodeira.com.crt, e o certificado da autoridade de certificación rodeiraCA.crt. Mediante o comando:
 openssl x509 -in vpnclient.iesrodeira.com.crt -noout -text
poderemos comprobar si o certificado incorpora as extensións indicadas.

Instalación e Configuración de StrongSwan

En primeiro lugar, instalaremos strongswan:

apt-get update && apt-get install strongswan

Debemos copiar a nosa chave privada (vpn.iesrodeira.com.key) en /etc/ipsec.d/private, o noso certificado en /etc/ipsec.d/certs e o certificado da autoridade de certificación (IES de Rodeira) en /etc/ipsec.d/cacerts. No ficheiro /etc/ipsec.secrets se especifica o modo de autenticación, que no noso caso é intercambio de certificados RSA. Si a chave do noso certificado está protexida, será necesario indicar a clave neste ficheiro:

 : RSA vpn.iesrodeira.com.key "passdesbloqueodakey"

Unha vez instalados os certificados, únicamente faltará configurar o punto de conexión IPSec no ficheiro /etc/ipsec.conf. No noso caso será:

config setup
conn iesrodeira
       left=%defaultroute
       leftsourceip=%config
       leftcert=vpnclient.iesrodeira.com.crt
       right=iesrodeira.com
       rightsubnet=172.20.0.0/16
       rightid="/C=ES/ST=Galiza/O=IES de Rodeira/OU=Departamento de Informatica/CN=vpn.iesrodeira.com/emailAddress=xavi@iesrodeira.com"
       auto=start


left representa o extremo local. left=%defaultroute indica que a IP local será a IP correspondente a ruta por defecto, leftsourceip=%config indica que o extremo local collerá a IP que lle indique o servidor VPN, e leftcert indicará o certificado de cliente a utilizar.

right será os extremo remoto. right=iesrodeira.com indica que o extremo remoto será iesrodeira.com, rightsubnet=172.20.0.0/16 indica a qué rede nos imos a conectar e rightid debe ser o subject do certificado do servidor VPN, que podemos ver mediante:

  openssl x509 -in vpn.iesrodeira.com.crt -noout -subject

Por último auto=start indica que iniciaremos a conexión manualmente mediante o comando /etc/init.d/ipsec start. Para parar a conexión faremos /etc/init.d/ipsec stop.

Boxinfo info.png
E moi importante indicar correctamente o rightid do certificado do servidor VPN, se non é así, a conexión será denegada

Windows 7

Windows 7 soporta VPN basadas en IPSec utilizando autenticación IKEv2. Necesitaremos o certificado da autoridade de certificación, e un certificado de cliente firmado en formato pks12.

Certificados

Os clientes VPN necesitarán un certificado de cliente, firmado dixitalmente pola autoridade CA IES de Rodeira. Utilizando unha máquina con OpenSSL instalado debemos:

a) Habilitar extensións nas solicitudes de certificados, descomentando a liña req_extensions = v3_req na sección [req] de /etc/ssl/openssl.conf
b) Indicar na sección [v3_req] que será un certificado de cliente para o servidor VPN que queremos utilizar (Neste caso será 'DNS:vpn.iesrodeira.com), mediante a propiedad extendedAltName:
subjectAltName = DNS:vpn.iesrodeira.com
c) Crear a chave primaria e a solicitude de certificado:
 openssl req -newkey rsa:2048 -keyout winvpnclient.iesrodeira.com.key -out winvpnclient.iesrodeira.com.csr
d) Enviaremos a solicitude de certificado (winvpnclient.iesrodeira.com.csr) a autoridade de certificación (CA) IES de Rodeira, que realizará a firma do mesmo e nos entregará o certificado firmado, winvpnclient.iesrodeira.com.crt, e o certificado da autoridade de certificación rodeiraCA.crt. Mediante o comando:
 openssl x509 -in winvpnclient.iesrodeira.com.crt -noout -text
poderemos comprobar si o certificado incorpora as extensións indicadas.
Boxinfo info.png
Tamén é posible crear as solicitudes de certificado mediante as utilidades de certificación de Windows, pero debemos ter coidado de incorporar as extensións axeitadas ao mesmo

Precisaremos o certificado en formato pkcs12, que inclúe tanto a chave privada como a pública nun único arquivo. A conversión podemos facela co seguinte comando (precisamos a chave privada do certificado):

openssl pkcs12 -export -inkey winvpnclient.iesrodeira.com.key  -in winvpnclient.iesrodeira.com.crt -name "winvpnclient" 
-certfile CArodeira.pem  -caname "IES de Rodeira" -out winvpnclient.pkcs12

Configuración da Conexión

Unha vez dispoñemos do certificado da autoridade de certificación e do certificado de cliente pkcs12, o debemos importar ao sistema, e configurar a conexión posteriormente en "redes e recursos compartidos".

Comprobación da Conexión

Unha vez iniciada a conexión mediante /etc/init.d/ipsec start no caso de Linux, ou iniciando a conexión VPN no caso de Windows, podemos comprobar a conexión VPN a rede mediante o comando 'ping' a algún equipo da rede interna, ou intentando o acceso a algún servizo interno.

Ademáis, no servidor e nos clientes Linux, podemos examinar o protocolo de intercambio e verificación de certificados e o establecemento da conexión en /var/log/syslog. Mediante os comandos ip xfrm policy e ip xfrm state poderemos verificar o estado do túnel, e por último, podemos examinar a táboa de rutado do túnel IPSec mendiante ip route show table 220.