Cómo instalar el servidor y el cliente OpenVPN en FreeBSD 12.0

OpenVPN es una aplicación de código abierto que te permite crear una red privada segura a través de la Internet pública. OpenVPN implementa una red privada virtual (VPN) para crear una conexión segura. OpenVPN utiliza la biblioteca OpenSSL para proporcionar el cifrado y ofrece varios mecanismos de autenticación, como la autenticación basada en certificados, en claves precompartidas y en nombre de usuario/contraseña.

En este tutorial, te mostraremos cómo instalar y configurar paso a paso OpenVPN en FreeBSD 12.0. Crearemos el servidor VPN con el sistema FreeBSD e implementaremos la autenticación OpenVPN basada en certificados.

Requisitos previos

Para esta guía, necesitarás la última versión de FreeBSD 12.0 con el mínimo de 512 MB de RAM y 1 CPU. Y necesitarás los privilegios de root y el cortafuegos pf.

Lo que haremos

  • Instalar OpenVPN en FreeBSD 12.0
  • Configurar variables para los certificados
  • Generar certificados
  • Configurar OpenVPN
  • Configurar el cortafuegos PF
  • Activar el reenvío de puertos en FreeBSD
  • Probar

Paso 1 – Instalar OpenVPN

En primer lugar, actualizaremos el repositorio de paquetes binarios e instalaremos los paquetes de OpenVPN en el sistema FreeBSD utilizando el comando pkg que se indica a continuación.

pkg update
pkg install openvpn

Una vez completada la instalación, añade el servicio OpenVPN al arranque del sistema y define la interfaz de túnel OpenVPN ‘tun’ utilizando el comando sysrc que aparece más abajo.

sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"

Ahora el paquete OpenVPN ha sido instalado en el sistema FreeBSD 12.0.

Paso 2 – Configurar las variables para el certificado

En este paso vamos a configurar las variables ‘easy-rsa’ para generar certificados OpenVPN.

Crea un nuevo directorio openvpn ‘/usr/local/etc/openvpn/’ y copia en él el directorio ‘easy-rsa’.

mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Ahora ve al directorio ‘/usr/local/etc/openvpn/easy-rsa/’ y edita el archivo ‘vars’ utilizando el editor vim.

cd /usr/local/etc/openvpn/easy-rsa/
vim vars

Cambia los detalles por los tuyos y pégalos.

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "DE"
set_var EASYRSA_REQ_PROVINCE    "Frankfurt"
set_var EASYRSA_REQ_CITY        "Frankfurt"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST          "sha256"

Guárdalo y ciérralo.

Ahora convierte el archivo ‘vars’ en un ejecutable.

chmod +x vars

Y ya estamos listos para generar certificados VPN.

Paso 3 – Generar certificados

En este paso, vamos a generar algunos certificados para el servidor OpenVPN. Generaremos una CA, certificados de cliente y servidor, DH-PARAM y el certificado CRL (Lista de Revocación de Certificados).

Ve al directorio ‘/usr/local/etc/openvpn/easy-rsa/’ e inicializa el directorio de Infraestructura de Clave Pública (PKI) utilizando el comando ‘easyrsa.real’ como se indica a continuación.

cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki

– Generar CA

Ahora genera el certificado y la clave de la CA.

./easyrsa.real build-ca

Se te pedirá la contraseña de la clave CA. Escribe la contraseña y se habrán generado el certificado y la clave de la CA.

A continuación, generaremos y firmaremos el certificado y la clave del servidor utilizando nuestra nueva CA.

– Generar y firmar el certificado del servidor

Genera el certificado y la clave del servidor VPN utilizando el siguiente comando.

./easyrsa.real gen-req openvpn-bsd nopass

Después, firma el certificado del servidor utilizando la clave de la CA.

./easyrsa.real sign-req server openvpn-bsd

Escribe la frase de contraseña para la clave de la CA y se habrán creado el certificado y la clave del servidor.

Verifica el certificado y la clave del servidor utilizando el siguiente comando.

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt

Y asegúrate de que no recibes ningún error.

– Generar y firmar el certificado del cliente

Tras generar el certificado para el servidor, generaremos un nuevo certificado para el cliente y lo firmaremos con la clave de la CA.

Genera un nuevo certificado y clave ‘cliente01’ utilizando el siguiente comando.

./easyrsa.real gen-req client01 nopass

A continuación, firma el certificado con la clave de la CA.

./easyrsa.real sign-req client client01

Escribe la frase de contraseña para la clave de la CA y se habrán creado el certificado y la clave del cliente.

Verifica el certificado y la clave del cliente utilizando el comando openssl como se indica a continuación.

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Y obtendrás el resultado que se indica a continuación.

El certificado y la clave del cliente se han generado sin ningún error.

– Generar certificado DH-PARAM y CRL

El certificado DH-PARAM es necesario para mayor seguridad. Y la CRL (Lista de Revocación de Certificados) se utilizará para listar todos los certificados de cliente que quieras eliminar del acceso al servidor VPN.

Genera una nueva CRL y un nuevo certificado DH-PARAM utilizando el siguiente comando.

./easyrsa.real gen-crl
./easyrsa.real gen-dh

Una vez completado, se habrán generado todos los certificados básicos necesarios para nuestro servidor VPN.

– Copia todos los certificados

A continuación, tenemos que copiar todos los certificados en el directorio OpenVPN. Crea un nuevo directorio ‘servidor’ y ‘cliente’ dentro del directorio OpenVPN.

mkdir -p /usr/local/etc/openvpn/{server,client}

Copia el certificado CA, el certificado del servidor y la clave en el directorio ‘servidor’.

cp pki/ca.crt /usr/local/etc/openvpn/server/
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/

Copia el certificado CA, el certificado cliente01 y la clave en el directorio «cliente».

cp pki/ca.crt /usr/local/etc/openvpn/client/
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/
cp pki/private/client01.key /usr/local/etc/openvpn/client/

Copia los certificados DH-PARAM y CRL en el directorio «servidor».

cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/

Y ya estamos listos para configurar el servidor OpenVPN.

Paso 4 – Configurar OpenVPN

Ve al directorio ‘/usr/local/etc/openvpn’ y crea una nueva configuración openvpn llamada ‘openvpn.conf’ utilizando el editor.

cd /usr/local/etc/openvpn/
vim openvpn.conf

Cambia la configuración como necesites y pégala en él.

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Guárdala y ciérrala.

Ahora inicia el servicio OpenVPN y comprueba su estado.

service openvpn start
service openvpn status

Verás que el servicio OpenVPN está funcionando en el PID «14490».

Comprueba el puerto OpenVPN utilizando el siguiente comando sockstat.

sockstat -l4

Y obtendrás el resultado que se indica a continuación.

El servicio OpenVPN se está ejecutando en el puerto UDP por defecto «1194».

Paso 5 – Configurar el Cortafuegos pf

En este paso, vamos a configurar el cortafuegos pf para el servidor VPN. Crearemos la regla nat para la interfaz OpenVPN ‘tun0’ y permitiremos que todas las conexiones se redirijan a la interfaz de red externa ‘vtnet0’.

Antes de continuar, asegúrate de que el cortafuegos pf está configurado en el sistema. O puedes utilizar el siguiente enlace para configurarlo.

Cómo configurar el cortafuegos pf en FreeBSD 12.0

Ahora ve al directorio ‘/usr/local/etc’ y edita el archivo de configuración de pf ‘pf.conf’ utilizando el editor vim.

cd /usr/local/etc/
vim pf.conf

Define la interfaz OpenVPN y la dirección IP local.

# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"

Reensambla todos los paquetes fragmentados en la interfaz externa antes de filtrarlos.

# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble

Habilita la nat desde la dirección IP OpenVPN a la interfaz externa.

# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

Ahora pasa todas las conexiones al protocolo UDP en el puerto OpenVPN ‘1194’ y pasa todas las conexiones en la interfaz OpenVPN ‘tun0’.

# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state

# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any

Guarda y cierra.

Ahora comprueba la configuración del cortafuegos pf y asegúrate de que no hay ningún error, luego vuelve a cargar las reglas pf.

service pf check
service pf reload

Como resultado, la configuración del cortafuegos pf se ha completado.

Puedes comprobar las reglas del cortafuegos pf utilizando el siguiente comando.

pfctl -sr
pfctl -sn

Y se te mostrará el resultado como se indica a continuación.

Paso 6 – Configurar y Activar el Reenvío de Puertos

En este paso, vamos a habilitar el reenvío de puertos en el sistema FreeBSD.

Edita el archivo ‘/etc/sysctl.conf’ usando el editor vim.

vim /etc/sysctl.conf

Pega la siguiente configuración.

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Guarda y cierra.

Ahora comprueba el archivo de configuración sysctl utilizando el siguiente comando.

sysctl -f /etc/sysctl.conf

A continuación, habilita el sistema FreeBSD como pasarela añadiendo la configuración al archivo ‘/etc/rc.conf’ mediante la siguiente orden.

sysrc gateway_enable="YES"

A continuación, reinicia el servidor.

reboot

Ahora se ha habilitado el reenvío de puertos en el sistema FreeBSD.

Paso 7 – Configurar el cliente

En este paso, vamos a crear una nueva configuración ‘.ovpn’ para el cliente.

Ve al directorio ‘/usr/local/etc/openvpn/client’ y crea una nueva configuración ‘client01.ovpn’.

cd /usr/local/etc/openvpn/client/
vim client01.ovpn

Cambia la dirección IP remota y otros detalles por los tuyos y pégalos en ella.

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Guarda y cierra.

Ahora descarga todos los certificados, la clave y la configuración que hay dentro del directorio ‘/usr/local/etc/openvpn/client’ a tu ordenador local.

Paso 8 – Pruebas

En este paso, vamos a conectarnos al servidor VPN utilizando la configuración «client01.ovpn» desde el ordenador local.

Tras descargar los certificados y la configuración, ve al directorio de descargas y conéctate al servidor openvpn utilizando el comando que se indica a continuación.

openvpn --config client01.ovpn

Una vez finalizada la conexión, abre una nueva pestaña de terminal y comprueba la interfaz ‘tun0’.

ifconfig tun0

Y obtendrás la dirección IP interna del servidor OpenVPN.

A continuación, probaremos a hacer ping al servidor OpenVPN utilizando su dirección IP interna.

ping -c3 10.5.5.1

Y obtendrás una respuesta ICMP del servidor.

Después, comprueba la conexión a Internet utilizando el siguiente comando curl.

curl ipinfo.io

Ahora se te mostrará la dirección IP externa del servidor.

Como resultado, la instalación y configuración del servidor OpenVPN en FreeBSD 12.0 se ha completado con éxito.

Referencia

También te podría gustar...