Diferencia entre revisiones de «OpenVPN»

De Wiki de BandaAncha.eu
Saltar a: navegación, buscar
 
(No se muestran 10 ediciones intermedias de 4 usuarios)
Línea 1: Línea 1:
{{Plantilla:Docs}}
 
 
{| class="wikitable" align="right" cellpadding="4"
 
{| class="wikitable" align="right" cellpadding="4"
 
|+ '''Sobre este documento'''
 
|+ '''Sobre este documento'''
Línea 5: Línea 4:
 
| bgcolor="#ddf"|'''Tipo''' || Manual (How To)
 
| bgcolor="#ddf"|'''Tipo''' || Manual (How To)
 
|-
 
|-
| bgcolor="#ddf"|'''Plataforma''' || GNU/Linux
+
| bgcolor="#ddf"|'''Categoria''' || [[:Categoría:Linux|Linux]]
 +
|-
 +
| bgcolor="#ddf"|'''Plataforma''' || All GNU/Linux
 
|-
 
|-
 
| bgcolor="#ddf"|'''Dificultad''' || [[Imagen:Micro_tux.png|Tux]][[Imagen:Micro_tux.png|Tux]][[Imagen:Micro_tux.png|Tux]]
 
| bgcolor="#ddf"|'''Dificultad''' || [[Imagen:Micro_tux.png|Tux]][[Imagen:Micro_tux.png|Tux]][[Imagen:Micro_tux.png|Tux]]
 
|-
 
|-
 
|}
 
|}
Empezaremos explicando, para quien no sepa, qué es una VPN. '''VPN''' viene de las siglas Virtual Private Network y es una tecnología de red que permite una extensión de la red local sobre una red pública o no controlada , como por ejemplo Internet.
+
Empezaremos explicando, para quien no sepa, qué es una VPN. '''VPN''' viene de las siglas ''Virtual Private Network'' y es una tecnología de red que permite una extensión de la red local sobre una red pública o no controlada , como por ejemplo Internet.
  
 
Ejemplos comunes son:, la posibilidad de conectar dos o más ordenadores utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de trabajo (estos bofh...), o que una persona pueda acceder a su equipo doméstico desde, por ejemplo, un hotel. Todo ello utilizando la infraestructura de Internet.
 
Ejemplos comunes son:, la posibilidad de conectar dos o más ordenadores utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de trabajo (estos bofh...), o que una persona pueda acceder a su equipo doméstico desde, por ejemplo, un hotel. Todo ello utilizando la infraestructura de Internet.
Línea 28: Línea 29:
 
Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall.
 
Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall.
  
== Instalación de OpenVPN ==
+
== Instalación del Servidor OpenVPN ==
 
Aunque la mayoría de las distribuciones de GNU/Linux tienen el paquete integrado en sus repositorios, haremos esto de la forma tradicional y lo instalaremos desde tarball, antes de eso tendremos que asegurarnos que los siguientes paquetes están en nuestro sistema, para poder instalar el paquete sin problemas:  
 
Aunque la mayoría de las distribuciones de GNU/Linux tienen el paquete integrado en sus repositorios, haremos esto de la forma tradicional y lo instalaremos desde tarball, antes de eso tendremos que asegurarnos que los siguientes paquetes están en nuestro sistema, para poder instalar el paquete sin problemas:  
 
<pre>
 
<pre>
Línea 43: Línea 44:
 
# tar -xfz openvpn-2.0.9.tar.gz
 
# tar -xfz openvpn-2.0.9.tar.gz
 
# cd openvpn-2.0.9
 
# cd openvpn-2.0.9
# ./configure && echo "Configure terminado" && make && echo "Compilacion completada" && make install "Soy todopoderoso, lo se"
+
# ./configure && echo "Configure terminado" && make && echo "Compilacion completada" && make install && echo "Soy todopoderoso, lo se"
 
</pre>
 
</pre>
Con esto ya hemos terminado la instalación, pero todavía quedan algunos detalles por ejecutar, como el crear las keys y las configuraciones. OpenVPN ya viene con los scripts necesarios para generar nuestras propias llaves, como veremos a continuación.
+
Con esto ya hemos terminado la instalación, pero todavía quedan algunos detalles por ejecutar, como el crear los certificados y las configuraciones. OpenVPN ya viene con los scripts necesarios para generar nuestros propios certificados, como veremos a continuación.
  
 
== Crear los Certificados de Autentificación (CA) ==
 
== Crear los Certificados de Autentificación (CA) ==
Línea 52: Línea 53:
 
Los scripts de rsa están en '''/usr/local/src/openvpn-2.0.9/easy-rsa/2.0/'''. Por cómodidad más que otra cosa podemos trasladarlos a otro sitio, sobretodo si tenemos que volver a generar por algún otro motivo las keys, así que lo copiaremos todo a '''/etc/openvpn'''. Una vez copiado todo el contenido tendremos que modificar el archivo '''vars''' para establecer nuestros valores y estaremos listos para generar primeramente el CA para el servidor y luego para nuestros clientes:
 
Los scripts de rsa están en '''/usr/local/src/openvpn-2.0.9/easy-rsa/2.0/'''. Por cómodidad más que otra cosa podemos trasladarlos a otro sitio, sobretodo si tenemos que volver a generar por algún otro motivo las keys, así que lo copiaremos todo a '''/etc/openvpn'''. Una vez copiado todo el contenido tendremos que modificar el archivo '''vars''' para establecer nuestros valores y estaremos listos para generar primeramente el CA para el servidor y luego para nuestros clientes:
 
<pre>
 
<pre>
'''# mkdir /etc/openvpn'''
+
# mkdir /etc/openvpn
'''# mkdir /etc/openvpn/easy_rsa-2.0'''
+
# mkdir /etc/openvpn/easy_rsa-2.0
'''# cp -r /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/* /etc/openvpn/easy_rsa-2.0'''
+
# cp -r /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/* /etc/openvpn/easy_rsa-2.0
'''# cd /etc/openvpn/easy_rsa-2.0'''
+
# cd /etc/openvpn/easy_rsa-2.0
'''# {EDITOR} vars'''
+
# {EDITOR} vars
 +
</pre>
 
Buscar estos valores y cambiarlos por los vuestros '''KEY_COUNTRY''', '''KEY_PROVINCE''', '''KEY_CITY''', '''KEY_ORG''', '''KEY_EMAIL''' no dejes ninguno en blanco, salvar el archivo y listo.
 
Buscar estos valores y cambiarlos por los vuestros '''KEY_COUNTRY''', '''KEY_PROVINCE''', '''KEY_CITY''', '''KEY_ORG''', '''KEY_EMAIL''' no dejes ninguno en blanco, salvar el archivo y listo.
'''# source ./vars'''
+
<pre>
 +
# source ./vars
 
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa-V2.0/keys
 
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa-V2.0/keys
'''# ./clean-all'''
+
# ./clean-all
'''# ./build-dh'''
+
# ./build-dh
 
Generating DH parameters, 1024 bit long safe prime, generator 2
 
Generating DH parameters, 1024 bit long safe prime, generator 2
 
This is going to take a long time
 
This is going to take a long time
Línea 68: Línea 71:
 
..................+........................+....................................
 
..................+........................+....................................
 
+.................................
 
+.................................
'''#  ./pkitool --initca'''
+
 
 +
#  ./pkitool --initca
 
Using CA Common Name: Bandaancha CA
 
Using CA Common Name: Bandaancha CA
 
Generating a 1024 bit RSA private key
 
Generating a 1024 bit RSA private key
Línea 75: Línea 79:
 
writing new private key to 'ca.key'
 
writing new private key to 'ca.key'
 
-----
 
-----
'''# ./pkitool --server servidor'''
+
 
 +
# ./pkitool --server servidor
 
Generating a 1024 bit RSA private key
 
Generating a 1024 bit RSA private key
 
...........++++++
 
...........++++++
Línea 95: Línea 100:
 
Write out database with 1 new entries
 
Write out database with 1 new entries
 
Data Base Updated
 
Data Base Updated
'''# ./pkitool cliente_01'''
+
 
 +
# ./pkitool cliente_01
 
Generating a 1024 bit RSA private key
 
Generating a 1024 bit RSA private key
 
.........................................++++++
 
.........................................++++++
Línea 106: Línea 112:
 
Signature ok
 
Signature ok
 
The Subject's Distinguished Name is as follows
 
The Subject's Distinguished Name is as follows
countryName          :PRINTABLE:'MX'
+
countryName          :PRINTABLE:'ES'
stateOrProvinceName  :PRINTABLE:'Baja California'
+
stateOrProvinceName  :PRINTABLE:'Pontevedra'
localityName          :PRINTABLE:'Tijuana'
+
localityName          :PRINTABLE:'Vigo'
organizationName      :PRINTABLE:'Tuxjm'
+
organizationName      :PRINTABLE:'BandaAncha'
commonName            :PRINTABLE:'cliente1'
+
commonName            :PRINTABLE:'Servittore'
emailAddress          :IA5STRING:'jmedinaaa@tuxjm.net'
+
emailAddress          :IA5STRING:'me@bandaancha.eu'
 
Certificate is to be certified until Apr 30 03:51:59 2016 GMT (3650 days)
 
Certificate is to be certified until Apr 30 03:51:59 2016 GMT (3650 days)
  
Línea 117: Línea 123:
 
Data Base Updated
 
Data Base Updated
 
</pre>
 
</pre>
 +
Bien, ya hemos generado un par de certificados, el primero para el servidor VPN y otro para el primer cliente. Si queremos generar más certificados para más clientes tendremos que volver a generar '''vars''' (''source ./vars'') y luego generar el certificado (''./pkitool cliente_0n''), tendremos que ejecutar estos pasos cada vez que querramos generar un certificado nuevo para un cliente.
 +
 +
== Los Certificados ==
 +
Como hemos visto cuando generamos los certificados se crean siempre duplicados, esto tiene un motivo, algunos son secretos y otros no... en esta sencilla tabla veremos cuales tienen que ser secretos (es decir, aunque nos estén apuntando con un arma a la cabeza no los deberemos revelar) y cuales podemos llevar en una unidad flash sin poner en peligro nuestra VPN.
 +
 +
{| class="wikitable" cellpadding="4"
 +
|+ '''Tabla de certificados'''
 +
|-
 +
| bgcolor="#ddf"|'''Archivo''' || bgcolor="#ddf"|'''¿Secreto?''' || bgcolor="#ddf"|'''Destino''' || bgcolor="#ddf"|'''Proposito'''
 +
|-
 +
| '''ca.crt''' || no || servidor y clientes || CA principal
 +
|-
 +
| '''ca.key''' || si || servidor || CA principal
 +
|-
 +
| '''dh{n}.pem''' || no || servidor || Parametros Diffie Hellman
 +
|-
 +
| '''servidor.crt''' || no || servidor || Certificado del servidor
 +
|-
 +
| '''servidor.key''' || si || servidor || Llave del servidor
 +
|-
 +
| '''cliente_{n}.crt''' || no || cliente {n} || Certificado del cliente
 +
|-
 +
| '''cliente_{n}.key''' || si || cliente {n} || Llave del cliente
 +
|-
 +
|}
 +
 +
Si vosotros por algún casual habeis cambiado los nombres de los archivos... recordar que nombre le habeis puesto y mirar en la tabla lo que podeis hacer con él.
 +
 +
== Configuracion Servidor y Cliente ==
 +
 +
La configuración del cliente es muy similar a la que usamos para el servidor, pero añadiendole un campo más
 +
 
[[Categoría:Linux]]
 
[[Categoría:Linux]]

Revisión actual del 20:59 7 oct 2009

Sobre este documento
Tipo Manual (How To)
Categoria Linux
Plataforma All GNU/Linux
Dificultad TuxTuxTux

Empezaremos explicando, para quien no sepa, qué es una VPN. VPN viene de las siglas Virtual Private Network y es una tecnología de red que permite una extensión de la red local sobre una red pública o no controlada , como por ejemplo Internet.

Ejemplos comunes son:, la posibilidad de conectar dos o más ordenadores utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de trabajo (estos bofh...), o que una persona pueda acceder a su equipo doméstico desde, por ejemplo, un hotel. Todo ello utilizando la infraestructura de Internet.

Ventajas de una VPN[editar]

El principal beneficio que puede tener una VPN es el bajo costo que puede tener frente a otras conexiones como una Punto a Punto, ya que los clientes solamente tendrian que tener una conexión normal a internet.

Además los datos son codificados o cifrados y recién enviados a través de la conexión, para de esa manera asegurar la información y el password que se esté enviando.

Si quereis aprender más sobre las VPN podeis visitar este completo documento en la Wikipedia http://es.wikipedia.org/wiki/Red_privada_virtual.

En este manual explicaremos como instalar OpenVPN en un servidor cuya función es compartir a través de SAMBA ciertas carpetas... aunque este manual está dedicado a crear una VPN pública (es decir, accesible desde internet) no os será difícil imaginar como sería hacerla solamente local.

OpenVPN[editar]

OpenVPN es una implementacion de VPN SSL la cual usa las extenciones OSI layer 2 o 3 para asegurar redes la cual usa los protocolos SSL/TLS, soporta diferentes medios de autenticación como certificados, smart cards, y/o usuarios/contraseñas, y permite politicas de control de acceso para usaurios o grupos usando reglas de firewall aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor (proceso) OpenVPN sobre un simple puerto TCP o UDP.

Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall.

Instalación del Servidor OpenVPN[editar]

Aunque la mayoría de las distribuciones de GNU/Linux tienen el paquete integrado en sus repositorios, haremos esto de la forma tradicional y lo instalaremos desde tarball, antes de eso tendremos que asegurarnos que los siguientes paquetes están en nuestro sistema, para poder instalar el paquete sin problemas:

iproute2 tcpip pam openssl lzo

También tendremos que comprobar que el núcleo del sistema permite el tuneling (ya que montaremos nuestra VPN de esta forma por ser la más sencilla y práctica):

modprobe tun

Si todo está correcto, podremos empezar la instalación. Lo primero es bajarse el paquete de la página, descomprimirlo y luego compilarlo lo cual no resultará muy difícil ya que no requiere flag alguno.

# cd /usr/local/src
# wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
# tar -xfz openvpn-2.0.9.tar.gz
# cd openvpn-2.0.9
# ./configure && echo "Configure terminado" && make && echo "Compilacion completada" && make install && echo "Soy todopoderoso, lo se"

Con esto ya hemos terminado la instalación, pero todavía quedan algunos detalles por ejecutar, como el crear los certificados y las configuraciones. OpenVPN ya viene con los scripts necesarios para generar nuestros propios certificados, como veremos a continuación.

Crear los Certificados de Autentificación (CA)[editar]

Como explicabamos al inicio una VPN es una red privada virtual segura dentro de un medio inseguro, y eso es lo que vamos a conseguir a través de estos scripts, generando certificados tanto para el servidor como para los clientes que se vayan a conectar. Hay que decir que se pueden generar multiples certificados para cada uno de los clientes que es lo más aconsejable y seguro, pero también se le puede decir al servidor que acepte desde multiples puestos el mismo certificado. La elección será vuestra.

Los scripts de rsa están en /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/. Por cómodidad más que otra cosa podemos trasladarlos a otro sitio, sobretodo si tenemos que volver a generar por algún otro motivo las keys, así que lo copiaremos todo a /etc/openvpn. Una vez copiado todo el contenido tendremos que modificar el archivo vars para establecer nuestros valores y estaremos listos para generar primeramente el CA para el servidor y luego para nuestros clientes:

# mkdir /etc/openvpn
# mkdir /etc/openvpn/easy_rsa-2.0
# cp -r /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/* /etc/openvpn/easy_rsa-2.0
# cd /etc/openvpn/easy_rsa-2.0
# {EDITOR} vars

Buscar estos valores y cambiarlos por los vuestros KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL no dejes ninguno en blanco, salvar el archivo y listo.

# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa-V2.0/keys
# ./clean-all
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.............................................................................+..
..............................................................+.................
..................+........................+....................................
+.................................

#  ./pkitool --initca
Using CA Common Name: Bandaancha CA
Generating a 1024 bit RSA private key
............................++++++
........................++++++
writing new private key to 'ca.key'
-----

# ./pkitool --server servidor
Generating a 1024 bit RSA private key
...........++++++
...................................................................++++++
writing new private key to 'servidor.key'
-----
Using configuration from /etc/openvpn/easy-rsa-V2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'ES'
stateOrProvinceName   :PRINTABLE:'Pontevedra'
localityName          :PRINTABLE:'Vigo'
organizationName      :PRINTABLE:'BandaAncha'
commonName            :PRINTABLE:'Servittore'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Apr 30 03:50:13 2016 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

# ./pkitool cliente_01
Generating a 1024 bit RSA private key
.........................................++++++
............................++++++
writing new private key to 'cliente_01.key'
-----
Using configuration from /etc/openvpn/easy-rsa-V2.0/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'ES'
stateOrProvinceName   :PRINTABLE:'Pontevedra'
localityName          :PRINTABLE:'Vigo'
organizationName      :PRINTABLE:'BandaAncha'
commonName            :PRINTABLE:'Servittore'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Apr 30 03:51:59 2016 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Bien, ya hemos generado un par de certificados, el primero para el servidor VPN y otro para el primer cliente. Si queremos generar más certificados para más clientes tendremos que volver a generar vars (source ./vars) y luego generar el certificado (./pkitool cliente_0n), tendremos que ejecutar estos pasos cada vez que querramos generar un certificado nuevo para un cliente.

Los Certificados[editar]

Como hemos visto cuando generamos los certificados se crean siempre duplicados, esto tiene un motivo, algunos son secretos y otros no... en esta sencilla tabla veremos cuales tienen que ser secretos (es decir, aunque nos estén apuntando con un arma a la cabeza no los deberemos revelar) y cuales podemos llevar en una unidad flash sin poner en peligro nuestra VPN.

Tabla de certificados
Archivo ¿Secreto? Destino Proposito
ca.crt no servidor y clientes CA principal
ca.key si servidor CA principal
dh{n}.pem no servidor Parametros Diffie Hellman
servidor.crt no servidor Certificado del servidor
servidor.key si servidor Llave del servidor
cliente_{n}.crt no cliente {n} Certificado del cliente
cliente_{n}.key si cliente {n} Llave del cliente

Si vosotros por algún casual habeis cambiado los nombres de los archivos... recordar que nombre le habeis puesto y mirar en la tabla lo que podeis hacer con él.

Configuracion Servidor y Cliente[editar]

La configuración del cliente es muy similar a la que usamos para el servidor, pero añadiendole un campo más