From b14cd676ba4b3c89e0bffa1523f6bb95adcfa666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Y=C3=A1=C3=B1ez=20Jim=C3=A9nez?= Date: Wed, 1 Jun 2022 00:39:18 +0000 Subject: [PATCH] docs: update vpn/openvpn/guide --- vpn/openvpn/guide.md | 205 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 199 insertions(+), 6 deletions(-) diff --git a/vpn/openvpn/guide.md b/vpn/openvpn/guide.md index 42e8aa2..272410b 100644 --- a/vpn/openvpn/guide.md +++ b/vpn/openvpn/guide.md @@ -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-01T00:17:28.154Z +date: 2022-06-01T00:39:14.939Z tags: vpn, servidor editor: markdown dateCreated: 2022-05-31T21:04:15.280Z @@ -876,18 +876,211 @@ clear && cowsay -W 76 -f ovpn 'Solo nos queda reiniciar nuestro servidor y compr sudo systemctl restart openvpn@server && sudo systemctl status openvpn@server ``` +# Panel Títulos (⌘1) + +```bash +clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 130 -f ansi-shadow 'OPENVPN' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 200 -f ansi-shadow 'TOR' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear +``` + +# Panel oVPN (⌘4) + +```bash +clear && cowsay -W 76 -f ovpn 'Ya que todo el tráfico de los clientes se enruta a través de la VPN, ¿Y si les damos la posibilidad de que puedan conectar a una VPN que además enrute todo su tráfico a través de nodos TOR? Sus comunicaciones quederán ocultas y podremos escoger el nodo de salida, haciendo que tanto la dirección de los clientes como del servidor queden ocultas. Para ello, comenzaremos instalando TOR.' +``` + +```bash +sudo apt install tor -y +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Editaremos el fichero de configuración de TOR.' +``` + +```bash +sudo nano /etc/tor/torrc # sudo vim /etc/tor/torrc +``` + +```bash +VirtualAddrNetwork 10.192.0.0/10 +AutomapHostsOnResolve 1 +AutomapHostsSuffixes .onion,.exit +DNSPort 10.10.20.1:53530 +TransPort 10.10.20.1:9040 +ExitNodes {us} StrictNodes 1 +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Configuraremos la resolución de dominios `onion` y `exit` y la resolución DNS y HTTP a la dirección IP que tendrá nuestra futura interfaz `tun`. Por otra parte, solicitaremos que el nodo de salida de TOR sea a través de un servidor de los Estados Unidos.' +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Levantamos nuestro servicio, comprobamos que todo funciona correctamente y habilitamos el inicio automático.' +``` + +```bash +sudo systemctl restart tor.service && sudo systemctl status tor.service + +sudo netstat -tulpen | grep tor + +sudo systemctl enable tor.service +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Ahora deberemos modificar nuestras Net Filter Tables para que en la cadena de pre enrutamiento el tráfico de nuestra segunda VPN se redirija hacia los nodos TOR, estableciendo así un proxy transparente que redirigirá todo el tráfico de los clientes que conecten en esta modalidad.' +``` + +```bash +#!/usr/sbin/nft -f + +flush ruleset +define vpn_port=6174 +define vpn_if=tun0 +define outside_if=enp0s17 +define vpn_subnet=10.10.10.0/24 + +define vpn_port_tor=6175 +define vpn_if_tor=tun1 +define vpn_subnet_tor=10.10.20.0/24 + +table inet filter { + chain input { + # allow OpenVPN connections to the Server + udp dport $vpn_port accept + + # allow OpenVPN TOR connections to the Server + udp dport $vpn_port_tor accept + } + + chain forward { + #Drop forwarded packets if they are not matched + type filter hook forward priority 0; policy drop; + + # allow existing connections + ct state related,established accept + + # allow packets from vpn interface + iifname $vpn_if oifname $outside_if accept + + # allow packets from vpn interface + iifname $vpn_if_tor oifname $outside_if accept + } + + chain output { + ## Transproxy leak blocked: + # https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy#WARNING + ct state invalid counter drop + oifname != "lo" ip saddr != 127.0.0.1 ip daddr != 127.0.0.1 tcp flags & (fin|ack) == fin|ack counter drop + oifname != "lo" ip saddr != 127.0.0.1 ip daddr != 127.0.0.1 tcp flags & (rst|ack) == rst|ack counter drop + } + +} + +# create a ipv4 table only for NAT entries (you need both chains even if they're empty) +table ip nat { + chain postrouting { + type nat hook postrouting priority 100; + + # enable NAT for VPN + iifname $vpn_if oifname $outside_if ip saddr $vpn_subnet masquerade + + # enable NAT for TOR VPN + iifname $vpn_if_tor oifname $outside_if ip saddr $vpn_subnet_tor masquerade + } + + chain prerouting { + # Transparent proxy to TOR + type nat hook prerouting priority 0; + iifname $vpn_if_tor ip saddr $vpn_subnet_tor udp dport 53 counter dnat to 10.10.20.1:53530 + iifname $vpn_if_tor ip protocol tcp ip saddr $vpn_subnet_tor counter dnat to 10.10.20.1:9040 + iifname $vpn_if_tor ip protocol udp ip saddr $vpn_subnet_tor counter dnat to 10.10.20.1:9040 + } + +} +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Reiniciamos nuestro servicio y comprobamos que todo funciona correctamente.' +``` + +```bash +sudo systemctl restart nftables.service && sudo systemctl status nftables.service +``` + +```bash +clear && cowsay -W 76 -f ovpn 'Crearemos copias de nuestra configuración base para clientes, servidor y del script de generación de configuración y alteraremos los valores para nuestra VPN alternativa.' +``` + +```bash +cp ~/client-configs/base.conf ~/client-configs/base-tor.conf + +cp ~/client-configs/make_config.sh ~/client-configs/make_config_tor.sh + +sudo cp /etc/openvpn/server.conf /etc/openvpn/tor.conf +``` + +```bash +sudo nano /etc/openvpn/tor.conf # sudo vim /etc/openvpn/tor.conf +``` + +```bash +port 6175 + +dev tun1 + +server 10.10.20.0 255.255.255.0 + +ifconfig-pool-persist /var/log/openvpn/ipp-tor.txt + +push "dhcp-option DNS 10.10.20.1" +push "dhcp-option DNS 1.1.1.1" + +status /var/log/openvpn/openvpn-status-tor.log + +log-append /var/log/openvpn/openvpn-tor.log +``` + +```bash +nano ~/client-configs/base-tor.conf # vim ~/client-configs/base-tor.conf +``` + +```bash +remote ovpn.bastionado.es 6175 +``` + +```bash +nano ~/client-configs/make_config_tor.sh # vim ~/client-configs/make_config_tor.sh +``` +```bash +#!/bin/bash +# First argument: Client identifier +KEY_DIR=/home/ovpn/client-configs/keys +OUTPUT_DIR=/home/ovpn/client-configs/files +BASE_CONFIG=/home/ovpn/client-configs/base-tor.conf +cat ${BASE_CONFIG} \ + <(echo -e '') \ + ${KEY_DIR}/ca.crt \ + <(echo -e '\n') \ + ${KEY_DIR}/${1}.crt \ + <(echo -e '\n') \ + ${KEY_DIR}/${1}.key \ + <(echo -e '\n') \ + ${KEY_DIR}/ta.key \ + <(echo -e '') \ + > ${OUTPUT_DIR}/bastionado-tor-${1}.ovpn +``` +```bash +clear && cowsay -W 76 -f ovpn 'Es el momento de levantar nuestra instancia alternativa de OpenVPN.' +``` - - - - - +```bash +sudo systemctl restart nftables.service && sudo systemctl status nftables.service +```