Cómo desplegar VPN en una red Linux empresarial

Introducción

En entornos empresariales, garantizar la seguridad y el acceso remoto eficiente a recursos internos es crucial. Una VPN (Virtual Private Network) proporciona un túnel cifrado a través de Internet, permitiendo que usuarios remotos o sedes descentralizadas accedan a la red corporativa como si estuvieran físicamente presentes. En una infraestructura Linux, existen varias soluciones maduras y robustas que pueden adaptarse a diferentes necesidades de rendimiento, escalabilidad y facilidad de gestión.

1. Planificación y Diseño

1.1 Requisitos básicos

  • Servidor Linux (CentOS, RHEL, Ubuntu Server o Debian) con acceso root o privilegios sudo.
  • Conexión a Internet con IP pública estática o un sistema de DNS dinámico.
  • Políticas de seguridad y compliance de la empresa (auditorías, cifrado mínimo, autenticación).
  • Capacidad de hardware: CPU para cifrado/descifrado, RAM y disco según número de clientes concurrentes.
  • Plan de direccionamiento IP interno para clientes VPN (subred dedicada).

1.2 Comparativa de soluciones VPN

Solución Pro Contra
OpenVPN Amplia documentación, multiplataforma, soporte TCP/UDP Rendimiento moderado, configuración compleja
WireGuard Ligero, alta velocidad, muy sencillo Características de IAM limitadas, más reciente
StrongSwan (IPsec) Estandarizado, interoperable, fuerte cifrado Configuración extensa, trampas en NAT
SoftEther Multi-protocolo, puente Ethernet virtual Mayor consumo de recursos, menos popular

2. Instalación y Configuración

2.1 Configuración de OpenVPN

OpenVPN utiliza certificados SSL/TLS para autenticar servidor y clientes:

  1. Instalar paquetes:
sudo apt update
sudo apt install openvpn easy-rsa -y
  1. Crear PKI y certificados:
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey --secret ta.key
  1. Archivos de configuración en /etc/openvpn/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
push route 10.0.0.0 255.255.255.0
cipher AES-256-GCM
user nobody
group nogroup
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
verb 3
  1. Habilitar reenvío IP y reglas de firewall:
echo net.ipv4.ip_forward=1  sudo tee -a /etc/sysctl.conf
sudo sysctl -p

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw enable

sudo ufw route allow in on tun0 out on eth0
  1. Iniciar servicio:
sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

2.2 Configuración de WireGuard

WireGuard es más ligero y rápido, basado en pares de claves:

  1. Instalar:
sudo apt install wireguard -y
  1. Generar claves:
wg genkey  tee server_private.key  wg pubkey > server_public.key
wg genkey  tee client_private.key  wg pubkey > client_public.key
  1. Crear /etc/wireguard/wg0.conf:
[Interface]
Address = 10.9.0.1/24
ListenPort = 51820
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.9.0.2/32
  1. Habilitar y arrancar:
sudo sysctl -w net.ipv4.ip_forward=1
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

2.3 Configuración de StrongSwan (IPsec)

Ideal para interoperabilidad con dispositivos IPsec:

  1. Instalar:
sudo apt install strongswan strongswan-pki libcharon-extra-plugins -y
  1. Generar CA y certificados:
ipsec pki --gen --outform pem > ca.key
ipsec pki --self --in ca.key --dn C=ES, O=MiEmpresa, CN=VPN CA --ca --outform pem > ca.crt
ipsec pki --gen --outform pem > server.key
ipsec pki --pub --in server.key  ipsec pki --issue --cacert ca.crt --cakey ca.key 
  --dn C=ES, O=MiEmpresa, CN=vpn.midominio.com --san vpn.midominio.com 
  --flag serverAuth --flag ikeIntermediate --outform pem > server.crt
  1. Configurar /etc/ipsec.conf y /etc/ipsec.secrets (ejemplo resumido):
# /etc/ipsec.conf
config setup
  charondebug=ike 2, knl 2, net 2
conn vpn-ikev2
  auto=add
  left=%any
  leftcert=server.crt
  leftid=vpn.midominio.com
  leftsubnet=0.0.0.0/0
  right=%any
  rightid=%any
  rightauth=eap-mschapv2
  rightsourceip=10.10.0.0/24
  ike=aes256-sha2_256-modp2048
  esp=aes256-sha2_256
  dpdaction=clear
  dpddelay=300s
  dpdtimeout=1h

# /etc/ipsec.secrets
: RSA server.key
usuario %any : EAP suPasswordSecreto
  1. Reiniciar servicio:
sudo systemctl restart strongswan-starter
sudo systemctl enable strongswan-starter

3. Integración y Autenticación Avanzada

Para grandes corporaciones, integrar la VPN con sistemas AAA simplifica la gestión:

  • LDAP/Active Directory: Autenticación a usuarios corporativos.
  • RADIUS: Autorización y accounting con FreeRADIUS.
  • Multi-Factor Authentication: Google Authenticator, Duo Security.

Ejemplo de configuración OpenVPN con RADIUS (plugin-auth-pam):

plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn
client-cert-not-required
username-as-common-name

4. Seguridad y Buenas Prácticas

  • Actualizaciones: Mantener OpenSSL, kernels y paquetes VPN al día.
  • Políticas de cifrado: Utilizar AES-256, SHA-2, PFS (Perfect Forward Secrecy).
  • Restricción de acceso: Definir listas de control de acceso por subred o usuario.
  • Registros y auditoría: Configurar logrotate y herramientas SIEM.
  • Segmentación de red: Aislar clientes VPN en VLANs o zonas seguras.

5. Monitoreo y Mantenimiento

  • Herramientas de monitorización: Zabbix, Nagios, Prometheus Grafana para métricas de tráfico y latencia.
  • Alertas: Umbrales de sesiones concurrentes, CPU, ancho de banda.
  • Backups: Copias periódicas de configuraciones, CA, certificados.
  • Pruebas de recuperación: Simular caídas para validar tiempo de restauración (RTO/RPO).

Conclusión

Desplegar una VPN en un entorno Linux empresarial implica una planificación meticulosa, elección de la solución adecuada y aplicación de buenas prácticas de seguridad. OpenVPN, WireGuard y StrongSwan ofrecen distintos trade-offs entre rendimiento, facilidad de uso y compatibilidad. Integrar autenticación centralizada, monitorizar el servicio y mantener actualizados los componentes aseguran una implementación fiable y escalable que proteja la infraestructura y facilite el trabajo remoto.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *