Configurando un servidor VPN sigiloso con OpenConnect

Anteriormente publiqué un tutorial para montar un servidor VPN con Wireguard, el cual tiene un rendimiento excelente, pero es fácil de bloquear. El protocolo OpenConnect es más difícil de detectar para los firewall, ya que para los sistemas de inspección profunda de paquetes el trafico parece utilizar el protocolo https. Las siguientes instrucciones son para Debian

Instalamos el servidor OpenConnect

sudo apt install ocserv

Instalamos el servidor Apache y certbot para obtener un certificado SSL si es que no tenemos uno

sudo apt install apache2 certbot

configuramos un host virtual

sudo nano /etc/apache2/sites-available/frank.asgardius.company.conf

Agregamos el contenido de la siguiente manera

<VirtualHost *:80>
        ServerName frank.asgardius.company

        DocumentRoot /var/www/ocserv
</VirtualHost>

Guardamos los cambios y creamos el directorio raíz del servidor web

sudo mkdir /var/www/ocserv
sudo chown www-data:www-data /var/www/ocserv -R
sudo a2ensite frank.asgardius.company
sudo systemctl restart apache2

Solicitamos un certificado

sudo certbot certonly --webroot --agree-tos --email you@exmaple.com -d frank.asgardius.company -w /var/www/ocserv

editamos el archivo de configuración se ocserv

sudo nano /etc/ocserv/ocserv.conf

Configuramos la autenticacion

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Buscamos la siguiente linea y la deshabilitamos

udp-port = 443

Agregamos nuestro certificado SSL

server-cert = /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem
server-key = /etc/letsencrypt/live/frank.asgardius.company/privkey.pem

Ajustamos nuestro nombre de dominio de la siguiente manera

default-domain = frank.asgardius.company

Cambiamos la subred interna para evitar conflictos con enrutadores domesticos

ipv4-network = 10.10.10.0
ipv4-netmask = 255.255.255.0

Habilitamos la siguiente linea para evitar la fuga de peticiones DNS

tunnel-all-dns = true

Configuramos nuestro servidor DNS

dns = 8.8.8.8

Eliminamos las siguientes lineas para que la VPN redirija todo el trafico

route = 10.0.0.0/8
route = 172.16.0.0/12
route = 192.168.0.0/16

Guardamos los cambios y reiniciamos el servicio

sudo systemctl restart ocserv

Creamos una cuenta de usuario

sudo ocpasswd -c /etc/ocserv/ocpasswd usuario

Si no tenemos otro servidor VPN ya instalado, necesitamos habilitar la redirección de IP de la siguiente manera

echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/60-custom.conf
sudo sysctl -p /etc/sysctl.d/60-custom.conf

Instalamos UFW

sudo apt instal ufw

Habilitamos el puerto https, http y ssh

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Editamos las reglas avanzadas de UFW

sudo nano /etc/ufw/before.rules

Agregamos los siguiente al final, adaptandolo a la interfaz de red que utilice nuestro servidor

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens2 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Buscamos la cadena ufw-before-forward y agregamos lo siguiente al final de las lineas que la contienen

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Guardamos los cambios y habilitamos UFW

sudo ufw enable

Ahora tenemos una VPN capaz de evadir firewalls restrictivos (como el de Fortinet). Actualmente no hay programas cliente que funcionen en Windows

Dejar un comentario