LinuxParty
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.
-
Seguridad
- Conexión Segura NFS en Linux, Tunelizar NFS sobre SSH y Configuración de NFS sobre SSH para Mayor Seguridad
- Utilizar ssh sin contraseña con ssh-keygen y ssh-copy-id
- Millones de teléfonos móviles podrían ser vulnerables a la vigilancia del gobierno chino
- Cómo limitar las conexiones SSH a la red local en Linux
- Los televisores inteligentes son como un «caballo de Troya digital» en los hogares
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS
- Consejos de Seguridad para Pagos Móviles en España: Protege tus Transacciones con Estos Consejos Prácticos
- 22 herramientas de seguridad de servidores Linux de código abierto en 2023
- 8 hábitos que deben tomar los teletrabajadores altamente seguros