====== OpenVPN con easy-rsa ====== En términos generales se describe cómo se configura un **server** OpenVPN en la red interna que recibe las conexiones públicas por reenvío de puerto 1194/UDP desde el router o firewall de borde. Como resultado de la VPN, el **client** puede acceder a todos los equipos que están en la red privada 10.0.1.0/24, como muestra el siguiente esquema: {{ :documentos:seguridad:openvpn.png?direct&600 |}} ===== Servidor ===== Estos son los pasos para dejar funcionando el servidor OpenVPN, utilizando los scripts que vienen con **easy-rsa** para generar los certificados. ==== Instalar ==== apt-get update apt-get install -y openvpn openssl ==== Configurar OpenVPN Server ==== Tomar la configuración de ejemplo que viene con el paquete: cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ cd /etc/openvpn/ gzip -d server.conf.gz Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma) vim server.conf # Esta ruta es pasada a los clientes para llegar a la red interna push "route 10.0.1.0 255.255.255.0" push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" user nobody group nogroup ==== Configurar easy-rsa ==== Tomar la configuración que viene en el paquete mkdir /etc/openvpn/easy-rsa cp -rf /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa Editar el archivo de variables y adaptar las mismas al entorno donde va a funcionar la VPN: vim vars export KEY_COUNTRY="UY" export KEY_PROVINCE="MVD" export KEY_CITY="Montevideo" export KEY_ORG="Pilas.Guru" export KEY_EMAIL="info@pilas.guru" export KEY_CN=openvpn-server export KEY_NAME=server export KEY_OU=server Activar la configuración de openssl necesaria: cp openssl-1.0.0.cnf openssl.cnf ==== Generar certificados para el servidor ==== Generar certificados para la Autoridad de Certificación: source ./vars ./clean-all ./build-ca Generar certificados para el servidor OpenVPN: ./build-key-server server Generar certificados Diffie–Hellman: ./build-dh copiar certificados generados al directorio /etc/openvpn para que queden disponibles para la VPN cd /etc/openvpn/easy-rsa/keys cp dh1024.pem ca.crt server.crt server.key /etc/openvpn En el directorio /etc/openvpn **servidor** quedan los siguientes archivos: * server.conf * ca.crt * dh1024.pem * server.crt * server.key ==== Crear enmascaramiento del trafico de la VPN ==== Se enmascara con la IP de la red interna todo el trafico que llega desde la VPN, para eso se configura iptables como sigue: no se puede configurar esta línea de iptables hasta tanto no esté levantada la VPN. Por ese motivo se configura en /etc/rc.local ya que es el ultimo script en que ejecuta en el arranque vim /etc/rc.local iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE Configurar forwarding entre las interfaces de red: vim /etc/sysctl.conf net.ipv4.ip_forward=1 Activar el forwarding configurado: sysctl -p ==== Habilitar openvpn en el inicio ==== Para que inicie OpenVPN descomentar la variable AUTOSTART: vim /etc/default/openvpn AUTOSTART="all" ===== Cliente ===== La operación de instalación del cliente debe ser realizada para **cada** cliente que se va a conectar en la VPN. ==== Instalar ==== apt-get update apt-get install -y openvpn openssl ==== Configurar OpenVPN Client ==== Tomar la configuración de ejemplo que viene con el paquete: cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/ Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma) cd /etc/openvpn/ vim client.conf remote IP-o-hostname-server 1194 user nobody group nogroup En la linea **remote** se coloca el nombre o dirección IP pública del servidor de VPN. Se especifica cómo llega el cliente al servidor para armar la VPN. A esta dirección se debe acceder mediante puerto **1194/udp** que es la configuración por defecto de OpenVPN. ==== Generar certificados para el cliente ==== Esta operación se ejecuta en el servidor cd /etc/openvpn/easy-rsa source ./vars ./build-key client copiar del servidor los archivos: * /etc/openvpn/easy-rsa/keys/ca.crt * /etc/openvpn/easy-rsa/keys/client.crt * /etc/openvpn/easy-rsa/keys/client.key y colocarlos en el cliente en la carpeta /etc/openvpn/ En el directorio /etc/openvpn **cliente** quedan los siguientes archivos: * client.conf * ca.crt * client.crt * client.key ==== Iniciar VPN ==== En el cliente se inicia el servicio de openvpn: service openvpn start ===== Verificación ===== Una vez levantada la VPN aparece una interfaz **tun0** que presenta las IP de la VPN tanto en el servidor como el cliente. **Servidor:** en caso de problemas verificar: * cadena POSTROUTING de la tabla nat, con el comando 'iptables -L -n -t nat' * archivo /proc/sys/net/ipv4/ip_forward que tiene que tener un 1 * registro del log en el archivo /var/log/daemon.log **Cliente:** por la configuración dada, se modifica: * archivo /etc/resol.conf agregando los DNS 8.8.8.8 y 8.8.4.4. * se agrega a la tabla de rutas cómo llegar a la red detras de la VPN (10.0.1.0), verificar con el comando 'ip route show' * se debe poder llegar con ping a cualquier host de la red 10.0.1.0 ===== Remover cliente para acceder a la VPN ===== Si se necesita remover un cliente, para que ya no tenga acceso a la VPN, los comandos son: cd /etc/openvpn/easy-rsa source ./vars ./revoke-full client