Instalación Vpn Con Openvpn

VPN con openvpn
View more...
   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

MONTAR UN SERVIDOR OPENVPN (LINUX) OpenVPNes una solución de conectividad basada en software: SSL(Secure Sockets Layer) VPNVirtual Private Network [red virtual privada], OpenVPN ofrece conectividad punto-apunto con validación, jerárquica de usuarios y host conectados remotamente. Tipo de configuración. En esta ocasión se realizará una configuración tipo VPN Intranet. Este tipo de redes es creado entre una oficina central [servidor] y una o varias oficinas remotas [clientes]. El acceso viene del exterior. Se utiliza este tipo de VPN cuando se necesita enlazar a los sitios que son parte de una compañía, en nuestro caso será compuesto por un servidor Central que conectará a muchos clientes VPN entre si. "Modelo de VPN"] El servidor VPN hace de pasarela para que todos los clientes puedan estar comunicados a través del túnel OpenVpn. Cada cliente se encuentra en lugares diferentes con diferentes tipos de segmento de red, al estar conectados mediante el túnel VPN se crea un red virtual y se asigna un nuevo segmento de red proporcionada por el servidor principal en este caso con segmento [10.10.0.0/255.255.255.255]. INSTALACIÓN VPN CON OPENVPN  Instalación a partir de paquete TAR. Los paquetes se pueden descargar de la pagina oficial del OpenVPN http://openvpn.net/ Instalar desde paquete .tar, descomprima el paquete donde x.x-x es la versión del Openvpn: tar zxvf openvpn-x.x-x.tar.g Compilar OpenVPN: cd openvpn-x.x. ./configure make make install  Preparación de guiones (script) RSA Para la administración de la PKI (Infraestructura de Llave Publica – Public Key Infrastructure) usaremos los guiones que vienen junto con OpenVPN (easy-rsa) la versión reciente trae consigo muchas mejoras, es esta easy-rsa 2.0. cp -Rp /lugardondehallamosdescomprimido/openvpn-x.x-x/easy-rsa/ /etc/openvpn cp /etc/openvpn/easy-rsa/openssl.cnf /etc/openvpn A continuación será modificar la Autoridad Certificadora ( CA) para generar las llaves, para esto se edita el fichero /etc/openvpn/easy-rsa/vars de la siguiente forma, por ejemplo: export KEY_COUNTRY=ES export KEY_PROVINCE=MADRID export KEY_CITY=MADRID export KEY_ORG=tuempresa.es export KEY_EMAIL="[email protected]" KEY_COUNTRY: Especifica el país donde se encuentra el servidor vpn • KEY_PROVINCE: Provincia o estado donde se encuentra este. • KEY_CITY: Ciudad ubicado el servidor vpn. • KEY_ORG: Dominio o departamento de la organización/Empresa. • KEY_MAIL: Correo electrónico de la organización/empresa. Importante: Se deben de llenar todos los parámetros ya que son indispensables para los certificados que serán creados. Seguidamente se ejecutarán los guiones (scripts) para general las llaves correspondientes.  Inicializando Autoridad Certificadora el CA Primero: Hay que copiar unos archivos al directorio /etc/openvpn cp openssl.cnf whichopensslcnf pkitool /etc/openvpn Estos 3 archivos suelen estar en cp -Rp /lugardondehallamosdescomprimido/openvpn-x.x-x/easy-rsa/ O en su defecto cp -Rp /lugardondehallamosdescomprimido/openvpn-x.x-x/easy-rsa/2.0 Segundo: para generar el CA deberá realizar los siguientes pasos: cd /etc/openvpn/ source easy-rsa/2.0/./vars sh easy-rsa/2.0/clean-all sh easy-rsa/2.0/build-ca cd /etc/openvp Generando Parametros Diffie Hellman. Los parámetros Diffie Hellmandeben de ser generados en el Servidor OpenVPN, para realizar esto deberá ejecutar el guión de la siguiente forma: sh easy-rsa/2.0/build-dh Generación de llaves. Para generar el certificado y llave privada para el servidor será de la siguiente forma: sh easy-rsa/2.0/build-key-server miservidor En donde [miservidor] es una variable para identificar la llave privada del servidor. Para generar el certificado y llave para los clientes se hará de la siguiente forma: Nosotros utilizamos la misma llave para todos los clientes. sh easy-rsa/2.0/build-key cliente Una ves que se han generado las llaves correspondientes a los clientes y servidor, se podrá rescatar estas en el directorio /etc/openvpn/keys  CONFIGURACIÓN Configuración del Servidor Linux VPN Para la creación del servidor OpenVPN se deberá crear un archivo de configuración udp en el directorio /etc/openvpn/ con el nombre server.conf port 1194 proto udp dev tun #---- Seccion de llaves ----ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem #---------------------------server 10.10.0.0 255.255.255.0 push “route 192.168.33.0 255.255.255.0” ifconfig-pool-persist ipp.txt duplicate-cn keepalive 10 120 comp-lzo persist-key persist-tun user nobody group nobody status openvpn-status-servidorvpn-udp-1194.log log-append /var/log/openvpn.log verb 3 Descripción: Port: Especifica el puerto que será utilizado para que los clientes vpn puedan conectarse al servidor. Proto: tipo de protocolo que se empleará en a conexión a través de VPN dev: Tipo de interfaz de conexión virtual que se utilizará el servidor openvpn. ca: Especifica la ubicación exacta del fichero de Autoridad Certificadora [.ca]. cert: Especifica la ubicación del fichero [.crt] creado para el servidor. key: Especifica la ubicación de la llave [.key] creada para el servidor openvpn. dh: Ruta exacta del fichero [.pem] el cual contiene el formato de Diffie Hellman (requirerido para –tls-serversolamente). server: Se asigna el rango IP virtual que se utilizará en la red del túnel VPN. Push: “Empuja” o permite el paso a nuestra LAN Ifconfig-pool-persist: Fichero en donde quedarán registrado las direcciones IP de los clientes que se encuentran conectados al servidor OpenVPN. Duplicate-cn: Permite el uso de un mismo certificado para todos los clientes (de lo contrario cada cliente deberia tener su propio certificado) Keepalive 10 120 : Envía los paquetes que se manejan por la red una vez cada 10 segundos; y asuma que el acoplamiento es abajo si ninguna respuesta ocurre por 120 segundos. comp-lzo: Especifica los datos que recorren el túnel vpn será compactados durante la trasferencia de estos paquetes. persist-key: Esta opción soluciona el problema por llaves que persisten a través de los reajustes SIGUSR1, así que no necesitan ser releídos. Persist-tun: Permite que no se cierre y re-abre los dispositivos TAP/TUN al correr los guiones up/down User & Group NOBODY: para restringir los privilegios del demonio OPENVPN. status: fichero donde se almacenará los eventos y datos sobre la conexión del servidor [.log] log-append: Para que genere el log en un fichero aparte. verb: Nivel de información (default=1). Cada nivel demuestra todo el Info de los niveles anteriores. Se recomienda el nivel 3 si usted desea un buen resumen de qué está sucediendo. 0 –No muestra una salida excepto errores fatales. 1 to 4 –Rango de uso normal. 5 –Salida Ry Wcaracteres en la consola par los paquetes de lectura y escritura, mayúsculas es usada por paquetes TCP/UDP minúsculas es usada para paquetes TUN/TAP. Para la configuración del Servidor VPN necesitamos insertar el módulo (tun) para controlar los interfaces /dev/net/tunX que se necesiten en le sistema, así pues creamos el directorio /var/empty para hacer chroot y seguidamente reiniciamos el servicio OpenVPN: Cargamos el módulo (en nuestro caso ya esta cargado): modprobe tun Y habilitamos el IP forwarding (vital, de lo contrario no permitira que pasen los paquetes de la red 10.10.0.0 a la LAN 192.168.33.20). Este comando habra que insertarlo en algun script que se ejecute al inicio del sistema, hay que al reiniciar el IP_FORWARD desaparece echo 1 > /proc/sys/net/ipv4/ip_forward Para la ejecución del servidor OpenVPN puede utilizar el siguiente script y guardarlo con el nombre de openvpn dentro de /etc/opnevpn , con el siguiente contenido: #!/bin/bash # #-- Variables -RUTACONFIG=”/etc/openvpn/” NOMCONFIG=”servidorvpn-udp-1198.conf” # #-- Ejecuciónde la configuraciónpara el servicioOpenVPN # $RUTACONFIG$NOMCONFIG # exit 0 Y damos los permiso de ejecución correspondientes: chmod +x openvpn Para crear el demonio y poder controlar el OPENVPN como un servicio mas de Linux: Hay que crear un fichero llamado openvpn dentro de /etc/init.d con el siguiente contenido (sacado de la pagina WEB de openvpn) # Ubicación del binario openvpn openvpn="" openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn" for location in $openvpn_locations do if [ -f "$location" ] then openvpn=$location fi done # Fichero de cerrojo (lock) lock="/var/lock/subsys/openvpn" # Directorio de PID piddir="/var/run/openvpn" # Directorio de trabajo work=/etc/openvpn # Añadir funciones de librería. . /etc/rc.d/init.d/functions # Añadir configuración de red. . /etc/sysconfig/network # Comprobar si la red está activa. if [ ${NETWORKING} = "no" ] then echo "Networking is down" exit 0 fi # Comprobar si existe el ejecutable if ! [ -f $openvpn ] then echo "openvpn binary not found" exit 0 fi # Comprobar cómo nos han llamado. case "$1" in start) echo -n $"Starting openvpn: " /sbin/modprobe tun >/dev/null 2>&1 # Desde el punto de vista de la seguridad, creo que tiene # sentido eliminar esto, y obligar a los usuarios que lo # necesiten a habilitarlo explícitamente en su scripts de arranque o # en la configuración del firewall. #echo 1 > /proc/sys/net/ipv4/ip_forward if [ ! -d $piddir ]; then mkdir $piddir fi if [ -f $lock ]; then # no nos pararon correctamente for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do if [ -s $pidf ]; then kill `cat $pidf` >/dev/null 2>&1 fi rm -f $pidf done rm -f $lock sleep 2 fi rm -f $piddir/*.pid cd $work # Arrancar cada .conf en $work y ejecutar .sh si existe errors=0 successes=0 for c in `/bin/ls *.conf 2>/dev/null`; do bn=${c%%.conf} if [ -f "$bn.sh" ]; then . $bn.sh fi rm -f $piddir/$bn.pid $openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd $work if [ $? = 0 ]; then successes=1 else errors=1 fi done if [ $errors = 1 ]; then failure; echo else success; echo fi if [ $successes = 1 ]; then touch $lock fi ;; stop) echo -n $"Shutting down openvpn: " for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do if [ -s $pidf ]; then kill `cat $pidf` >/dev/null 2>&1 fi rm -f $pidf done success; echo rm -f $lock ;; restart) $0 stop sleep 2 $0 start ;; reload) if [ -f $lock ]; then for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do if [ -s $pidf ]; then kill -HUP `cat $pidf` >/dev/null 2>&1 fi done else echo "openvpn: service not started" exit 1 fi ;; reopen) if [ -f $lock ]; then for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do if [ -s $pidf ]; then kill -USR1 `cat $pidf` >/dev/null 2>&1 fi done else echo "openvpn: service not started" exit 1 fi ;; condrestart) if [ -f $lock ]; then $0 stop # evitar condiciones de carrera sleep 2 $0 start fi ;; status) if [ -f $lock ]; then for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do if [ -s $pidf ]; then kill -USR2 `cat $pidf` >/dev/null 2>&1 fi done echo "Status written to /var/log/messages" else echo "openvpn: service not started" exit 1 fi ;; *) echo "Usage: openvpn {start|stop|restart|condrestart|reload|reopen|status}" exit 1 ;; esac exit 0 Luego, hay que asignarle permisos de ejecucion a dicho archivo: chmod 755 /etc/init.d/openvpn Ahora hay que agregarlo a la lista de servicios chkconfig –add openvpn chkconfig openvpn on Configuración de Clientes VPN con OpenVPN Clientes Windows Para la configuración de clientes OpenVPN utilizaremos el programa OpenVPN GUI para Windows. OpenVPN GUI para Windows corre normalmente en una ventana de consola, al ser conectado al servidor remoto/local VPN le da un aviso en el área de notificación (el área de abajo a la derecha por el reloj en la barra ), desde allí puede tener el control de iniciar/parar el Cliente OpenVPN, consultar los avisos (log), incluso cambiar su contraseña. Puede ser descargado en el sitio OpenVPN GUI for Windows [http://openvpn.se]. Preparativos y configuración A continuación deberá copiar los siguientes ficheros: • ca.crt. • cliente1.crt. • cliente1.csr. • cliente1.key Estos fueron creados en el directorio /etc/openvpn/easy-rsa/2.0/keys y deberán ser colocados en la máquina cliente dentro de C:\Archivos de Programa\OpenVPN\config Se creará un fichero de configuración cliente para el OpenVPN dentro del directorio C:|Archivos de Programa\OpenVPN\config con el nombre de cliente1-udp-1194.ovpn. Tendrá la siguiente configuración: client dev tun proto udp remoteIPDELSERVIDOROPENVPN 1194 float resolv-retry infinite nobind persist-key persist-tun #------ SECCION DE LLAVES -------ca ca.crt cert cliente.crt key cliente.key ns-cert-type server #--------------------------------comp-lzo verb 3 Descripción: client: Especifica el tipo de configuración, en este caso tipo cliente OpenVPN. Port: Especifica el puerto que será utilizado para que los clientes VPN puedan conectarse al servidor. Proto: tipo de protocolo que se empleará en a conexión a través de VPN dev: Tipo de interfaz de conexión virtual que se utilizará el servidor openvpn. remote: Host remoto o dirección IP en el cliente, el cual especifica al servidor OpenVPN. El cliente OpenVPN puede tratar de conectar al servidor con host:porten el orden especificado de las opciones de la opción –remote. float: Este le dice a OpenVPN aceptar los paquetes autenticados de cualquier dirección, no solamente la dirección cuál fue especificado en la opción –remote. resolv-retry: Si la resolución del hostname falla para – remote, la resolución antes de fallar hace una recomprobación de n segundos. nobind: No agrega bind a la dirección local y al puerto. ca: Especifica la ubicación exacta del fichero de Autoridad Certificadora [.ca]. cert: Especifica la ubicación del fichero [.crt] creado para el servidor. key: Especifica la ubicación de la llave [.key] creada para el servidor OpenVPN. remote: Especifica el dominio o IP del servidor así como el puerto que escuchara las peticiones para servicio VPN. comp-lzo: Especifica los datos que recorren el túnel VPN será compactados durante la trasferencia de estos paquetes. persist-key: Esta opción soluciona el problema por llaves que persisten a través de los reajustes SIGUSR1, así que no necesitan ser releídos. Persist-tun: Permite que no se cierre y re-abre los dispositivos TAP/TUN al correr los guiones up/down verb: Nivel de información (default=1). Cada nivel demuestra toda la Información de los niveles anteriores. Se recomienda el nivel 3 si usted desea un buen resumen de qué está sucediendo. 0 –No muestra una salida excepto errores fatales. 1 to 4 –Rango de uso normal. 5 –Salida Ry Wcaracteres en la consola par los paquetes de lectura y escritura, mayúsculas es usada por paquetes TCP/UDP minúsculas es usada para paquetes TUN/TAP. Una ves configurado el cliente VPN con Windows, deberá ir al área de notificación (el área de abajo a la derecha por el reloj en la barra de Windows) y dar un click derecho al icono del cliente OpenVPN , allí aparecerá un menú en el cual podrá elegir la opción conectar [connect]. Cuando intente conectarse al servidor VPN una vez que haya elegido la opción [connect] aparecerá una ventana de notificación en el cual vera los procesos de verificación e intento de conexión al servidor VPN, si todo sale bien, en el icono de notificación del cliente OpenVPN le indicará la correcta conexión y le mostrará el número de IP virtual [tun] que se le fue asignado.