Compare commits

..

No commits in common. "9971993a00b357547b2c4cd47846c6d57a82606b" and "f31d9be677908e43731eba89acf84fa48464d924" have entirely different histories.

View File

@ -2,7 +2,7 @@
title: OpenVPN - Guía de instalación
description: Guía de instalación utilizada durante la realización de la práctica
published: true
date: 2022-06-01T09:43:43.461Z
date: 2022-06-01T00:54:59.608Z
tags: vpn, servidor
editor: markdown
dateCreated: 2022-05-31T21:04:15.280Z
@ -200,7 +200,7 @@ scp pki/ca.crt ovpn@ovpn.bastionado.es:/tmp
scp pki/issued/ovpn.crt ovpn@ovpn.bastionado.es:/tmp
```
## Fin día 1
# Fin día 1
---
# Panel Títulos (⌘1)
@ -1064,11 +1064,6 @@ clear && cowsay -W 76 -f ovpn 'Si todo esto es correcto podemos habilitar el ser
sudo systemctl enable openvpn@tor
```
```bash
clear && cowsay -W 76 -f ovpn 'Modificamos la configuración y script de generación de configuraciones cliente para la variante TOR.'
```
```bash
nano ~/client-configs/base-tor.conf # vim ~/client-configs/base-tor.conf
```
@ -1117,270 +1112,3 @@ sudo ./make_config_tor.sh client3
sudo ./make_config_tor.sh client4
```
# Panel Títulos (⌘1)
```bash
clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 130 -f ansi-shadow 'SERVIDOR WEB' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 240 -f ansi-shadow 'PARA ACCESO CLIENTE' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear
```
```bash
clear && cowsay -W 240 -f ovpn 'Nuestra PKI y nuestro servidor VPN están listos para recibir a clientes, sin embargo, para que esto ocurra los clientes deberían recibir sus ficheros de configuración.
Para esto, levantaremos un pequeño servidor Web que ponga a disposición de los clientes, mediante una autenticación básica, los ficheros de configuración.'
```
# Panel oVPN (⌘4)
```bash
clear && cowsay -W 76 -f ovpn 'Utilizamos el repositorio del desarrollador de Debian Ondřej Surý para tener una versión más actualizada y compatible de NginX que la que incorpora Debian por defecto.'
```
```bash
curl -sSL https://packages.sury.org/nginx/README.txt | sudo bash -x
```
```bash
clear && cowsay -W 76 -f ovpn 'Ahora ya podemos actualizar la información de repositorios.'
```
```bash
sudo apt update
```
```bash
clear && cowsay -W 76 -f ovpn 'Y proceder a instalar todos los paquetes de NginX. Instalaremos adicionalmente `apache2-utils` para poder generar ficheros de autenticación básica `htpasswd`.'
```
```bash
sudo apt install -y nginx-core nginx-common nginx nginx-full apache2-utils
```
```bash
clear && cowsay -W 76 -f ovpn 'Generaremos ahora los ficheros de autenticación básica `htpasswd`. Cada cliente dispondrá de un usuario y clave únicos.'
```
```bash
cd /var/www
sudo htpasswd -c .htpasswd1 client1
sudo htpasswd -c .htpasswd2 client2
sudo htpasswd -c .htpasswd3 client3
sudo htpasswd -c .htpasswd4 client4
```
```bash
clear && cowsay -W 76 -f ovpn 'Es el momento de configurar NginX. Modificamos el fichero de configuración vaciándolo primero.'
```
```bash
sudo dd if=/dev/null of=/etc/nginx/nginx.conf && sudo vim /etc/nginx/nginx.conf
```
```bash
clear && cowsay -W 76 -f ovpn 'Establecemos unas opciones de configuración básicas, ocultando la información de versión de NginX.'
```
```bash
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
```
```bash
clear && cowsay -W 76 -f ovpn 'Ahora configuraremos la aplicación web. Modificamos el servidor por defecto vaciándolo primero.'
```
```bash
sudo dd if=/dev/null of=/etc/nginx/sites-available/default && sudo vim /etc/nginx/sites-available/default
```
```bash
clear && cowsay -W 76 -f ovpn 'Utilizaremos una configuración básica escuchando por HTTP ya que, en realidad, este NginX no recibirá las solicitudes directas de internet, si no que éstas vendrán redireccionadas desde otro NginX que proporciona balanceo de carga y la seguridad necesaria para poder servir una aplicación web con garantías. Aquí es donde estableceremos la autenticación básica en las rutas de descarga de certificados de los diferentes clientes.'
```
```bash
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html;
server_name _;
location /download/client1 {
try_files $uri $uri/ =404;
auth_basic "Client Area";
auth_basic_user_file /var/www/.htpasswd1;
}
location /download/client2 {
try_files $uri $uri/ =404;
auth_basic "Client Area";
auth_basic_user_file /var/www/.htpasswd2;
}
location /download/client3 {
try_files $uri $uri/ =404;
auth_basic "Client Area";
auth_basic_user_file /var/www/.htpasswd2;
}
location /download/client4 {
try_files $uri $uri/ =404;
auth_basic "Client Area";
auth_basic_user_file /var/www/.htpasswd4;
}
}
```
```bash
clear && cowsay -W 76 -f ovpn 'Con la configuración de NginX ya preparada tenemos que desplegar los ficheros de nuestra aplicación web. Para ello, primero descargaremos estos ficheros.'
```
```bash
sudo wget -P /tmp https://wiki.bastionado.es/assets/files/openvpn-server/bastionado-vpn.tar
```
```bash
clear && cowsay -W 76 -f ovpn 'Descomprimimos los ficheros de la aplicación en el directorio desde el que la serviremos.'
```
```bash
sudo tar -xvf /tmp/bastionado-vpn.tar -C /var/www/html
```
```bash
clear && cowsay -W 76 -f ovpn 'Y ahora copiaremos todas las configuraciones cliente a las diferentes rutas de servicio.'
```
```bash
sudo cp /home/ovpn/client-configs/files/bastionado-client1.ovpn /var/www/html/download/client1
sudo cp /home/ovpn/client-configs/files/bastionado-client2.ovpn /var/www/html/download/client2
sudo cp /home/ovpn/client-configs/files/bastionado-client3.ovpn /var/www/html/download/client3
sudo cp /home/ovpn/client-configs/files/bastionado-client4.ovpn /var/www/html/download/client4
sudo cp /home/ovpn/client-configs/files/bastionado-tor-client1.ovpn /var/www/html/download/client1
sudo cp /home/ovpn/client-configs/files/bastionado-tor-client2.ovpn /var/www/html/download/client2
sudo cp /home/ovpn/client-configs/files/bastionado-tor-client3.ovpn /var/www/html/download/client3
sudo cp /home/ovpn/client-configs/files/bastionado-tor-client4.ovpn /var/www/html/download/client4
```
```bash
clear && cowsay -W 76 -f ovpn 'Lo siguiente que debemos hacer es otorgar la posesión de los ficheros al usuario y grupo que utilizará NginX y establecer los permisos correctos.'
```
```bash
sudo chown -R www-data:www-data /var/www
sudo find /var/www -type f -print0|sudo xargs -0 chmod 660
sudo find /var/www -type d -print0|sudo xargs -0 chmod 770
```
```bash
clear && cowsay -W 76 -f ovpn 'Comprobaremos que toda la configuración de NginX es correcta y después arrancaremos y habilitaremos el inicio automático del servicio.'
```
```bash
sudo nginx -T
sudo systemctl restart nginx.service && sudo systemctl status nginx.service
sudo systemctl enable nginx.service
```
# Panel Títulos (⌘1)
## Cliente en Windows de Alberto
```bash
clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 130 -f ansi-shadow 'PROBANDO' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'OPEN VPN' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear
```
```bash
clear && cowsay -W 240 -f ovpn 'Ahora que hemos terminado completamente la configuración y que todo está operativo es el momento de ver si todo funciona correctamente. Para ello, veamos como un cliente Windows descarga su configuración conecta correctamente a la VPN.'
```
# Panel oVPN (⌘4)
```bash
clear && cowsay -W 76 -f ovpn 'Mientras el cliente está conectando a la VPN podemos monitorizar nuestro servicio.'
```
```bash
sudo tail -f /var/log/openvpn/openvpn.log
```
# Panel Títulos (⌘1)
## Cliente Android
```bash
clear && cowsay -W 240 -f ovpn 'OpenVPN es multiplataforma, por lo que otros clientes, como por ejemplo Android, también pueden conectar. En este caso, además, utilizaremos la VPN TOR y comprobaremos como nuestra dirección IP de salida está en Estados Unidos y podemos acceder a dominios .onion.'
```
# Panel oVPN (⌘4)
```bash
clear && cowsay -W 76 -f ovpn 'De nuevo, mientras el cliente está conectando a la VPN podemos monitorizar nuestro servicio.'
```
```bash
sudo tail -f /var/log/openvpn/openvpn-tor.log
```
# Panel Títulos (⌘1)
## Cliente MacOS
```bash
clear && cowsay -W 240 -f ovpn 'La VPN TOR también puede utilizarse sin problemas en plataformas de escritorio como MacOS.'
```
# Panel Títulos (⌘1)
## Cliente iOS
```bash
clear && cowsay -W 240 -f ovpn 'Si recordamos nuestros pasos anteriores anulamos el certificado del cliente 4 metiéndolo en nuestra Lista de revocación de certificados. Veamos qué ocurre cuando el cliente intenta conectar al servicio.'
```
# Panel oVPN (⌘4)
```bash
clear && cowsay -W 76 -f ovpn 'En la monitorización de nuestro servicio podemos observar como se registra, durante el saludo entre servidor y cliente, que su certificado está en la CRL y por lo tanto el servidor OpenVPN rechaza la conexión, lo que se traduce en que el cliente se queda indefinidamente intentando conectar sin éxito.'
```
```bash
sudo tail -f /var/log/openvpn/openvpn-tor.log
```
# Panel Títulos (⌘1)
```bash
clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 190 -f ansi-shadow 'THE END' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 5 && unimatrix -f -n -s 96 -w && clear
```