LinuxParty

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

El servidor VPN (Virtual Private Network) brinda la tecnología de red que nos permitirá extender las capacidades de alcance de nuestra red local sobre Internet, un gran ejemplo de esto sería la posibilidad de que dos sucursales se comuniquen utilizando como único medio el internet.

Una Solución VPN nos reporta un mar de beneficios, como por ejemplo la reducción de costos, comunicación sin fronteras, integridad, confidencialidad, y seguridad de los datos.

Con la tecnología VPN podremos conectar redes locales sin importar la zona geográfica, con el simple hecho de estar conectado a internet, nos ahorraremos los grandes costos de los enlaces físicos, y nos proporcionaría una conexión sumamente segura.

Podemos mencionar los distintos tipos de Redes Privadas Virtuales (VPN):

VPN de Acceso Remoto: Este tipo de VPN consiste en brindar a los colaboradores externos la posibilidad de conectarse a la red desde sitios remotos a través de internet, al ser autenticados con una relación de confianza, mayormente tienen los mismos accesos que un colaborador interno.

VPN Punto a Punto: Este tipo de VPN consiste en proporcionar un tunel para la conexión de puntos remotos (Sucursales) a una sede central, para así eliminar los costosos enlaces Punto a Punto tradicionales (Utilizando medios físicos).

VPN sobre Red Local: Este tipo de VPN, también denominado "VPN OVER LAN" consiste en un VPN de Acceso remoto, pero en vez de utilizar internet como vínculo de acceso, utilizaría la misma red Local. Normalmente esto se usa para proporcionar seguridad extra a ciertas zonas de la red, como por ejemplo que ciertos usuarios que tengan las relaciónes de confianzas necesarias puedan acceder a la VPN.

Ahora que ya tenemos algunos conceptos básicos de la tecnología VPN, podemos hablar de la solución que vamos a implementar en este artículo, la cual se denomina OpenVPN, y según Wikipedia es:

OpenVPN es una solución de conectividad basada en software: SSL (Secure Sockets Layer) VPN Virtual Private Network (red virtual privada), OpenVPN ofrece conectividad punto-a-punto con validación jerárquica de usuarios y host conectados remotamente, resulta una muy buena opción en tecnologías Wi-Fi (redes inalámbricas EEI 802.11) y soporta una amplia configuración, entre ellas balanceo de cargas. Está publicado bajo la licencia GPL, de software libre.

En esta guía vamos a configurar un Servidor VPN básico, donde un cliente se conectará desde el exterior a nuestro servidor, en pocas palabras realizaremos un VPN de Acceso Remoto, antes de poner en práctica la guía deben de tener conocimientos de Shorewall como requisito (Así como tenerlo instalado y configurado - GUIA DE SHOREWALL), ya que será utilizado.

Lo primero que tenemos que hacer es instalar los paquetes necesarios, lo podemos hacer con el siguiente comando:

yum install openvpn lzo 

Nos dirigimos al directorio de OpenVPN:

cd /etc/openvpn/

Para facilitar la tarea de configuración vamos a copiar la carpeta de easy-rsa 2.0 en /etc/openvpn/:

cp -r /usr/share/openvpn/easy-rsa/ /etc/openvpn

Entramos a la carpeta easy-rsa/2.0 (La que está en /etc/openvpn) y modificamos las últimas líneas de el archivo vars de acuerdo a nuestros casos, en mi caso a quedado así:

export KEY_COUNTRY="RD"
export KEY_PROVINCE="ST"
export KEY_CITY="SantoDomingo"
export KEY_ORG="punto-libre.org"
export KEY_EMAIL="Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." 

Tras guardar el archivo vars, vamos a cargar las variables modificadas

(Cada vez que queramos generar un nuevo certificado con datos diferentes, deberemos ejecutar el comando), con el comando (Ojo: deberemos estar en el directorio /etc/openvpn):

source /etc/openvpn/easy-rsa/2.0/./vars

Luego limpiamos todas las firmas digitales presentes:

sh /etc/openvpn/easy-rsa/2.0/clean-all

Creamos el certificado del servidor, dejando todo por defecto:

sh /etc/openvpn/easy-rsa/2.0/build-ca

Creamos el fichero dh1024.pem, el cual tiene los parámetros del protocolo Diffie-Hellman DE 1024 Bits:

sh /etc/openvpn/easy-rsa/2.0/build-dh

Generamos la firma digital del servidor:

sh /etc/openvpn/easy-rsa/2.0/build-key-server server

Generamos las llaves de los clientes, en este caso solamente generaremos una llave para un cliente:

sh /etc/openvpn/easy-rsa/2.0/build-key cliente1

Las llaves que generemos las encontraremos en la carpeta keys que esta dentro de la carpeta easy-rsa.

El siguiente paso sería crear el archivo de configuración del servidor VPN, para su hacerlo creamos en el directorio /etc/openvpn el archivo servidorvpn-tcp-1194.conf (Es primordial que termine con .conf) y en el copiamos los siguientes parámetros:

port 1194
proto tcp
dev tun
#---- Seccion de llaves -----
ca easy-rsa/2.0/keys/ca.crt
cert easy-rsa/2.0/keys/server.crt
key easy-rsa/2.0/keys/server.key
dh easy-rsa/2.0/keys/dh1024.pem
#----------------------------
server 192.168.50.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status-servidorvpn-udp-1194.log
verb 3

client-to-client

duplicate-cn

max-clients 20

Aquí una descripción de la configuración

port: el puerto por donde escuchara el servidor VPN.

proto: el protocolo que se usará para la conexión.

dev: tipo de interfaz de conexión virtual que se usará.

ca: ubicación del fichero de Autoridad certificadora.

cert: ubicación del fichero .crt generado por nosotros.

key: ubicación del fichero .key de llave generado por nosotros.

dh: ubicación del fichero .pen generado por nosotros.

server: rango de red virtual que se utilizará.

ifconfig-pool-persist: fichero donde se registran las máquinas conectadas.

keepalive 10 120: envía un paquete cada diez segundos y si no es respondido antes de los 120 segundos, dará por caida la conexión.

comp-lzo: los datos que se manejan por el tunel VPN serán compactados.

persist-key: resuelve el problema de las llaves que persisten

persist-tun: permite que no se cierren y se vuelvan abrir los dispositivos TAP/TUN al correr up/down.

status: fichero donde se almacenará el log de estado

verb: nivel de información deseado

Hay una cosa que tenemos que tener en cuenta, y es que en el parámetro server no podemos especificar un rango de red el cual probablemente tenga el cliente VPN, ya que causaría conflictos... elijan rangos de red pocos usuales como por ejemplo

192.168.50.0/24.

client-to-client: Sin éste parámetro los clientes VPN no podrán comunicarse con los otros clientes VPN.

duplicate-cn: Con éste parámetro estamos especificando que los clientes pueden conectarse al mismo tiempo con el mismo certificado.

max-clients: Clientes máximos que se pueden conectar al mismo tiempo.

Tenemos que hacer unas configuraciones del sistema... cargamos el módulo:

modprobe tun

Habilitamos Ip Forwarding, para ello abrimos el archivo /etc/sysctl.conf y verificamos que el siguiente parámetro este así:

net.ipv4.ip_forward = 1

Y luego ejecutamos el siguiente comando:

echo 1 > /proc/sys/net/ipv4/ip_forward

Comprobamos que tenemos /dev/net/tun, si no existe lo creamos:

mknod /dev/net/tun c 10 200

Configuracion en Shorewall:

En shorewall vamos a tener que agregar unos cuantos parámetros, y empezaremos por agregar la zona, que como ya sabemos se encuentra en /etc/shorewall/zones, independientemente de la configuración que tengamos deberemos agregar lo siguiente:

#ZONE                DISPLAY 
vpn                       ipv4

Luego le asignamos a la interfaz tun0 (este fue mi caso, puedes verificar con el comando ifconfig) la zona vpn (Archivo /etc/shorewall/interfaces):

#ZONE                INTERFACE             BROADCAST             OPTIONS

vpn                       tun0                     detect                     dhcp

Independientemente de la configuración que tengamos vamos crear las políticas para esta zona (archivo /etc/shorewall/policy), por ejemplo si tenemos la zona net(Internet),fw(Firewall/Server),loc(Red Local), una configuración de ejemplo sería:

#SOURCE         DEST         POLICY

fw                       all         ACCEPT

loc                      all         ACCEPT

net                      all         DROP

vpn                     all         ACCEPT

Estamos aceptando todas las conexiones menos las que vengan desde internet, ahora independientemente de nuestra reglas en shorewall deberemos abrir el puerto 1194 (Puerto escogido anteriormente) a las conexiones que vengan desde interior para poder permitir que los clientes se conecten, editamos el archivo rules de /etc/shorewall:

#ACTION       SOURCE          DEST           PROTO   DEST PORT
ACCEPT          net                     fw                tcp          1194
ACCEPT          fw                      net               tcp          1194

Y para finalizar con shorewall editamos el archivo tunnels de /etc/shorewall, en este archivo deberemos definir las conexiones VPN, tenemos que especificar el puerto que utilizaremos y la dirección de red donde se encuentra el servidor, en mi caso 192.168.1.0/24.

#TYPE                         ZONE       GATEWAY ZONE
openvpnserver:1194      vpn            192.168.1.0/24

Configuracion de clientes Linux:

Para la configuración de los clientes VPN en plataformas Linux utilizaremos el mismo OpenVPN (También es posible utilizar NetworkManager), para empezar debemos tener en nuestra máquina cliente Linux los ficheros generados previamente:

    ca.crt

    cliente1.crt

    cliente1.csr

    cliente1.key

Como sabemos todos estos ficheros se generaron en la carpeta keys en /etc/openvpn/easy-rsa/2.0/keys. Cuando tengamos los ficheros en nuestra máquina, instalamos openvpn:

yum install openvpn

Luego creamos dentro de la carpeta /etc/openvpn otra carpeta llamada keys, y en esta copiaremos los ficheros mencionados anteriormente, y creamos un archivo de configuración en /etc/openvpn llamado cliente1-udp-1194.ovpn, con el siguiente contenido:

client
dev tun
proto tcp

remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun
#------ SECCION DE LLAVES --------
ca keys/ca.crt
cert keys/cliente.crt
key keys/cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 

Aquí una descripción de cada parámetro:

client: especifica que openvpn será utilizado como cliente.

dev: tipo de interfaz virtual que se usará.

proto: protocolo que se usará para la conexión.

remote: se especifica el dominio o ip del servidor VPN con su puerto.

float: acepta paquetes desde cualquier dirección, no solo los

especificados en --remote.

resolv-retry: si la resolución falla hace una re-comprobación en los segundos especificados.

nobind: no agrega bind a la dirección local o al puerto.

persist-key: resuelve el problema de las llaves que persisten.

persist-tun: permite que no se cierren y se vuelvan abrir los dispositivos TAP/TUN al correr up/down.

ca: ubicación del fichero de Autoridad certificadora.

cert: ubicación del fichero .crt generado por nosotros.

key: ubicación del fichero .key de llave generado por nosotros

comp-lzo: Compacta los datos transmitidos.

Cargamos el módulo, activamos ip forwarding y comprobamos que tenemos /dev/net/tun (Ya explicamos anteriormente como realizarlo).

Y para finalizar de configurar el cliente, reiniciamos openvpn:

service openvpn restart

Con esto tendríamos conexión solamente con las máquinas que tengamos dentro de la VPN, en caso de querer conectividad con la red local deberemos de agregar a el archivo de configuración del cliente lo siguiente:

route 192.168.1.0 255.255.255.0

Esto es en caso de que la red local sea esa, también si queremos ponerle un servidor

DNS, lo hacemos con el siguiente parámetro:

dhcp-option DNS 192.168.1.100

Donde 192.168.1.100 es la IP del servidor DNS, al finalizar el archivo de configuración quedaría así:

client
dev tun
proto tcp
remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun

route 192.168.1.0 255.255.255.0

dhcp-option DNS 192.168.1.100
#------ SECCION DE LLAVES --------
ca keys/ca.crt
cert keys/cliente.crt
key keys/cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 

Luego reiniciamos el servicio OpenVPN y podremos tener conectividad con las máquinas de la red local, y poder hacer consultas al servidor DNS.

Configuración de un cliente Windows:

Para configurar un cliente Windows deberemos instalar un programa denominado OpenVPN-GUI, lo podemos descargar desde http://openvpn.se, luego lo instalamos y vamos a la carpeta C:/Program Files/openvpn/config.

En esta carpeta copiaremos los archivos:

    ca

    cliente1.crt

    cliente1.csr

    cliente1.key

Y crearemos el archivo cliente1-udp-1194.ovpn con el siguiente contenido:

client
dev tun
proto tcp
remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tunroute 192.168.1.0 255.255.255.0dhcp-option DNS 192.168.1.100
#------ SECCION DE LLAVES --------
ca ca.crt
cert cliente.crt
key cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 

Ya el significado de cada parámetro fue explicado anteriormente al configurar un cliente Linux, luego guardamos y podemos ejecutamos el cliente OpenVPN, al ejecutarlo se pondra en tray bar, le damos click derecho, y luego a connect.

Al conectarse se pondra verde y aparecera una notificacion con la IP virtual, tengan en cuenta que los niveles de seguridad de Windows 7 son mayores a los de XP, y esto significa que no podremos lograr la conexión VPN si no ejecutamos OpenVPN como administrador, dandole click derecho y "Run as administrator" o dirigiendonos a las propiedades, pestañá Compatibilidad, y activar la casílla "Run as administrator".

Si no hacemos esto, dira que se a conectado bien pero no podremos comunicarnos con los equipos remotos ya que se conecta pero no agrega las rutas de comunicación (El comando route solo puede ser corrido como administrador), esto solo pasa con Windows 7.

Y Listo, con esto concluyo esta guía para la configuración de un Servidor VPN.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política