Herramientas de usuario

Herramientas del sitio


proyectos:multivpnbuster

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proyectos:multivpnbuster [2020/05/18 07:09] gatoproyectos:multivpnbuster [2022/05/31 00:41] (actual) – [Fuentes] manuel.floresv
Línea 1: Línea 1:
 ====== Varios servicios de VPN en un solo servidor Buster ====== ====== Varios servicios de VPN en un solo servidor Buster ======
  
-Instalar herramientas+===== Instalar herramientas ===== 
 <code> <code>
-apt install openvpn easyrsa+apt install openvpn easy-rsa
 </code> </code>
 +===== Configurar la red a Pasarela =====
 Ajustar el reenvío de paquetes Ajustar el reenvío de paquetes
 <code> <code>
Línea 13: Línea 15:
 net.ipv4.ip_forward=1 net.ipv4.ip_forward=1
 </code> </code>
 +===== Configuración de VPN-1 =====
 +==== Servicio 1 con red 10.19.80.0/24 en puerto 1194====
 +
 Crear espacio de trabajo para red01 Crear espacio de trabajo para red01
 <code> <code>
-mkdir /etc/openvpn/server/red01 +mkdir /var/log/openvpn 
-mkdir /etc/openvpn/client/red01+mkdir -p /etc/openvpn/server/red01/clientes/generados
 </code> </code>
 Preparar la autoridad certificadora de red01 Preparar la autoridad certificadora de red01
 <code> <code>
-cp -r /usr/share/easy-rsa/ /etc/openvpn/server/red01/autoridad+make-cadir autoridad
 cd /etc/openvpn/server/red01/autoridad cd /etc/openvpn/server/red01/autoridad
-cp vars.example vars 
 </code> </code>
-Hay que editar las variables para identificar la autoridad de la priemra red+Hay que editar las variables para identificar la autoridad de la primera red
 <code> <code>
 nano vars nano vars
Línea 57: Línea 61:
 Luego se generan los certificados para este primer servicio, primero la solicitud de firma, pedirá un nombre para el servidor que solicita pero este fue pasado por medio del comando, solo basta darle **Enter** Luego se generan los certificados para este primer servicio, primero la solicitud de firma, pedirá un nombre para el servidor que solicita pero este fue pasado por medio del comando, solo basta darle **Enter**
 <code> <code>
-./easyrsa gen-req "ChonteSV_vpn_1" server nopass +./easyrsa build-server-full "ChonteSV_vpn_1" nopass
-</code> +
-Luego habrá que firmar la solicitud del servidor, pedirá una confirmación de la firma, hay que introducir **yes** y dar **Enter** +
-<code> +
-./easyrsa sign-req server "ChonteSV_vpn_1"+
 </code> </code>
 Se crea una llave de intercambio Diffie-Hellman Se crea una llave de intercambio Diffie-Hellman
Línea 69: Línea 69:
 Y también una firma HMAC Y también una firma HMAC
 <code> <code>
-openvpn --genkey --secret ta.key+openvpn --genkey --genkey secret ta.key
 </code> </code>
 Lo siguiente es juntar todo lo del servidor ordenadamente Lo siguiente es juntar todo lo del servidor ordenadamente
Línea 79: Línea 79:
 cp pki/dh.pem /etc/openvpn/server/red01/ChonteSV_vpn_1-dh.pem cp pki/dh.pem /etc/openvpn/server/red01/ChonteSV_vpn_1-dh.pem
 </code> </code>
 +
 +Después de tanto trabajo para los archivos previos necesarios para el servidor, hay que crear la configuración del primer servicio
 +<code>
 +cd /etc/openvpn
 +nano servicio1.conf
 +</code>
 +Y le llenamos con la siguiente configuración
 +<code bash>
 +port 1194
 +proto tcp
 +dev tun
 +# La autoridad del servicio
 +ca server/red01/ChonteSV_vpn_1-ca.crt
 +cert server/red01/ChonteSV_vpn_1.crt
 +# Los chunches del servidor
 +key server/red01/ChonteSV_vpn_1.key
 +# La seguridad extra
 +dh server/red01/ChonteSV_vpn_1-dh.pem
 +tls-auth  server/red01/ChonteSV_vpn_1-hmac-ta.key 0
 +# La red privada por lo general la 10.x.x
 +server 10.19.80.0 255.255.255.0
 +push "redirect-gateway def1 bypass-dhcp"
 +push "dhcp-option DNS 208.67.222.222"
 +push "dhcp-option DNS 208.67.220.220"
 +# Si se desar usar ip fija por cliente
 +;topology subnet
 +# Y para colocar las configuraciones específicas por cliente
 +# habrá que crear el subdirectorio y crear un archivo para cada uno
 +# que deberá contener algo como : ifconfig-push 10.19.80.10 255.255.255.0
 +;client-config-dir server/red01/clientes/fijos/
 +# Algunos parámetros para el cliente
 +keepalive 10 120
 +cipher AES-256-GCM
 +auth SHA256
 +user nobody
 +group nogroup
 +persist-key
 +persist-tun
 +client-to-client
 +comp-lzo adaptive
 +# Esto se descomenta si se desa usar
 +# un certificado para muchos clientes
 +# no es recomendado pero ahi está
 +;duplicate-cn
 +# Los venditos logs
 +status      /var/log/openvpn/openvpn-status-servicio1.log
 +log         /var/log/openvpn/openvpn-servicio1.log
 +log-append  /var/log/openvpn/openvpn-servicio1.log
 +verb 4
 +explicit-exit-notify 0
 +</code>
 +Y podemos arrancar el primer servicio preparado
 +<code>
 +systemctl start openvpn@servicio1
 +systemctl status openvpn@servicio1
 +</code>
 +
 +==== Generar Certificados de Clientes ====
 Para cada cliente que se deba conectar hay que crear certificados, lo cual puede ser incomodo pero es necesario por seguridad, pero depende de la configuración del servicio se puede usar un solo certificado para todos equipos que se conectarán... esto depende mas de sus escenarios, en este caso se creará para un cliente llamado **chonte001_vpn_1** Para cada cliente que se deba conectar hay que crear certificados, lo cual puede ser incomodo pero es necesario por seguridad, pero depende de la configuración del servicio se puede usar un solo certificado para todos equipos que se conectarán... esto depende mas de sus escenarios, en este caso se creará para un cliente llamado **chonte001_vpn_1**
 <code> <code>
 ./easyrsa build-client-full "chonte001_vpn_1" nopass ./easyrsa build-client-full "chonte001_vpn_1" nopass
 </code> </code>
 +Y se pone todo en orden del para el/los cliente/s
 +<code>
 +cp pki/issued/chonte001_vpn_1.crt /etc/openvpn/server/red01/clientes/
 +cp pki/private/chonte001_vpn_1.key /etc/openvpn/server/red01/clientes/
 +</code>
 +
 +
 +Luego se prepara el archivo a compartir con los clientes, para lo cual y por facilidades futuras tendremos un archivo base para completar
 +<code>
 +cd /etc/openvpn/server/red01/
 +nano clientes/clientered01.opvn
 +</code>
 +Se le coloca el siguiente contenido, suponiendo que se tiene el dominio **chonte.sv**
 +<code>
 +client
 +dev tun
 +proto tcp
 +remote chonte.sv 1194
 +resolv-retry infinite
 +nobind
 +user nobody
 +group nogroup
 +persist-key
 +persist-tun
 +tls-version-min 1.0
 +remote-cert-tls server
 +cipher AES-256-GCM
 +auth SHA256
 +comp-lzo adaptive
 +key-direction 1
 +mute-replay-warnings
 +verb 4
 +</code>
 +Como se ha generado un certificado y llave para un usuario, se pondrá todo en un solo archivo, lo que conviene tener en un script
 +<code>
 +nano crearOvpnCliente.sh
 +</code>
 +Y llevará estas lineas
 +<code>
 +#!/bin/bash
 +SERVICIO="red01"
 +DIRECTORIO="/etc/openvpn/server/${SERVICIO}"
 +SERVIDOR="ChonteSV_vpn_1"
 +if  [ $# -ne 1 ]; then
 +  #Avisar que se rquieren mas parámetros
 +  echo ""
 +  echo "USO: $0 <nombre del cliente>"
 +  echo ""
 +  echo "    ej:   $0 \"${SERVICIO}-gente-001\""
 +else
 +  CLIENTE="$1"
 +  # Esto lo ajustaré algún día
 +  # cd "${DIRECTORIO}/autoridad/"
 +  # ./easyrsa build-client-full "${CLIENTE}" nopass
 +  # cp "pki/issued/${CLIENTE}.crt" "${DIRECTORIO}/clientes/"
 +  # cp "pki/private/${CLIENTE}.key" "${DIRECTORIO}/clientes/"
 +  cat  "${DIRECTORIO}/clientes/cliente${SERVICIO}.opvn" >  "/tmp/${CLIENTE}.ovpn"
 +  echo '<ca>'                                  >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/${SERVIDOR}-ca.crt"      >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</ca>'                                 >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<cert>'                                >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/clientes/${CLIENTE}.crt" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</cert>'                               >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<key>'                                 >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/clientes/${CLIENTE}.key" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</key>'                                >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<tls-auth>'                            >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/${SERVIDOR}-hmac-ta.key" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</tls-auth>'                           >> "/tmp/${CLIENTE}.ovpn"
 +  mv "/tmp/${CLIENTE}.ovpn" "${DIRECTORIO}/clientes/generados/"
 +  ls -lhs "${DIRECTORIO}/clientes/generados/${CLIENTE}.ovpn"
 +fi
 +</code>
 +Entonces podremos crear los archivos **.ovpn** que se necesiten, en este ejercicio se creo uno
 +<code>
 +chmod 700 crearOvpnCliente.sh
 +./crearOvpnCliente.sh chonte001_vpn_1
 +</code>
 +Dejando el archivo a compartir con un cliente en **/etc/openvpn/server/red01/clientes/generados/**
 +<code>
 +ls -l /etc/openvpn/server/red01/clientes/generados/chonte001_vpn_1.ovpn
 +</code>
 +El servicio ya está funcionando y basta que en el cliente pueda importarse el archivo, pero si se desea que el servidor haga enrutamiento y enmascaramiento de las peticiones de red es bueno crear un archivo para la reglas de iptables
 +<code>
 +nano ruteo.sh
 +</code>
 +Se le coloca le contenido siguiente suponiendo que la tarjeta que da salida a internet es la **eth0**
 +<code>
 +#!/bin/bash
 +iptables -t nat -A POSTROUTING -s 10.19.80.0/24 -o eth0 -j MASQUERADE
 +iptables -A INPUT -i tun+ -j ACCEPT
 +iptables -A FORWARD -i tun+ -j ACCEPT
 +</code>
 +Este script debería correrse cada vez que sea necesario, o utilizar otra herramienta como ufw para automatizar el asunto
 +<code>
 +chmod 700 ruteo.sh
 +./ruteo.sh
 +</code>
 +
 +===== Configuración de VPN-2 =====
 +
 +==== Servicio 2 con red 10.19.90.0/24 en puerto 1195====
 +
 +Todo es repetir lo echo en el servicio anterior pero para una red diferente, primero hay que crear el espacio de trabajo para red02
 +<code>
 +mkdir -p /etc/openvpn/server/red02/clientes/generados
 +</code>
 +Preparar la autoridad certificadora de red02
 +<code>
 +cp -r /usr/share/easy-rsa/ /etc/openvpn/server/red02/autoridad
 +cd /etc/openvpn/server/red02/autoridad
 +cp vars.example vars
 +</code>
 +Hay que editar las variables para identificar la autoridad de la segunda red
 +<code>
 +nano vars
 +</code>
 +Encontrar donde están estas variables
 +<code>
 +#set_var EASYRSA_REQ_COUNTRY    "US"
 +#set_var EASYRSA_REQ_PROVINCE   "California"
 +#set_var EASYRSA_REQ_CITY       "San Francisco"
 +#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
 +#set_var EASYRSA_REQ_EMAIL      "me@example.net"
 +#set_var EASYRSA_REQ_OU         "My Organizational Unit"
 +</code>
 +Habrá que descomentarlas y modificarlas a su gusto
 +<code>
 +set_var EASYRSA_REQ_COUNTRY     "SV"
 +set_var EASYRSA_REQ_PROVINCE    "SanSalvador"
 +set_var EASYRSA_REQ_CITY        "San Salvador"
 +set_var EASYRSA_REQ_ORG         "ChonteSV"
 +set_var EASYRSA_REQ_EMAIL       "chirote@chonte.sv"
 +set_var EASYRSA_REQ_OU          "vpn 02"
 +</code>
 +Se inicializa la autoridad certificadora
 +<code>
 +./easyrsa init-pki
 +./easyrsa build-ca nopass
 +</code>
 +Preguntará que nombre desea para la autoridad, pude ponerle lo que se le ocurra, en este ejemplo **ChonteSV_vpn_2**
 +<code>
 +Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ChonteSV_vpn_2
 +</code>
 +Luego se generan los certificados para este primer servicio, primero la solicitud de firma, pedirá un nombre para el servidor que solicita pero este fue pasado por medio del comando, solo basta darle **Enter**
 +<code>
 +./easyrsa build-server-full "ChonteSV_vpn_2" nopass
 +</code>
 +Se crea una llave de intercambio Diffie-Hellman
 +<code>
 +./easyrsa gen-dh
 +</code>
 +Y también una firma HMAC
 +<code>
 +openvpn --genkey --secret ta.key
 +</code>
 +Lo siguiente es juntar todo lo del servidor ordenadamente
 +<code>
 +cp ta.key /etc/openvpn/server/red02/ChonteSV_vpn_2-hmac-ta.key
 +cp pki/ca.crt /etc/openvpn/server/red02/ChonteSV_vpn_2-ca.crt
 +cp pki/private/ChonteSV_vpn_2.key /etc/openvpn/server/red02/
 +cp pki/issued/ChonteSV_vpn_2.crt /etc/openvpn/server/red02/
 +cp pki/dh.pem /etc/openvpn/server/red02/ChonteSV_vpn_2-dh.pem
 +</code>
 +Para cada cliente que se deba conectar hay que crear certificados, lo cual puede ser incomodo pero es necesario por seguridad, pero depende de la configuración del servicio se puede usar un solo certificado para todos equipos que se conectarán... esto depende mas de sus escenarios, en este caso se creará para un cliente llamado **chonte001_vpn_2**
 +<code>
 +./easyrsa build-client-full "chonte001_vpn_2" nopass
 +</code>
 +Y se pone todo en orden del para el/los cliente/s
 +<code>
 +cp pki/issued/chonte001_vpn_2.crt /etc/openvpn/server/red02/clientes/
 +cp pki/private/chonte001_vpn_2.key /etc/openvpn/server/red02/clientes/
 +</code>
 +Después de tanto trabajo para los archivos previos necesarios para el servidor, hay que crear la configuración del segundo servicio
 +<code>
 +cd /etc/openvpn
 +nano servicio2.conf
 +</code>
 +Y le llenamos con la siguiente configuración
 +<code>
 +port 1195
 +proto tcp
 +dev tun
 +# La autoridad del servicio
 +ca server/red02/ChonteSV_vpn_2-ca.crt
 +cert server/red02/ChonteSV_vpn_2.crt
 +# Los chunches del servidor
 +key server/red02/ChonteSV_vpn_2.key
 +# La seguridad extra
 +dh server/red02/ChonteSV_vpn_2-dh.pem
 +tls-auth  server/red02/ChonteSV_vpn_2-hmac-ta.key 0
 +# La red privada por lo general la 10.x.x
 +server 10.19.90.0 255.255.255.0
 +push "redirect-gateway def1 bypass-dhcp"
 +push "dhcp-option DNS 208.67.222.222"
 +push "dhcp-option DNS 208.67.220.220"
 +# Si se desar usar ip fija por cliente
 +;topology subnet
 +# Y para colocar las configuraciones específicas por cliente
 +# habrá que crear el subdirectorio y crear un archivo para cada uno
 +# que deberá contener algo como : ifconfig-push 10.19.90.10 255.255.255.0
 +;client-config-dir server/red02/clientes/fijos/
 +# Algunos parámetros para el cliente
 +keepalive 10 120
 +cipher AES-256-GCM
 +auth SHA256
 +user nobody
 +group nogroup
 +persist-key
 +persist-tun
 +client-to-client
 +comp-lzo adaptive
 +# Esto se descomenta si se desa usar
 +# un certificado para muchos clientes
 +# no es recomendado pero ahi está
 +;duplicate-cn
 +# Los venditos logs
 +status      /var/log/openvpn/openvpn-status-servicio2.log
 +log         /var/log/openvpn/openvpn-servicio2.log
 +log-append  /var/log/openvpn/openvpn-servicio2.log
 +verb 4
 +explicit-exit-notify 0
 +</code>
 +Y podemos arrancar el primer servicio preparado
 +<code>
 +systemctl start openvpn@servicio2
 +systemctl status openvpn@servicio2
 +</code>
 +==== Generar Certificados de Clientes ====
 +Luego se prepara el archivo a compartir con los clientes, para lo cual y por facilidades futuras tendremos un archivo base para completar
 +<code>
 +cd /etc/openvpn/server/red02/
 +nano clientes/clientered02.opvn
 +</code>
 +Se le coloca el siguiente contenido, suponiendo que se tiene el dominio **chonte.sv**
 +<code>
 +client
 +dev tun
 +proto tcp
 +remote chonte.sv 1195
 +resolv-retry infinite
 +nobind
 +user nobody
 +group nogroup
 +persist-key
 +persist-tun
 +tls-version-min 1.0
 +remote-cert-tls server
 +cipher AES-256-GCM
 +auth SHA256
 +comp-lzo adaptive
 +key-direction 1
 +mute-replay-warnings
 +verb 4
 +</code>
 +Como se ha generado un certificado y llave para un usuario, se pondrá todo en un solo archivo, lo que conviene tener en un script
 +<code>
 +nano crearOvpnCliente.sh
 +</code>
 +Y llevará estas lineas
 +<code>
 +#!/bin/bash
 +SERVICIO="red02"
 +DIRECTORIO="/etc/openvpn/server/${SERVICIO}"
 +SERVIDOR="ChonteSV_vpn_2"
 +if  [ $# -ne 1 ]; then
 +  #Avisar que se rquieren mas parámetros
 +  echo ""
 +  echo "USO: $0 <nombre del cliente>"
 +  echo ""
 +  echo "    ej:   $0 \"${SERVICIO}-gente-001\""
 +else
 +  CLIENTE="$1"
 +  # Esto lo ajustaré algún día
 +  # cd "${DIRECTORIO}/autoridad/"
 +  # ./easyrsa build-client-full "${CLIENTE}" nopass
 +  # cp "pki/issued/${CLIENTE}.crt" "${DIRECTORIO}/clientes/"
 +  # cp "pki/private/${CLIENTE}.key" "${DIRECTORIO}/clientes/"
 +  cat  "${DIRECTORIO}/clientes/cliente${SERVICIO}.opvn" >  "/tmp/${CLIENTE}.ovpn"
 +  echo '<ca>'                                  >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/${SERVIDOR}-ca.crt"      >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</ca>'                                 >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<cert>'                                >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/clientes/${CLIENTE}.crt" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</cert>'                               >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<key>'                                 >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/clientes/${CLIENTE}.key" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</key>'                                >> "/tmp/${CLIENTE}.ovpn"
 +  echo '<tls-auth>'                            >> "/tmp/${CLIENTE}.ovpn"
 +  cat  "${DIRECTORIO}/${SERVIDOR}-hmac-ta.key" >> "/tmp/${CLIENTE}.ovpn"
 +  echo '</tls-auth>'                           >> "/tmp/${CLIENTE}.ovpn"
 +  mv "/tmp/${CLIENTE}.ovpn" "${DIRECTORIO}/clientes/generados/"
 +  ls -lhs "${DIRECTORIO}/clientes/generados/${CLIENTE}.ovpn"
 +fi
 +</code>
 +Entonces podremos crear los archivos **.ovpn** que se necesiten, en este ejercicio se creo uno
 +<code>
 +chmod 700 crearOvpnCliente.sh
 +./crearOvpnCliente.sh chonte001_vpn_2
 +</code>
 +Dejando el archivo a compartir con un cliente en **/etc/openvpn/server/red02/clientes/generados/**
 +<code>
 +ls -l /etc/openvpn/server/red02/clientes/generados/chonte001_vpn_2.ovpn
 +</code>
 +El servicio ya está funcionando y basta que en el cliente pueda importarse el archivo, pero si se desea que el servidor haga enrutamiento y enmascaramiento de las peticiones de red es bueno crear un archivo para la reglas de iptables
 +<code>
 +nano ruteo.sh
 +</code>
 +Se le coloca le contenido siguiente suponiendo que la tarjeta que da salida a internet es la **eth0**
 +<code>
 +#!/bin/bash
 +iptables -t nat -A POSTROUTING -s 10.19.90.0/24 -o eth0 -j MASQUERADE
 +iptables -A INPUT -i tun+ -j ACCEPT
 +iptables -A FORWARD -i tun+ -j ACCEPT
 +</code>
 +Este script debería correrse cada vez que sea necesario, o utilizar otra herramienta como ufw para automatizar el asunto
 +<code>
 +chmod 700 ruteo.sh
 +./ruteo.sh
 +</code>
 +
 +===== Pendientes =====
 +  * Mejorar el script para crear los clientes
 +  * Añadir como se revocan clientes (para banearlos)
 +  * Lo que se venga de la creatividad
 +
 +===== Fuentes =====
 +  * https://www.howtoforge.com/how-to-install-and-configure-openvpn-server-on-debian-10/
 +  * https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-10
 +  * https://wiki.archlinux.org/index.php/Easy-RSA
 +  * https://wiki.gentoo.org/wiki/Create_a_Public_Key_Infrastructure_Using_the_easy-rsa_Scripts
 +  * https://www.hugeserver.com/kb/openvpn-multiple-ports/
 +  * http://systemadmin.es/2013/01/mismo-certificado-servidor-openvpn
 +
 +
 +
proyectos/multivpnbuster.1589785780.txt.gz · Última modificación: por gato