Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Openvpn
En pasados post vimos como podamos crear muy fcilmente nuestro propio servidor VPN
mediante el protocolo pptp.
http://geekland.eu/crear-un-servidor-vpn-pptp/
Por lo tanto a toda la gente que necesite un VPN para la transmisin de informacin
sensible no le recomiendo el uso del protocolo pptp. Le recomiendo el uso del protocolo
OpenVPN. Para ver como instalar y configurar este tipo de servidor VPN tan solo tienen que
seguir los pasos que vamos a definir a continuacin.
Para conseguir disponer de un servidor con ip interna fija tan solo tienen que seguir
los pasos que se detallan en el siguiente enlance:
http://geekland.eu/configurar-ip-fija_o_estatica_ipv4/
Nota: El mtodo descrito en el enlace es vlido en el caso que estis usando un
servidor sin entorno grfico. En el caso que el servidor que usis disponga de entorno
grfico tendris que configurar este aspecto a travs de las interfaces visuales de vuestro
w
gestor de red que probablemente ser network manager o icd.
Una vez terminados la totalidad de pasos mi servidor tendr una IP fija que en mi caso ser
la 192.168.1.188. Esta IP es la que deberemos usar para que el router redireccione las
peticiones de los clientes al servidor OpenVPN.
Para conectarnos a nuestra red local tendremos que saber nuestra IP Pblica pero
desafortunadamente en la gran mayora de casos la IP que tenemos es dinmica. Por lo
tanto se puede dar perfectamente el caso que en el momento de conectarnos no sepamos
la IP Pblica de nuestro servidor.
Para solucionar este problema tenemos que asociar la IP Pblica de nuestro servidor a
un dominio. Para poder realizar este paso tan solo tienen que seguir las indicaciones
del siguiente enlace:
http://geekland.eu/encontrar-servidor-con-dns-dinamico/
Una vez realizados estos pasos tendris vuestra IP Pblica asociada a un dominio. En mi
caso mi IP Pblica est asociada al dominio geekland.sytes.net
INSTALACIN DEL SERVIDOR
Para instalar el servidor OpenVPN lo primero que tenemos que hacer es abrir una
terminal. Dentro de la terminal t eclean el siguiente comando:
Al ser un protocolo que funciona bajo certificados y claves necesitaremos crear una
autoridad de certificacin para a posteriori generar los certificados.
Para poder emitir y revocar la claves necesitamos crear nuestra propia autoridad
certificadora y disponer de nuestro certificado raz ca.ctr y de nuestra clave ca.key
para poder crear y firmar las claves de los clientes y del servidor.
Para realizar este paso, y el resto de pasos, ejecutoriaremos los scripts que OpenVPN trae
incorporados de serie. Para ello tenemos que crear una carpeta con nombre easy-rsa
dentro de la ubicacin /etc/openvpn. Para ello abrimos una terminal y tecleamos el
siguiente comando:
cd /etc/openvpn
mkdir easy-rsa
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa
Una captura de pantalla los pasos realizados hasta el momento se puede ver a
continuacin:
En el caso que que vuestra distro trabaje con la versin 3 de easy-rsa, en el momento de
introducir el ltimo comando, obtendris un error parecido al siguiente error:
Los pasos a realizar para solucionar este error son los siguientes. En la terminal escriben el
siguiente comando para instalar el paquete easy-rsa.
rm -R /etc/openvpn/easy-rsa
Finalmente para obtener los scripts para la creacin de claves en la terminal introducimos el
siguiente comando:
make-cadir /etc/openvpn/easy-rsa
Nota: Algunas de las distros que funcionan con easy-rsa 3.0 son Ubuntu 14.04, Linux
Mint 16, etc.
Para ejecutar los scripts que acabamos de copiar o de obtener, tenemos que ir a la
ubicacin donde los guardamos. Para ello ingresamos el siguiente comando en la
terminal:
cd /etc/openvpn/easy-rsa
Antes de ejecutar los scripts editaremos el fichero vars para modificar una serie de
parmetros. Para modificar el fichero vars se tiene que introducir el siguiente comando en
la terminal:
nano vars
Tamao de las claves
Una vez abierto el editor de texto tenemos que localizar y modificar la siguiente lnea:
export_KEY_SIZE=1024
export_KEY_SIZE=2048
export KEY_COUNTRY=US
export KEY_PROVINCE=CA
export KEY_CITY=SanFrancisco
export KEY_ORG=Fort-Funston
export KEY_EMAIL=me(arroba)myhost.mydomain
export KEY_EMAIL=mail(arroba)host.domain
export KEY_CN=Changeme
export KEY_CN=Changeme
export KEY_OU=Changeme
Una vez localizadas las lineas tan solo se tienen reemplezar el contenido por defecto por
nuestros datos reales. En mi caso los datos a rellenar podran ser:
Nota: Dentro de este fichero tambin podemos configurar el tiempo de validez que
tendr nuestra entidad certificadora y el tiempo de validez que tendrn los certificados y
claves que crearemos. El valor estndar de validez son 3650 das que no voy a tocar.
Una vez modificado el archivo vars guardamos los cambios y lo cerramos. Ahora
tendremos que exportar sus variables. Para exportar sus variables tenemos que teclear el
siguiente comando en la terminal:
source ./vars
Seguidamente ejecutaremos el script clean-all. El script clean-all borrar la totalidad de
claves que podran existir en la ubicacin /etc/openvpn/easy-rsa/keys. Para ejecutar el
script tenemos que teclear el siguiente comando en la terminal:
./clean-all
El siguiente paso es generar los parmetros de Diffie Hellman. Los parmetros de Diffie
Hellman se utilizarn para poder intercambiar las claves ente cliente y servidor de forma
segura. Para poder realizar este paso tenemos que teclear el siguiente comando en la
terminal:
./build-dh
Nota: Para quien requiera informacin adicional de los parmetros de Diffie Hellman
nlace. E ste parmetro se usar poder un intercambio de
puede consultar el siguiente e
En la siguiente captura de pantalla podrn ver una muestra de los pasos realizados hasta el
momento:
Finalmente vamos a a crear el certificado y la clave privada de nuestra propia
autoridad certificadora. Para ello tenemos que teclear el siguiente comando en la
terminal:
./build-ca
Durante el proceso de creacin se les har una serie de preguntas para incorporar
informacin dentro del certificado que se crear. Como anteriormente hemos editado el
fichero vars ahora solo nos tenemos que limitar a aceptar el valor por defecto de las
preguntas que nos hacen.
ca.key: Este fichero contiene la clave privada de la autoridad de certificacin (CA). Este
archivo debe mantenerse protegido y no debe estar al alcance de terceros.
Una vez creado el certificado y la clave de vuestra autoridad certificador la pantalla de
vuestro ordenador tiene que presentar el siguiente estado:
./build-key-server whezzyVPN
Nota: whezzy VPN es el nombre del servidor. Vosotros tenis que introducir el nombre
que vosotros queris.
Una vez introducido este comando se nos har una serie de preguntas. Simplemente tienen
que contestar el valor por defecto ya que anteriormente hemos modificado el archivo vars.
whezzyVPN.key: Este fichero contiene la clave privada del servidor. Este archivo no debe
estar al alcance de nadie.
Una vez creado el certificado y la clave del servidor la pantalla de vuestro ordenador tiene
que presentar el siguiente estado:
CREAR EL CERTIFICADO Y LAS CLAVES DE LOS
CLIENTES
El siguiente paso es crear los certificados y las claves de los clientes que se podrn
conectar al servidor VPN. Para ello tenemos que teclear el siguiente comando en la
terminal:
./build-key usuariovpn
Una vez introducido este comando se nos har una serie de preguntas. Simplemente tienen
ars.
que contestar el valor por defecto ya que anteriormente hemos editado el fichero v
usuariovpn.key: Este fichero contiene la clave privada del cliente. Este archivo no debe
estar al alcance de nadie.
Una vez creado el certificado y la clave del cliente, la pantalla de vuestro ordenador tiene
que presentar el siguiente estado:
FORTIFICAR LA SEGURIDAD DEL SERVIDOR
OPENVPN CON TLS-AUTH
Ahora generamos otra clave. Esta clave nos servir para agregar soporte para usar la
autentificacin TLS y de este modo fortificar la seguridad del servidor VPN. Para generar
la clave para poder fortificar el servidor se tiene que introducir el siguiente comando en la
terminal:
cd /etc/openvpn/easy-rsa/keys
oS.
1. Ataques de denegacin de servicio D
Nota: Quien no sepa que son las peticiones DNS puede consultar el siguiente enlace.
Para que nadie capture nuestras peticiones DNS lo que realizaremos es canalizar la
totalidad de nuestras peticiones a travs del tnel del servidor OpenVPN. As las
peticiones DNS se enviarn al servidor VPN de forma cifrada y ser el servidor OpenVPN el
encargado de resolverlas. Para poder realizar lo que acabo de describir lo primero que
tienen que realizar es instalar dnsmasq. Para poder instalar dnsmasq teclean el siguiente
comando en la terminal:
Una vez instalado dnsmasq lo tenemos que configurar para que escuche las peticiones
DNS dirigidas al servidor VPN. Para ello accedemos al archivo de configuracin
introduciendo el siguiente comando en la terminal:
nano /etc/dnsmasq.conf
Una vez abierto el editor de texto introducen las siguientes lneas:
listen-address=127.0.0.1,10.8.0.1
bind-interfaces
solamente tenga en cuenta las peticiones DNS que se dirijan a las interfaces [lo]:
127.0.0.1 y [tun0]: 10.8.0.1 que es la de nuestro servidor VPN.
Nota: Con la segunda lnea estamos habilitando que dnsmasq tenga la capacidad de
escuchar solo determinadas interfaces como por ejemplo las dos que hemos definido
antes. La [lo] 127.0.0.1 y la [tun0] 10.8.0.1
Ahora tan solo tienen que guardar los cambios y salir del archivo de configuracin. La
configuracin ha terminado y solamente hace falta reiniciar los servicios openvpn y
dnsmasq. Para ello teclean los siguientes comandos en la terminal:
/etc/init.d/openvpn restart
/etc/init.d/dnsmasq restart
Es posible que cuando reinicien los servicios o arranquen el sistema vean un error parecido
al de la captura de la pantalla:
Starting DNS forwarder and DHCP server: dnsmasq
Esto error es debido a que Dnsmaq arranca antes de que se cree la interfaz [tun0]. Por lo
tanto cuando intenta escuchar la interfaz [tun0] nos dar el error porqu [tun0] no
existe. Para solucionar este problema y que dnsmasq puede realizar su funcin tan solo
tiene que modificar el archivo /etc/rc.local. Para ello en la terminal escriben:
nano /etc/rc.local
Se abrir el editor de textos y ahora, debajo de las reglas de iptables tan solo tienen que
escribir:
/etc/init.d/dnsmasq restart
Una vez realizado este paso guardan el fichero y salen. Introduciendo esta linea lo que
estamos haciendo es reiniciar el servicio dnsmasq una vez se han ejecutado la totalidad de
scripts de inicio (init). De este modo cuando se reinicialice dnsmasq la interfaz [tun0] ya
estar levantada.
Nota: Para que dnsmasq funcione tienen que tener configurado el servidor VPN tal y
como se detalla en el apartado Configurar el servidor.
Existen ficheros de configuracin standard que deberan funcionar out of the box y que
podemos aprovechar para realizar nuestra configuracin. Los ficheros de ejemplo que
podemos usar para ver la totalidad de opciones que tenemos disponibles se hallan
comprimidos en la siguiente ubicacin ubicacin:
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
Para consultarlos teclear el siguiente comando para acceder a la ubicacin de este archivo:
cd /usr/share/doc/openvpn/examples/sample-config-files
cp -a
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.g
z /etc/openvpn/
cd /etc/openvpn
gunzip server.conf.gz
Se abrir el editor de texto en el que podrn ver de forma detallada las opciones de
configuracin de ejemplo del servidor. Ahora tendris que comprobar que la totalidad de
parmetros que se muestran en la tabla de este apartado estn dentro del fichero de
configuracin de ejemplo que es el que vamos a usar. En el caso de que los parmetros
estn comentados habr que descomentarlos, en el caso que no existen se debern aadir
y/o modificar.
Parmetro Descripcin
Server 10.8.0.0 Indicamos que a los clientes del VPN se les asignar IP del
255.255.255.0 tipo 10.8.0.0/24
user nobody Para limitar los privilegios del demonio de VPN hacemos que
obody.
funcione con el usuario n
group nogroup Para limitar los privilegios del demonio de VPN hacemos que
ogroup.
funcione con el grupo n
push redirect-gateway Para que la totalidad de trfico vaya a travs de nuestro VPN
def1
push dhcp-option DNS Estamos definiendo que las peticiones DNS de los clientes
10.8.0.1 0.8.0.1
se hagan a travs del servidor VPN ubicado en 1
Una vez tenemos listo el fichero de configuracin tan solo tenemos que guardar los cambios
y cerrarlo.
Nota: Si queremos que los clientes que estan conectados al servidor VPN puedan
comunicarse entre ellos tenemos que aadir la frase client-to-client en el fichero de
configuracin del servidor.
Nota: Si leis con detalle el fichero de configuracin podris aplicar configuraciones
distintas a las que se detallan en el post.
nano client.conf
Parmetro Descripcin
user nobody Para limitar los privilegios de los clientes que se conectan al VPN
obody. (no necesario para windows)
les asignamos el usuario n
group nogroup Para limitar los privilegios de los clientes que se conectan al VPN
ogroup. (no necesario para windows)
les asignamos el grupo n
ns-cert-type server Para prevenir ataques man in the middle. Con esta frase hacemos
que los clientes solo puedan aceptar un certificado de servidor del
tipo servidor nsCertType=server. En este campo podramos
aplicar otras alternativas similares como por ejemplo
remote-cert-tls server.
tls-auth ta.key 1 Activacin de la autentificacin TLS en el cliente.
Para solucionar este problema vamos a introducir un usuario y un password para los
clientes de nuestro servidor vpn. Para ello tan solo tenemos que aadir uno o los
usuarios que queramos.
Para aadir un usuario, como por ejemplo el usuariovpn2, tienen que teclear el siguiente
comando en la terminal:
useradd usuariovpn2 -M -s /bin/false
Una vez creado el usuario tenemos que definir un password del usuariovpn2. Para ello
tecleamos el siguiente comando en la terminal:
passwd usuariovpn2
Una vez introducido el comando nos pedir que introduzcamos la clave de usuario y
despus nos pedir confirmacin.
En el caso que a posteriori se precise eliminar el usuariovpn2 tan solo tienen que
introducir el siguiente comando en la terminal:
deluser usuariovpn2
nano /etc/sysctl.conf
#net.ipv4.ip_forward=1
Una vez localizada tan solo hay que descomentarla de forma que quede de la siguiente
forma:
net.ipv4.ip_forward=1
Una vez habilitado el Ipforwarding tenemos que permitir el trfico por nuestro tnel
VPN, y adems tenemos que hacer que los clientes VPN puedan acceder a redes externas
pblicas y otras subredes dentro de la red VPN. Para poder conseguir esto en la terminal
escriben el siguiente comando:
nano /etc/rc.local
Una vez se abra el editor de textos tienen que escribir las siguientes reglas en
nuestro firewall
firewall es posible que tenga que implementar reglas adicionales a las que se muestran
en este ejemplo.
Con la primera de las reglas estamos permitiendo el trfico por el dispositivo virtual en que
que se crea el tnel.
Con la segunda de las reglas estamos permitiendo que los paquetes provenientes de
10.8.0.0/24 pueden enviarse o salir por la interfaz de salida e
th0.
Con la tercera de las reglas estamos diciendo al servidor OpenVPN que cuando reciba
una peticin de cualquiera de los clientes, proceda el mismo a resolverla y enviarla en
representacin del cliente.
Una vez finalizando el proceso guardan el archivo y cierran el editor de textos. Antes de
cerrar el archivo el fichero /etc/rc.local tendr un aspecto parecido al siguiente:
CONFIGURAR EL ROUTER Y ABRIR EL PUERTO
DEL SERVIDOR OPENVPN
Ya para finalizar solo nos falta configurar nuestro router, para que redirija las
peticiones de los clientes al servidor Opevpn, y abrir el puerto del servidor OpenVPN.
Para realizar esto tenemos que abrir nuestro navegador y teclear nuestra puerta de
entrada. Una vez realizado esto, tal y como se puede ver en la captura de pantalla, se
abrir una ventana en que nos pedir nuestro nombre de usuario y contrasea:
Una vez introducida la informacin accederemos a la configuracin de nuestro router.
Seguidamente, tal y como se puede ver en la captura de pantalla, tenemos que acceder a
los mens Advanced / NAT / Virtual Servers:
Presionamos el botn Apply/Save y de esta forma todas las peticiones exteriores que
194 sern redirigidas a nuestro servidor OpenVPN.
lleguen a nuestro router por el puerto 1
1. Linux
2. Android
3. Windows
4. iOS
Siguiendo las instrucciones de los enlaces que acabo de dejar podremos comprobar
fcilmente el funcionamiento de nuestro servidor Openvpn.
Capa 1 Autentificacin TLS: Con la autentificacin TLS estamos introduciendo una firma
digital HMAC a los paquetes antes de empezar la autentificacin reciproca entre cliente y
servidor. Si no se pasa el test de la firma HMAC, no se llegar ni a iniciar el proceso de
autenticacin entre cliente y servidor.
Todas estas caractersticas, ms las que se detallan en el post, hacen que OpenVPN sea
una opcin muy vlida para la transmisin segura de datos sensibles. Por esto motivo
OpenVPN es el protocolo que utilizan muchas organizaciones en el mundo empresarial.
Adems OpenVPN es una solucin multiplataforma y dentro de lo que cabe no es difcil de
configurar si lo comparamos con por ejemplo I psec.
En lo que a seguridad se refiere tambin tenemos que destacar que aparte de las 3 capas
de seguridad, tambin hemos implementado un mtodo para que los clientes del VPN
tengan que introducir un usuario y un Password. Adems la totalidad del trfico, incluyendo
la resolucin de las peticiones DNS, ser a travs del servidor OpenVPN que acabamos
instalar y de configurar.
Referencia:
http://geekland.eu/crear-y-configurar-servidor-openvpn/