====== 212.5 OpenVPN ====== Pertenece a [[informatica:certificaciones:lpic:lpic-2:212_system_security|Topic 212: System Security]] * **Weight**: 2 * **Description**: Candidates should be able to configure a VPN (Virtual Private Network) and create secure point-to-point or site-to-site connections. * **Key Knowledge Areas**: * OpenVPN * **Terms** and **Utilities**: * ''/etc/openvpn/'' * ''openvpn'' **OpenVPN** es un programa open source para la creación de túneles seguros (VPN, //Virtual Private Network//). OpenVPN está disponible en Debian a través del paquete ''openvpn'' A diferencia de las VPN habituales, no se basa en IPsec sino en **SSL**. Proporciona servicios de: * **Autenticación**: soporta varios modos, pero los dos más comunes son la autentificación por compartición de claves y la autentificación con certificados digitales X509. * **Confidencialidad**: la confidencialidad de las comunicaciones está garantizada por el uso de la librería OpenSSL. Para la encriptación se utiliza por defecto el algoritmo Blowfish. * **Control de integridad**. ===== Modos de funcionamiento ===== * **point-to-point**: en el que los dos protagonistas de la VPN (Cliente y Servidor) son al mismo tiempo los extremos del túnel y los extremos de la comunicación. * **site-to-site**: dos servidores OpenVPN proporcionan entonces un túnel, pero los extremos del tráfico son las dos redes conectadas. De este modo, los servidores OpenVPN realizan además una función de enrutamiento entre ambas redes. Este modo nos permitirá conectar máquinas de una red a máquinas de una red distinta. * **bridge**: se conectan dos redes remotas como si se hubiera añadido un cable entre los switches. Es un modo muy poco utilizado. DHCP puede funcionar en este modo (y cualquier servicio que funciona por broadcast) para funcionar entre sedes. ===== Creación de un túnel punto a punto ===== ==== Gestión de la autenticación ==== Generamos el fichero de clave en el **servidor**: openvpn --genkey --secret Ejemplo: # cat archivo_clave.key # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- ae11344ce37de44dcce059ecf9fa573f a2694d5531bc7ed144a12a099c4ef8ce (...) 1d37552cd4f29ff6b719588056a60777 579cc2aff71bf339f5293bf08f2ce4df -----END OpenVPN Static key V1----- Es necesario que el cliente tenga la clave creada en el servidor, así que se la pasamos: scp archivo_clave.key root@cliente:/root ==== Archivos de configuración ==== Los archivos de configuración se encuentran por defecto en el directorio ''/etc/openvpn'' y suelen llamarse ''client.conf'' y ''server.conf'': remote dev tun ifconfig secret route * ''remote servidor'': en el cliente únicamente. ''servidor'' indica el nombre o la dirección IP del servidor al que se debe conectar la VPN. * ''dev tun'': crea una encapsulación de tipo túnel, es decir, point-to-point o site-to-site (''tap'' es para conexión bridge). * ''ifconfig IP_local IP_remota'': establece las direcciones locales y remotas de los extremos de la comunicación. Estas direcciones estarán visibles en forma de interfaz virtual en la configuración de red del host. * ''secret archivo_clave'': indica qué archivo contiene la clave compartida, idéntica en ambas máquinas. * ''route red_remota máscara'': parámetro del cliente: indica la dirección de red privada detrás del servidor para que el tráfico con destino esta red se enrute correctamente por la VPN. Iniciamos el servicio (cliente / servidor): /etc/init.d/openvpn start Ejemplo completo: # En el servidor # vi /etc/openvpn/server.conf dev tun ifconfig 10.8.0.1 10.8.0.2 secret secret.key # En el cliente # vi /etc/openvpn/client.conf remote vpn.example.com dev tun ifconfig 10.8.0.2 10.8.0.1 secret secret.key route 192.168.1.0 255.255.255.0 Se puede comprobar el correcto funcionamiento con el comando ping. OpenVPN por defecto, utiliza el puerto **1194/UDP**. Para obtener la información de routing y la lista de clientes actualmente conectados podemos ejecutar en el servidor el comando: /etc/init.d/openvpn status Ejemplo de una sesión: servidor# ifconfig tun0 tun0: error fetching interface information: Device not found servidor# /etc/init.d/openvpn start Starting virtual private network daemon: client. servidor# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet adr:10.8.0.2 P-t-P:10.8.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) servidor# ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.864 ms