Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Instalar un servidor VPN en una Raspberry Pi con PiVPN


La seguridad de los accesos públicos a Internet deja a menudo mucho que desear. Para poder conectarse fuera de casa sin correr riesgos, una red virtual privada o VPN (Virtual Private Network o red virtual privada) puede ser una buena solución. Si además se configura un servidor VPN personal, se tendrá acceso a la red local doméstica desde Internet

 


  • Anuncian que la VPN WireGuard se integrará en el Kernel de FreeBSD

¿ Qué es OpenVPN ?

VPN proviene de Virtual Private Network, nombre bastante descriptivo, que viene a crear una red local virtual, esto es, incluso no estando conectados detrás del mismo router, seremos capaces de interactuar con el resto de equipos conectados a nuestra VPN como si estuviésemos físicamente conectados en la misma red local. Implementaciones de VPN hay varias, las más conocidas utilizan protocolos PPTP, L2TP, IKE u OpenVPN, entre otros.

Sin entrar en cuál es mejor, pues cada una tiene ventajas y desventajas sobre las otras (más allá de algunas como PPTP que están obsoletas en si mismas), vamos a hablar de OpenVPN (https://openvpn.net/). La pega de OpenVPN es que puede resultar complicado de instalar / gestionar, pues hace uso de certificados SSL para cifrar las comunicaciones y autenticación. Es por esto que en una instalación convencional hay que generar una CA (Autoridad Certificadora), también hay que generar una clave TLS, generar las solicitudes de certificado y firmarlas para generar los certificados que se envían a los usuarios finales. Todo este proceso se simplifica enormemente si hacemos uso de PiVPN (https://www.pivpn.io/), y es lo que vamos a hacer.

PiVPN es un conjunto de scripts de shell que sirven para convertir fácilmente su Raspberry Pi en un servidor VPN utilizando dos protocolos gratuitos de código abierto:

  • WireGuard
  • OpenVPN    
El script instala y configura WireGuard u OpenVPN en Raspbian, Debian o Ubuntu, y se ha probado que se ejecuta no solo en Raspberry Pi sino también en cualquier VPS de Cloud Provider. Recomendamos usar la última imagen de Raspbian Lite en una Raspberry Pi para que pueda conectarse desde una ubicación remota no segura y usar Internet de manera segura. Sin embargo, los scripts intentan detectar diferentes distribuciones y hacer los ajustes correspondientes. Deberían funcionar en la mayoría de las distribuciones basadas en Ubuntu y Debian, incluidas las que usan UFW de forma predeterminada en lugar de iptables sin formato.  

La principal característica de este protocolo VPN es su seguridad por defecto, y también su gran rendimiento en la gran mayoría de hardware, a diferencia de OpenVPN o IPsec que consiguen la mitad de velocidad.

El equipo de desarrollo de FreeBSD ha anunciado que la popular VPN WireGuard se incorporará en el kernel, haciendo uso de un driver llamado if_wg

Instalación de OpenVPN con PiVPN

Por facilidad, voy a asumir que partimos de una instalación limpia de Raspberry Pi OS, aunque si no fuese así simplemente habría que actualizar la instalación actual.

Como decíamos, haremos uso de PiVPN, que es una herramienta que instala OpenVPN y ofrece comandos para configurarlo de forma inmediata. La instalación, aunque es larga, no es realmente complicada. Comenzaremos primero ejecutando el comando en nuestra RPI, adjunto imágenes del proceso que yo he hecho por en una RPI por ssh:

$curl -L https://install.pivpn.io | bash
Una vez terminadas las comprobaciones el instalador comenzará automáticamente, en estos primeros pasos no hay mucho que elegir así que nos limitaremos a avanzar.

El siguiente paso, aunque sigue sin ofrecernos opciones todavía, nos avisa de que la RPi necesitará tener asignada una IP estática dentro de la red local. La ip podemos asignarla manualmente o bien por reserva DHCP, esto último lo hacemos en el router. Es importante tener clara la IP de la RPi porque luego será necesario abrir el puerto del router al que asignemos el servicio OpenVPN.

En tanto en cuanto no corresponde aquí dar un tutorial de direccionamiento IP optamos por asumir que la configuración DHCP se gestiona desde el router, y en este caso, la RPi siempre tendrá la ip 192.168.1.68, pero de nuevo, esto es decisión vuestra.

Lo siguiente será seleccionar el usuario con que se inicia el servicio y que será responsable de la configuración de OpenVPN. Para simplificar, por el tema de permisos, vamos a asumir que el usuario será «pi», el usuario que viene creado por defecto en la imagen de Raspberry Pi OS, pero si tuviésemos varios usuarios nos ofrecería con varios.

El siguiente paso nos ofrecerá instalar WireGuard u OpenVPN como protocolo, por ahora nos vamos a liminar a OpenVPN, por la cantidad de opciones que ofrece, y que hoy por hoy en 2020 tiene clientes para casi todas las plataformas, de escritorio y móvil.

El siguiente paso que nos vamos a encontrar será seleccionar el protocolo a nivel de transporte sobre el que va a funcionar OpenVPN, a saber, TCP o UDP. Por defecto PiVPN configurará el servidor en UDP, y así debemos dejarlo salvo que tengamos un motivo claro, pues TCP supone una sobrecarga importante frente a UDP a nivel de cabeceras de control.

También ofrece la posibilidad de cambiar el servidor de búsqueda DNS, más adelante veremos las opciones. Finalmente ofrece la posibilidad de cambiar la forma en que se configura el servidor a nivel de autenticación. PiVPN configura por defecto en este caso la opción que llaman «Características modernas» (Modern features). A saber, encriptación por certificado SSL y protocolo TLS para la autenticación.

Estas opciones son en principio más que válidas, y la pregunta que nos hace el instalador es si queremos modificar las opciones por defecto, así que pulsaremos «No«.

Hemos elegido, por defecto UDP, ahora toca indicarle el puerto en que se va a ofrecer el servicio OpenVPN, por defecto aparecerá 1194, pero aquí y por norma general para servicios abiertos a internet, sería muy recomendable cambiar el puerto por defecto, así que seleccionaremos, por ejemplo, el puerto 2194.

Una vez confirmado el puerto lo siguiente será seleccionar los DNS, por facilidad vamos a utilizar los DNS de Google, por ejemplo, aunque podíamos utilizar un servidor DNS local.

El siguiente punto es especialmente relevante, pues de aquí depende que nuestro servicio esté disponible a través de internet, si disponemos de IP pública fija en nuestra red podemos utilizarla como tal, si no, deberemos seleccionar DNS Entry y escribir el DNS, que previamente tendremos configurado (Recordemos al inicio: DynDNS o NoIP son buenos en esto).


Configuración de usuarios en PiVPN

Una vez reiniciada la RPi podemos hacer uso del comando pivpn, que por supuesto cuenta con el comando de ayuda «pivpn help», aunque la creación de usuarios está infinitamente simplificada con PiVPN, solo necesitamos introducir el siguiente comando:

$pivpn add

Al añadir el usuario nos solicitará el nombre del usuario (para nombrar el fichero de configuración, mayormente) y la duración, en días, del certificado generado y la contraseña del usuario. Introducimos los valores que consideremos oportunos y aceptamos (tecla ENTER). Esto generará automáticamente un archivo de configuración que contendrá los ajustes necesarios para conectar a nuestro servidor OpenVPN. Parece sencillo, pero por debajo esto genera una solicitud de certificado, la firma y compone el fichero de configuración con los certificados y las claves pública y privada correspondientes. Cuando termina el proceso, que es bastante rápido, nos indica que se ha generado un fichero con la configuración, es este fichero el que tendremos que pasarnos al equipo cliente. 

El fichero generado (en el caso que nos ocupa se ha llamado tutorial.ovpn) tendrá un formato similar al siguiente

Ahora llevamos este fichero al equipo cliente, para trasladarlo podéis hacerlo por correo electrónico, por SCP, moviéndolo a un pendrive, etc…

Una vez en el equipo cliente podríamos conectarnos ya a la VPN (lo ideal sería estar fuera de la red local, para que todo esto tenga sentido). Pero os voy a dejar un paso previo que os puede resultar de interés, y es que PiVPN genera los ficheros de los clientes de forma que TODO el tráfico por el que navegan pasa a través del túnel VPN, y así como esto puede ser interesante en algunos entornos (paises donde se censuran comunicaciones, motivos de privacidad), esto puede saturar el ancho de banda de la red local donde se encuentra el servidor. Para solucionar esto basta con editar el fichero «.ovpn» y añadir las siguientes lineas:


route-nopull 
route 10.8.0.0 255.255.0.0 
route 192.168.0.0 255.255.255.0


La primera linea indica al cliente que NO debe modificar su tabla de rutas, esto es, que siga utilizando su router por defecto para todas las redes y salida a internet.

La siguiente indica que al nuevo adaptador virtual (se crea un adaptador túnel) se le agregue la ruta 10.8.0.0 / 16, que es la que configura por defecto PiVPN.

La tercera indica al cliente que también conocerá la red 192.168.0.0 / 24 a través del túnel VPN. Ojo, en este paso debéis indicar el rango de vuestra red, los típicos suelen ser 192.168.0.0 y 192.168.1.0, pero tened en cuenta que si coinciden los rangos de la red local del cliente y la red donde se encuentra el servidor OpenVPN podemos entrar en conflicto, es aconsejable que sean distintos. 


Conexión a la VPN

Vamos a asumir que el cliente con que vamos a conectarnos utiliza un sistema operativo Windows. Para ello necesitaremos el cliente OpenVPN adecuado desde la web https://openvpn.net/community-downloads/.

Una vez instalado aparecerá el icono de OpenVPN GUI en el tray del sistema (abajo derecha, junto a la hora). Haremos click derecho y sólo tendremos que seleccionar Import files y seleccionar el fichero .ovpn que hemos traido del servidor.

Una vez cargado el fichero .ovpn al hacer click derecho el menú habrá cambiado, ofreciéndonos la opción de conectar a la red VPN. Introduciremos la clave que hemos introducido en el paso de «Configuración de usuarios en PiVPN» y automáticamente estaremos conectados a la VPN si todo ha ido bien.

En la ventana de OpenVPN GUI podremos ver que nos hemos conectado al túnel VPN y se ha asignado una IP de la red privada virtual al equipo cliente, aparecerá un mensaje del estilo:

Sun Nov 15 19:25:13 2020 MANAGEMENT: >STATE:1605464713,CONNECTED,SUCCESS,10.8.0.2,84.121.148.11,2000,,

Donde 10.8.0.2 representa la ip que ha sido asignada al equipo cliente. Podemos probar la conectividad haciendo un PING o TRACERT desde el equipo cliente:

Y si hemos configurado también la ruta hacia la red local del servidor OpenVPN seremos capaces de conectarnos, por ejemplo, a servidores de ficheros, impresoras de esa red, escritorios remotos detrás del router, etcétera. Echemos un vistazo, por ejemplo a mi configuración actual, en casa estoy en la red 192.168.1.0/24, y me conecto a una VPN remota cuya red está configurada en la subred 192.168.0.0/24, desde la primera red, gracias a la VPN y la configuración escrita en el fichero .ovpn somos capaces de alcanzar de forma local la red 192.168.0.0/24.

También podemos usar la VPN en el teléfono móvil, instalando en tu móvil un cliente de OpenVPN. En mi caso, tengo un dispositivo Android, así que descargué:

Instalar OpenVPN manualmente en Raspbian

Otra opción es instalar raspbian e instalar luego OpenVPN

Se debe decidir, asimismo, si se quiere instalar el servidor VPN directamente en Raspberry Pi (al cual se conecta un monitor, un ratón y un teclado) o mediante un cliente de SSH, un software que utiliza un protocolo Secure Shell para conectar remotamente con otro ordenador. El mantenimiento remoto del servidor con SSH es en la mayoría de los casos la variante más recomendada, ya que de este modo será más fácil acceder al servidor VPN desde un ordenador diferente.

Si finalmente te decantas por esta segunda opción, puedes recurrir a diversas alternativas muy populares para acceder y operar un Raspberry Pi remotamente, como son PuTTY, WinSCP (para Windows) u OpenSSH (para sistemas operativos Unix). Para conectar el software con el miniordenador se introduce la dirección IPv4 del Raspberry Pi en el cliente (aquel dispositivo desde el cual quieres acceder al Raspberry Pi) y se conectan entre sí. Tecleando la dirección 192.168.0.1 en el navegador se abre el menú del router de tu Raspberry Pi, donde se obtiene la dirección IP.


Instalación de OpenVPN y creación del archivo easy-rsa

Para instalar OpenVPN y Open SSL, software que cifra la conexión a Internet, se introduce este comando:

sudo apt-get install openvpn openssl

Una vez instalado OpenVPN, copiamos los scripts predefinidos easy-rsa en el directorio de configuración de OpenVPN —aquí es donde se guardan los certificados y las claves— con un comando que solo funciona con Raspbien Jessie (en el anterior sistema operativo Wheezy los archivos se encuentran en /usr/share/doc/openvpn/examples/easy-rsa/2.0):

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

Abre ahora el archivo /etc/openvpn/easy-rsa/vars en la consola utilizando esta orden con el fin de configurarlo:

sudo nano /etc/openvpn/easy-rsa/vars

Para cambiar los ajustes se sustituye la línea export EASY_RSA="`pwd`" por

export EASY_RSA="/etc/openvpn/easy-rsa"

En este archivo también se puede modificar la longitud de la clave. Con esto puedes determinar el nivel de seguridad del cifrado. Un Raspberry Pi 3 disfruta de rendimiento suficiente para poder procesar sin esfuerzo una longitud de clave de 2048 bits. En el modelo 2, en cambio, este cifrado ocasiona graves pérdidas de rendimiento, por lo que en este caso solo se podría utilizar un cifrado de 1024 bits (en función de cuál sea tu prioridad: la velocidad o el cifrado de la conexión). Un cifrado de 4096 bits, por otro lado, solo es útil en unos pocos casos. Para cambiar la longitud de la clave se ajusta el número de bits en la línea export KEY_SIZE=2048.

Ahora retrocedemos al archivo de configuración easy-rsa, donde necesitas tener derechos de superusuario para integrar los ajustes realizados en las variables del entorno. Para ello ejecutamos el script vars con el comando source. Finalmente, haz que el archivo de configuración que se ha generado sea accesible con un enlace simbólico bajo el nombre de openssl.cnf:

cd /etc/openvpn/easy-rsa sudo su source vars ln -s openssl-1.0.0.cnf openssl.cnf

Creación de los certificados y las claves para OpenVPN

Antes de crear nuevas claves para OpenVPN hay que asegurarse de que no hay ninguna antigua (ejemplos, etc.). Esto se hace con este comando:

./clean-all ./build-ca OpenVPN

Aquí se te pide que introduzcas diversos datos para identificar el certificado del servidor ante los clientes (como el código de país de dos letras), pero puedes confirmar la información por defecto por su escasa importancia en el funcionamiento pulsando la tecla Enter. Finalmente genera el certificado para el servidor (que la CA firmará para darle fiabilidad):

./build-key-server server

Introduce de nuevo el código nacional e ignora los demás campos. Para concluir confirma la creación de un certificado introduciendo “y” (yes) dos veces.

Creadas la CA y el certificado del servidor, se han de instalar los clientes VPN. Para ello tienes que crear un certificado y una clave para cada uno de los dispositivos con los cuales quieras acceder al servidor VPN. El proceso es semejante al que has seguido para la creación de un certificado y una clave para el servidor (introducir el código de país y confirmar dos veces). Puedes asignarle a cada dispositivo un nombre específico. En el ejemplo subsiguiente se han creado tres clientes: “laptop”, “smartphone” y “tablet”:

./build-key laptop ./build-key smartphone ./build-key tablet

Ahora, para proteger a cada uno de ellos con una contraseña, en lugar de los comandos anteriores se usarían los siguientes:

./build-key-pass laptop ./build-key-pass smartphone ./build-key-pass tablet

La creación de los certificados y las claves concluye con el comando para crear la clave DH (Diffie-Hellman) que usará el servidor para el intercambio de llaves:

./build-dh

Una vez finaliza este proceso, que podría durar unos minutos, se cierra sesión como usuario con permiso raíz con:

exit

Generación del archivo de configuración para el servidor OpenVPN

Se han creado las llaves para que el servidor y los clientes se reconozcan entre sí, confirmadas por la CA. Ahora nos adentramos en la configuración del servidor VPN.

Abre el archivo de configuración de OpenVPN:

sudo nano /etc/openvpn/openvpn.conf

Este archivo vacío se ha de completar con algunos comandos que se muestran a continuación:

dev tun proto udp port 1194

En el siguiente paso se crea un certificado raíz SSL/TLS (ca), un certificado digital (cert) y una clave digital (key) en el directorio easy-rsa. No olvides introducir el cifrado de bits correcto (1024, 2048, etc.).

ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dh2048.pem

Especifica ahora que el Raspberry Pi se utilice como servidor VPN. Nombra para ello su dirección IP, así como la máscara de red que se ha de asignar al VPN:

server 10.8.0.0 255.255.255.0

Con el comando redirect-gateway def1 bypass-dhcp se les indica a los clientes que todo el tráfico se redirige a través del túnel de la VPN. Puedes probar este ajuste si la seguridad es muy importante para ti, pero si surgen dificultades o la navegación se ralentiza, cancélalo. Las instrucciones que se enumeran aquí abajo, en cambio, se han de utilizar en cualquier caso, pues con ellas nombras los servidores DNS públicos con los cuales trabajará el servidor VPN. En las líneas siguientes se utiliza como ejemplo un servidor de IONOS (217.237.150.188) y uno de Google (8.8.8.8), aunque se puede sustituir por otro servidor DNS indicando la dirección IPv4. Con log-append /var/log/openvpn dispones que los eventos del servidor se escribirán en el fichero /var/log/openvpn.

push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 217.237.150.188" push "dhcp-option DNS 8.8.8.8" log-append /var/log/openvpn

Una vez configurado el servidor, podemos pasar a la configuración de los clientes VPN. Para ello creamos un fichero de configuración en el que se tiene que introducir la siguiente información:

persist-key persist-tun user nobody group nogroup status /var/log/openvpn-status.log verb 3 client-to-client comp-lzo

Por último con la orden client-to-client determinamos que los clientes VPN no solo reconozcan al servidor, sino también a otros clientes VPN y con comp-lzo se habilita la compresión LZO (que también se ha de indicar en el archivo de configuración del cliente).

Guardamos los cambios con Ctrl+0 y cerramos el editor con Ctrl+X.

Creación de un script para acceder a Internet con un cliente

Para acceder a la conexión a Internet de tu red local a través del túnel VPN vamos a crear una redirección. Para ello se crea el fichero /etc/init.d/rpivpn:

sudo nano /etc/init.d/rpivpn

Copiando los siguientes comentarios en el archivo se crea una cabecera para un archivo Linux-Init:

#! /bin/sh ### BEGIN INIT INFO # Provides: rpivpn # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: VPN initialization script ### END INIT INFO

A continuación activamos la redirección ip_forward escribiendo en el archivo un 1 de esta forma:

echo 'echo "1" > /proc/sys/net/ipv4/ip_forward' | sudo -s

Hecho esto, creamos una redirección para paquetes VPN con el filtro de paquetes iptables:

iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT

Ahora solo nos quedaría crear las órdenes necesarias que permitan a los clientes VPN acceder a la LAN y a Internet. Esto se logra con las siguientes líneas:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Guardamos y cerramos el archivo de nuevo.

Pero para que la redirección sea efectiva, se tienen que asignar los derechos correspondientes al script e instalarlo como archivo Init:

sudo chmod +x /etc/init.d/rpivpn sudo update-rc.d rpivpn defaults

Ejecutamos el script y reiniciamos el servidor OpenVPN:

sudo /etc/init.d/rpivpn sudo /etc/init.d/openvpn restart

Cierre de la configuración de los clientes

En el último paso reunimos los certificados y las claves de cada cliente en un paquete propio. Para ello necesitamos de nuevo derechos de superusuario. Una vez asignados, abrimos la carpeta /etc/openvpn/easy-rsa/keys/ y depositamos en ella el archivo de configuración de los clientes. Con el siguiente comando abrimos el archivo del cliente laptop. Todos los clientes se configuran de la misma forma, lo único que hay que cambiar es el nombre del dispositivo:

sudo su cd /etc/openvpn/easy-rsa/keys nano laptop.ovpn

En el archivo .ovpn del cliente se añade esto:

dev tun client proto udp remote x.x.x.x 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert laptop.crt key laptop.key comp-lzo verb 3

Con todo, hay que ajustar este contenido. En la cuarta línea sustituimos x.x.x.x por la dirección IP del proveedor del DDNS, aunque también puedes incluir aquí una dirección IP pública estática si dispones de una; le sigue el puerto en el cual el servidor VPN ha de estar disponible.

En la tercera y cuarta por el final escribimos el nombre del cliente (aquí “laptop”). Hechos los cambios, guardamos y cerramos con los comandos conocidos.

Por último, comprime el archivo de configuración, junto con sus certificados y claves, en un archivo zip. En caso de que aún no hayas instalado en el Raspberry Pi un paquete de compresión, puedes hacerlo con la siguiente orden:

apt-get install zip

Para crear el archivo comprimido utilizamos el comando que viene a continuación (con cuidado de utilizar siempre el nombre de cliente correcto):

zip /home/pi/raspberry_laptop.zip ca.crt laptop.crt laptop.key laptop.ovpn

Ahora solo quedaría configurar los derechos de los archivos y finalizamos con exit:

chown pi:pi /home/pi/raspberry_laptop.zip exit

Este archivo comprimido se transfiere desde el Raspberry Pi al cliente con un programa SCP o SFTP y se configura el cliente en el dispositivo. Este estaría ahora ya preparado para acceder a la red local conectada con el cliente y a su conexión a Internet desde cualquier punto de acceso externo.


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.