Você está na página 1de 18

Cmo instalar y configurar OpenVPN

OpenVPN es una implementacion de VPN SSL la cual usa las extensiones OSI layer 2 3 para asegurar redes la cual usa los protocolos SSL/TLS, soporta diferentes medios de autenticacion como certificados, smart cards, y/o usuarios/contraseas, y permite politicas de control de acceso para usaurios o grupos usando reglas de firewall aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor (proceso) OpenVPN sobre un simple puerto TCP o UDP. Para seguir este documento se requieren conocimientos basicos de redes TCP/IP como , direcciones IP, DNS, netmasks, subnets, IP routing, routers, interfaces de red, LANs, gateways, y reglas de firewall. Formas de trabajo del OpenVPN Aunque OpenVPN es muy sencillo de configurar e instalar, podemos dividir su forma de trabajo en 3 tipos: 1. Host a Host: Es el mtodo ms simple, nos permite encriptar la comunicacin entre dos PC las cuales debern solamente tener conexin; es decir: ambas PC deben poderse enviar paquetes directamente ya sea porque estn conectadas en la misma red local, o porque ambas estn conectadas a la internet y sean alcanzables entre s. 2. Road Warrior: Es una de las formas ms utilizadas y solicitadas por los estudiantes. Es el permitir que una mquina de alguien que est fuera de nuestra red (de forma temporal o permanente) pueda comunicarse con el servidor OpenVPN de nuestra red y una vez autenticado pueda entrar a ver y acceder los recursos de nuestra red local. En verdad es un caso especial de la conexin Red a Red que a continuacin mencionamos: 3. Red a Red: Uno de los mtodos ms usados. Mediante sta forma dos redes separadas en el espacio pueden comunicarse como si estuvieran unidas por un cable virtual (de ahi la V de VPN); la comunicacin entre ambas redes viajar encriptada una vez salgan de los servidores de openvpn y hasta que lleguen a su otro extremo.

Ventajas del uso de OpenVPN

OpenVPN es un sistema de creacin y uso de vpn muy modesto y fcil de utilizar que nos permite implementar vpn que de otras formas sera muy molesto o dificultoso de realizar. Las implementaciones IPSec, aunque supuestamente mejor elaboradas y soportadas por el kernel de linux, son muy difciles de implementar en mquinas con Windows. En el caso de OpenVPN existen clientes y servidores tanto para linux como para windows y su implementacin para redes o sistemas multiplataformas es muy sencilla de llevar a cabo.

Instalacin del OpenVPN Instalar OpenVPN en nuestro linux CentOS es realmente fcil. Solamente debemos tener instalado el EPEL y emitir el comando:
yum install openvpn

Despus de unos minutos, tendremos listo el paquete de OpenVPN Una vez instalado, podemos proceder a la creacin de las claves de encriptacin en el servidor y cliente. Activando OpenVPN Aunque todava no es el momento de activarlo, cuando hayamos configurado el openvpn podemos activarlo con:
service openvpn start chkconfig openvpn on

Con estos dos simples comandos podemos arrancar el openvpn en ambos extremos. Si necesitramos reiniciarlo (para que lea de nuevo la configuracin por ejemplo) podramos hacerlo con:
service openvpn restart

1- Conexin Host a Host con OpenVPN


Generacin de clave de encriptacin. En el caso de una conexin host a host, podemos sencillamente generar una clave compartida en el servidor, y copiarla hacia el cliente. Con esta clave se encriptaran los datos sin mayor problema o inconveniente:
openvpn --genkey --secret /etc/openvpn/secret.key

Este archivo "secret.key" tiene que ser copiado hacia el directorio /etc/openvpn del cliente y del servidor.
scp /etc/openvpn/secret.key IPDELCLIENTE:/etc/openvpn/

Configuracin Host a Host En la configuracin host a host, lo que lograremos es que el intercambio de paquetes entre dos mquinas se realice de forma encriptada. Para esto le indicaremos en el archivo de configuracin que al arrancar openvpn se crear automticamente una interfaz virtual con una IP privada en cada extremo: * 10.8.0.1 para el servidor * 10.8.0.2 para el cliente Y cualquier paquete que circule entre el cliente y el servidor va esas direcciones IP, viajar encriptado.

Configuracin del servidor El archivo /etc/openvpn/server.conf lo podemos dejar de la siguiente forma:


# dispositivo de tunel dev tun # se define como: # ifconfig ipdelserver ipdelcliente # sugiero no cambiarle ifconfig 10.8.0.1 10.8.0.2 # Clave del servidor secret /etc/openvpn/secret.key #puerto port 1194 #usuario bajo el cual ejecutaremos user nobody group nobody # opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo) comp-lzo ping 15 verb 4

En este caso lo fundamental es que estamos indicndole al servidor que escuche en su puerto usuario (1194/udp) y que la IP que tomar la interfaz de vpn (tun) ser 10.8.0.1 y le dar al cliente la 10.8.0.2

Configuracin del cliente

Antes de configurar el cliente, en este caso el cliente 1, debemos traer del servidor el archivo /etc/openvpn/secret.key hacia el directorio /etc/openvpn del cliente. Esto lo hicimos ms arriba en este mismo documento. El archivo /etc/openvpn/client1.conf quedara como sigue:
# IP publica del servidor, poner IP real de su servidor! remote 200.100.50.25 # puerto port 1194 # dispositivo tunel dev tun # usamos ifconfig ipdelcliente ipdelservidor tun-mtu 1500 ifconfig 10.8.0.2 10.8.0.1 # clave privada, client1.key para ste ejemplo, recuerde cada usuario debe #tener su propia .key generada. El ejemplo de win esta comentado. #secret "c:\program files\company branded vpn\config\key.txt" secret /etc/openvpn/secret.key # ping cada 10 segs

ping 10 # compresin lzo comp-lzo # verbose moderado, callar mas de 10 mensajes iguales verb 4 mute 10

Probando el enlace Tanto en el cliente como en el servidor ponemos:


service openvpn start chkconfig --level 2345 openvpn on

Podemos verificar en /var/log/messages que todo haya ido ok. Una vez levantemos los demonios en ambos lados, podemos hacer ping hacia la interfaz tun (10.8.0.1 en el servidor 10.8.0.2 en el cliente): desde el servidor:
ping 10.8.0.2

desde el cliente:
ping 10.8.0.1

Si el ping responde, todo est bien. Sino, sugerimos revisar en /var/log/messages para verificar qu fue mal.

1.5- Cmo evadir a un firewall muy restrictivo, usando OpenVPN host-host


Bueno, bueno, aqui estoy en una empresa que tienen un firewall que aparenta ser bien restrictivo: 1- no me deja chatear 2- no me deja conectarme a muchsimos sitios 3- no puedo ni siquiera conectarme a mi servidor de openvpn host-host Hum, me puse a pensar: a ver, qu tal si le cambio el puerto al servidor de openvpn mo de forma tal que evito el que me bloqueen por el simple hecho de usar el puerto 1194? entonces en aquel servidor instalo un squid y por esa va me conecto a navegar y a chatear? La idea, genial! Te adelanto que funcion, pero me tom unos minutos. 1- afortunadamente puedo conectarme por ssh al servidor, as que no tuve que usar conexiones alternativas ni pedir ayuda a la gente en mi empresa, lo hice via ssh, me conect al servidor remoto mo 2- comenc a cambiar puertos, caramba TODOS me los tienen bloqueados. Pero la realidad es que siempre tienen que permitir algunos. El puerto 80 por ejemplo, pero ese no, porque ese lo tengo en uso por el apache. Pero pensando en el 80 me acord del 443, el que usa el mod_ssl, y no lo

uso en ese servidor! as que elimin el mod_ssl y puse al openvpn a escuchar por ah. Casi nadie puede bloquearte el 443 sin que reciba quejas! Trabajo en el servidor: borrando mod_ssl en el servidor:
rpm -e mod_ssl service httpd restart

listo, ya liber el 443, ahora voy a cambiar la configuracin del server.conf de openvpn con el fin de hacerme pasar como una conexin TCP a un servidor ssl:
vi /etc/openvpn/server.conf

la linea que dice port 1194 la elimino Entonces al final agrego esto:
port 443 proto tcp-server

Por favor tampoco olvides comentar las dos lneas del usuario y grupo:
#user nobody #group nobody

pues para trabajar con puertos bajos hace falta ser root. reinicia openvpn
service openvpn restart

Trabajo en el cliente en el cliente edito el client.conf:


vi /etc/openvpn/client.conf

y tambin comento la lnea que se refiere al puerto 1194 Entonces al final pongo:
port 443 proto tcp-client

y reinicio el servicio:
service openvpn restart

la vpn debe conectarse felizmente. Esto lo he probado hasta en Cuba, en el caso de Cuba recuerdo que tuve que usar un equipo con el puerto 80 sin usar y ah puse a escuchar el openvpn. Volvemos al servidor, instalacin de squid: Bueno, aqu regreso al servidor, e instalo el squid:
yum install squid service squid start chkconfig squid on

En el squid.conf debes autorizar la red 10.8.0.0/24: en mi caso, andaba de apuro, as que busqu, descoment y modifiqu dos lneas que decan as:
acl our_networks src 10.8.0.0/24 http_access allow our_networks service squid reload

Y ya configur mi firefox para que se conectara a 10.8.0.1 en el puerto 3128 y navegu!! bien, ya no tena restricciones. Tambin configur mi chat para que usara el mismo proxy pero para el caso de ciertos protocolos del chat, tuve que autorizar el uso de conexiones encriptadas en ciertos puertos, en el squid.conf modifiqu la lnea SSL_ports para que dijera:
#esta linea normalmente slo tiene el puerto 443 #los otros dos puertos son para chat acl SSL_ports port 443 5050 1863

2- Configuracin de RoadWarrior
Si usted ya configur y prob algn tipo de conexin openVPN anteriormente, por ejemplo la conexin host a host, no olvide borrar los contenidos del directorio /etc/openvpn especialmente los archivos .key y .conf puesto que nos pueden molestar o confundir para la siguiente configuracin. Consideraciones preliminares En el servidor de openvpn no te olvides de activar el ip_forwarding. Edita /etc/sysctl.conf y cambia ip_forwarding a 1 (est normalmente en 0). Entonces ejecuta:
sysctl -p

De olvidar lo anterior la vpn no har ping hacia la red interna! Ahora lo lento: En el servidor openvpn necesitamos crear una serie de claves y certificados iniciales, para poder autenticar y encriptar la informacin que transitar desde/hacia el servidor/clientes Contamos con una serie de scripts en el directorio /usr/share/openvpn*/easy-rsa los cuales nos ayudarn mucho a ejecutar sta tarea inicial. Como primer paso, sugerimos copiar ese directorio (easy-rsa) hacia /etc/openvpn y cambiarnos a ese directorio:
cp -a /usr/share/openvpn*/easy-rsa /etc/openvpn cd /etc/openvpn/easy-rsa/2.0

Creando el CA Una vez dentro de ste directorio procedemos a ejecutar los siguientes pasos:
. vars sh clean-all sh build-ca

Con ellos lo que haremos es: * Inicializar variables de ambiente para poder trabajar con los siguientes scripts de shell para generar las variables * Inicializamos el directorio de las claves (borrando potenciales archivos viejos) * build-ca: procedemos a generar el certificado CA En ste ltimo paso se nos pedir una serie de informacin sobre nuestra red/empresa que debemos llenar lo ms fielmente posible:
Generating a 1024 bit RSA private key ....................................................................................... .... .................................++++++.....................++++++ writing new private key to 'ca.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [KG]:EC State or Province Name (full name) [NA]:Pichincha Locality Name (eg, city) [BISHKEK]:Quito Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:ecualinux Email Address [me@myhost.mydomain]:info@ecualinux.com

La variable que debemos explcitamente llenar (no dejar en blanco!) es: Common Name. Generacin del certificado y de la clave de encriptacin para el servidor Siguiente a la generacin del Certificado de autoridad, procedemos a crear el certificado del servidor y de su clave de encriptacin:
sh build-key-server server Generating a 1024 bit RSA private key ......................++++++ .........................++++++ writing new private key to 'server.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [KG]:EC State or Province Name (full name) [NA]:Pichincha

Locality Name (eg, city) [BISHKEK]:Quito Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:server Email Address [me@myhost.mydomain]:info@ecualinux.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'EC' stateOrProvinceName :PRINTABLE:'Pichincha' localityName :PRINTABLE:'Quito' organizationName :PRINTABLE:'EcuaLinux' organizationalUnitName:PRINTABLE:'IT' commonName :PRINTABLE:'server' emailAddress :IA5STRING:'info@ecualinux.com' The stateOrProvinceName field needed to be the same in the CA certificate (Pichincha) and the request (Pichincha)

En ste paso, tambin se nos pedir nuevamente informacin sobre el certificado propio del servidor. En ste caso por favor, escoger en Common Name un nombre diferente al anteriormente escogido. En mi caso escog: server Este paso nos generar dos archivos en el directorio /etc/openvpn/easy-rsa/keys/ que se copiarn dentro del mismo servidor hacia /etc/openvpn, ellos son: * server.crt * server.key Generando certificados y claves privadas para los clientes Cada cliente debe tener su propio certificado y clave de seguridad, para cara cliente que tengamos deberemos repetir el siguiente paso. Los archivos obtenidos debemos copiarlos hacia el directorio /etc/openvpn/ de los clientes! En el caso de que nuestros clientes sean en windows, debemos copiarlos hacia c:\program files\openvpn\ Para generar el certificado y claves privadas ejecutamos en nuestro servidor, dentro del directorio /etc/openvpn/easy-rsa/
sh build-key client1 Generating a 1024 bit RSA private key ....................................................................................... ........++++++ ......++++++ writing new private key to 'client1.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [KG]:EC State or Province Name (full name) [NA]:Pichincha Locality Name (eg, city) [BISHKEK]:Quito Organization Name (eg, company) [OpenVPN-TEST]:EcuaLinux Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:client1 Email Address [me@myhost.mydomain]:info@ecualinux.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'EC' stateOrProvinceName :PRINTABLE:'Pichincha' localityName :PRINTABLE:'Quito' organizationName :PRINTABLE:'EcuaLinux' organizationalUnitName:PRINTABLE:'IT' commonName :PRINTABLE:'client1' emailAddress :IA5STRING:'info@ecualinux.com' Certificate is to be certified until Nov 24 05:25:40 2016 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated

En el ejemplo anterior generamos la clave y el certificado para un cliente llamado client1.

Debemos hacer notar que al ejecutar el programa sh build-key, le pasamos como parmetro el nombre del cliente (client1 en el ejemplo anterior) el cual debe ser diferente para cada cliente. En el common name ponemos el nombre del cliente (client1 en ste ejemplo) tal y como le pasamos de parmetro. Se pueden generar tantas claves como sean necesarias:
sh build-key client2 sh build-key client3

Esto nos generar dos claves y certificados ms, para client2 y client3, por favor, en common name debemos poner client2 client3 para cada caso. Generando parmetros de Diffie-Hellman El parmetro de Diffie-Hellman debemos generarlo as:
sh build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ......................+...............................+...........

Archivos a copiar al servidor Hacia el directorio /etc/openvpn del servidor copiamos los siguientes archivos: * ca.crt * ca.key * server.key * server.crt * dh1024.pem Estos archivos estn presentes en: /etc/openvpn/easy-rsa/keys Archivos a copiar al cliente Hacia el directorio /etc/openvpn de cada cliente copiamos los siguientes archivos: * ca.crt * clientX.crt * clientX.key Tenga en cuenta que X es un nmero que se corresponde con el cliente (para el cliente 2 sera: client2.crt y client2.key por ejemplo). Estos 3 archivos deben copiarse de forma segura hacia el cliente, quiz mediante scp o algn medio magntico seguro. No deben enviarse por mail puesto que contienen la clave (.key) de encriptacin del cliente! Estos archivos estn presentes en: /etc/openvpn/easy-rsa/keys del servidor.

Para la configuracin en modo roadwarrior las configuraciones del cliente y el servidor varan un poco: Configuracin del servidor: El archivo /etc/openvpn/server.conf quedar as:
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh1024.pem #Direcciones que se asignaran a los #clientes, el server es .1 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt #Ruta para que los clientes alcancen la red local del server (56.0/24) push "route 192.168.56.0 255.255.255.0" keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun status openvpn-status.log verb 4

Como podemos ver, hay nuevos parmetros, los ms importantes son: * un push de la ruta hacia la red local interna del servidor. Esa ruta estdica permitir que el road warrior vea a las mquinas de la red interna * server: Indica el rango de direcciones que se asignar a los clientes que se conecten, deben ser direcciones no similares a las de la red local. Configuracin del cliente: En el caso del cliente, as quedara el archivo de configuracin:
client dev tun proto udp remote 201.219.41.38 1194 resolv-retry infinite nobind #Las dos siguientes opciones no van en windows user nobody group nobody persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 4

Las configuraciones ms interesantes son:

* Client: indica que algunas configuraciones las tomar del servidor. * nobind: que no acte como servidor, que solamente vaya como cliente. * Recordar que cert y key deben ser nicas para cada cliente Si se fijan, el orden en que van los parmetros no importa mucho, he notado que el openvpn es muy noble en el cmo pones los parmetros, le da igual (mayormente).

3- Configuracin de OpenVPN Red a Red


Lo mejor de la configuracin red-red es que es casi idntica a la de roadwarrior. Esto es El Road Warrior est conectado a una red, pero l es un cliente slo, de sta forma:
LAN (192.168.1.0/24) --|LINUX|-- INTERNET ---- RoadWarrior (en cualquier lugar).

El road warrior, con la configuracin antes explicada puede perfectamente ver las mquinas de la LAN (192.168.1.0/24) Pero qu tal que pusiramos una red detrs del roadwarrior?, quedara algo as:
LAN1 (192.168.1.0/24) --|LINUX1|-- INTERNET ----|Linux2|---- (LAN2: 192.168.2.0/24)

Oh, el Road warrior es en realidad otro linux.


Linux1: Est conectado a la red 192.168.1.0/24 Linux2: Est conectado a la red 192.168.2.0/24

Fjense, es IMPERIOSO que ambas redes tengan diferente numeracin, es decir, que sean dos redes IPs diferentes, en ste caso lo son. Mediante OpenVPN podemos hacer que ambas redes puedan verse. Es decir, por ejemplo, que podamos hacer ping entre mquinas de la LAN1 y de la LAN2 (por ejemplo: 192.168.1.6 haciendo ping a 192.168.2.78 sin inconveniente alguno). Configuracin inicial: Como bien indiqu anteriormente, es una configuracin muy parecida al roadwarrior. El RoadWarrior sera Linux2 y el servidor sera Linux1. Hay que configurar entonces linux1 para ser el servidor, con todas las de la ley anteriormente explicado Hay que configurar linux2 para que acte como un cliente (road warrior) con todas las de la ley anteriormente explicados. Adiciones a la configuracin:

Asumamos que el ejemplo anterior aplica. Es decir, la subred del cliente (linux2) es la 192.168.2.0/24 el cliente le llamaremos client2 (de acuerdo a los certificados y claves generados como road warrior). Cambios en el servidor: Hay que crear el directorio ccd:
mkdir /etc/openvpn/ccd

Dentro de ste directorio creamos un archivo con el nombre del cliente (client2) que contiene la siguiente linea:
iroute 192.168.2.0 255.255.255.0

Aqu lo que le indicamos al servidor es que al conectarse client2 (este cliente remoto que es un linux con una red detrs) que por favor cree una ruta hacia la red 192.168.2.0/24 que vaya hacia ese cliente remoto. Con eso logramos que las mquinas de la red del servidor puedan ver a las del cliente. Despus hay que agregar esta linea a /etc/openvpn/server.conf
client-config-dir ccd route 192.168.2.0 255.255.255.0 client-to-client push "route 192.168.2.0 255.255.255.0"

La directiva client-config-dir permitir al servidor buscar dentro del directorio ccd configuraciones especiales segn el cliente (en este caso client2). Por qu tantas veces directivas de route? Sinceramente: no lo entiendo pero as es. Tenga cuidado, en este segundo caso no la agregamos en ccd/client2 sino en el archivo de configuracin del servidor (server.conf en mi caso) Cambios en el cliente En el cliente simplemente tenemos que poner en 1 el ip_forwarding, esto se hace tal y como se realiz en el servidor: editando el archivo /etc/sysctl.conf y despus ejecutando:
sysctl -p

debe salirte:
net.ipv4.ip_forward = 1

Ya, con esto las mquinas de una red podrn ver a las de la otra red. Si tuvieras varias redes remotas (client2 y client3 por ejemplo) entonces debes crear un archivo llamado client3 dentro de ccd con la configuracin propia de esa red. Y agregar las lineas de las rutas (route y push "route...") en el server.conf No te olvides de reiniciar los clientes. Me funciona.. pero si notas algo que falta o que sobre, bienvenido el comentario.

4- OpenVPN y su relacin con iptables

Configurarlo es fcil, lo que me tom y lo juro una madrugada fue el hecho de relacionarlo con iptables. Si tienes un iptables medio jodn, se te arma un lo. Mira que perd tiempo... la idea es que hay que habilitar el trfico hacia las interfaces TUN/TAP pues sino no se conectan las mquinas. El mejor sntoma es que hayas seguido todas mis indicaciones aqui y no te trabaje.. por supuesto te recomiendo siempre mirar dentro de los logs: /var/log/messages de ambos extremos pues puede que el problema que tengas sea otro (typos o errores al escribir). Ahora, si ests seguro de que la openvpn est bien, te sugiero bajar el iptables (flush) en ambos extremos, para que verifiques si funciona el openvpn sin el firewall. Si te funcion con el iptables abajo, entonces debes agregar estas lneas en el servidor (quiz en el cliente tambin):
iptables iptables iptables iptables iptables iptables iptables -A -A -A -A -A -A -A INPUT -i tun+ -j ACCEPT FORWARD -i tun+ -j ACCEPT FORWARD -o tun+ -j ACCEPT OUTPUT -o tun+ -j ACCEPT INPUT -i tap+ -j ACCEPT FORWARD -i tap+ -j ACCEPT INPUT -p udp --dport 1194 -j ACCEPT

Con ellas lo que logras es abrir el puerto 1194/UDP para que entre la conexin de los clientes. Y adems acceptar conexiones tun/tap. Aunque realmente con las tun basta pues son las que usamos en estos ejemplos. Un firewall que ya tengo preparado para esto es el rc.firewall modificado por mi, aqui lo tienes listo para ser usado: http://cursos.ernestoperez.com/rc.firewall Busca la palabra openvpn dentro de este script ahi estn comentadas las lneas, slo tienes que descomentarlas y reiniciarlo.

5- OpenVPN y windows
OpenVPN puede trabajar tanto como cliente cuanto como servidor en mquinas windows y linux. Es decir puede quedar cualquier combinacin: windows windows, windows linux, linux windows o la mejor: linuxlinux. Te sugiero que comiences linux-linux pues tenemos ms herramientas para trabajar y verificar. Yo lo que hice fue, una vez configurado bien un cliente en linux, mov los archivos de /etc/openvpn hacia la mquina de windows y listo me trabaj. En el caso de windows los archivos de configuracin deben ir en c:\program files\openvpn\config Te sugiero que una vez muevas los archivos de configuracin de cliente linux al cliente windows, borres estos archivos del cliente linux. Recuerda que los archivos de configuracin y claves deben ser particulares para cada cliente, no debes usarlos en dos clientes, por eso pido que los borres del cliente linux.

En el caso de windows hay dos parmetros de configuracin que no aplican y no se pueden poner en las configuraciones son: user y group Ellos dos permiten degradar los privilegios a un usuario diferente del de administrador, pero en windows esto no se puede hacer, openvpn corre como administrador.

6- OpenVPN detrs de un proxy


Bueno, me top con un cliente que por alguna razn propia de ellos (seguridad) no tienen acceso directo a internet (NAT) sino que todo sale a travs de un proxy squid. En este cliente yo estaba casi 8 horas al da durante dos semanas (por eso no poste las semanas anteriores y perd tantos puntos bodi.. por los bodis precisamente). En todo caso, yo necesitaba poder hacer una vpn hacia fuera pues necesitaba ssh, imap y algunas cosillas para el trabajo de mi negocio... y me desesperaba no tener conexin. Esto significaba que tena queleer correos por webmail (no es de mi agrado) y que no poda hacer ssh sino me conectaba por alegro pero alegro me machetea 4ctvs el minuto por una conexin..... solucin? Usar openvpn a travs del proxy. Para esto debemos tener en cuenta las siguientes consideraciones: 1- openvpn usar el protocolo tcp 2- openvpn har un connect al puerto que le digamos Sobre este punto 2 es el problema. Los proxies squid permiten solamente hacer connect a los puertos 563 y 443 (miren dentro de la ACL sta:
acl SSL_ports port 443 563

As que el primer da me sali todo mal, lo dej intentando hacer connect al 1194 y el proxy no me dejaba. As que como no poda convencerles de abrir el 1194, opt por usar lo que brindaban, el 563, yo tena el 563 sin uso en ese servidor remoto as que le d uso. Configuracin del servidor para aceptar conexiones desde un proxy: Al servidor hay que indicarle que la conexin ser en tcp:
proto tcp port 563

y hay que comentarle estas lineas:


#user nobody #group nobody

Por qu comentarlas? Porque el puerto que usaremos ser el 563, es un puerto bajo, menor a 1024 y requiere de acceso de root por eso no se puede disminuir privilegios Atencin: Recuerda abrir el puerto 563/tcp en tu iptables!!!

Configuracin del cliente para hacer conexiones a travs de un proxy: En el el archivo .conf del cliente agregar:
#reintentar hasta que se pueda, y conectarse al servidor proxy: 192.168.1.1 en el puerto 3128 http-proxy-retry http-proxy 192.168.1.1 3128

En el cliente adems hay que indicarle que el servidor de destino corre en el puerto 563 y en tcp.
proto tcp port 563

y hay que comentarle estas lineas:


#user nobody #group nobody

Aqui cruzas los dedos, reinicias el cliente y el servidor y debe funcionarte. Los problemas tipicos son relacionados con los privilegios de root (dejar el user y el group) y con el puerto que el squid est dispuesto a aceptar, sugiero el 563 pues tipicamente lo permiten.

7- Fallas tpicas en conexiones openvpn


No estoy diciendo que son precisamente las que tengas, pero aqui van algunas burradas tpicas que cometemos cuando usamos openvpn, principalmente en red a red. 1- En red-red el nombre del archivo dentro de ccd tiene que ser igual al nombre del common name generado para el .conf del cliente (por ejemplo ccd/client1 y en el common name al generar client1.crt debera haber puesto client1) Esta es la mejor, me tuvo la maana de hoy Sbado sentado. Hasta la prstata me duele de tanto tiempo sentado: por el amor de Al... el common name hazlo coincidir con el parmetro que uses cuando pones "sh build-key client1". Este cliente en cuestin ejecut "sh build-key client1" (sin las comillas) y en el common name haba puesto server2... Esto hace que la ruta para el red a red no funcionara porque se buscaba en ccd/ el archivo llamado server2, pues dentro de ccd se pone un archivo con el nombre del common name. 2- no tengas varios firewalls encendidos!!, esto es tipico, apaga cualquier otro firewall y solamente deja el tuyo, esto es tipico (de nuevo). Si ests usando rc.firewall, entonces mejor apaga el firewall iptables, pues se entromete. Lo mismo para cualquier otro firewall
service iptables stop chkconfig iptables off

chkconfig ip6tables off service ip6tables stop

Me gusta el arnos-iptables-firewall, aqui puedes encontrar el rpm http://centos5.centos.ec 3- La ruta por defecto de ambas redes trata de que sea el servidor de openvpn, verificalo con route print. Si el servidor openvpn no es el mismo servidor que sirve de gateway para tu red, debes crear una ruta esttica en el servidor de gateway para enviar los paquetes con destino a la red remota hacia el servidor openvpn. 4- Estn encendidos ambos servidores de openvpn? 5- En los servidores aparece una ruta esttica? route -n, verificar que haya una ruta hacia la red LAN contraria que vaya por la interfaz tun0, por ejemplo as:
192.168.2.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0

6- Apaga el NetworkManager.. que haces usando ambiente grfico en un servidor? Apaga el servicio messagebus, apaga el avahi-daemon!! Vete a modo texto.. apaga cualquier otro servicio que no utilices por si acaso.
service NetworkManager stop chkconfig NetworkManager off service avahi-daemon stop chkconfig avahi-daemon off service messagebus stop chkconfig messagebus off

7- Est bien puesta la hora de la mquina? Esta fue otra que me hizo perder, tiempo. Los certificados se generan desde una fecha/hora hasta otra fecha/hora (aunque no definas esto manualmente)... la fecha/hora de inicio es la hora del servidor.. si la tienes mal en uno de ambos servidores, entonces el cert no tomar hasta que la hroa no se cumpla.. si el drift entre ambos es muy grande, entonces te tomar aos. Actualiza la hora con ntpdate antes de crear los certs

8- Usando arno-iptables-firewall con openvpn


el firewall de arno es bien simple de utilizar y muy til, realmente s. Lo nico complejo que le he visto es el nombre del servicio:
arno-iptables-firewall

Si usas otro firewall y ests desesperado porque no te funciona openvpn, puedes descartar problemas de firewall instalando este simple firewall.. y una vez que ya logres configurar y probar openvpn, puedes regresar a tu firewall si deseas. Lo he usado para instalar conexiones openvpn y es excelente. Me permite hacer NAT y adems por supuesto la OpenVPN. Instalacion Bajar el rpm de nuestro repo.

Escoger y bajar la ultima versin que tengas. Si puedes bjalo con wget. En mi caso hice:
wget http://centos5.centos.ec/i386/arno-iptables-firewall-1.8.8o-1.noarch.rpm rpm -Uvh arno-iptables-firewall-1.8.8o-1.noarch.rpm

Configuracin Editar el archivo:


vi /etc/arno-iptables-firewall/firewall.conf

En mi caso supondr que mi interfaz externa es eth0 y la interna es eth1 con la red LAN 192.168.0.0/24 Buscar y cambiar las siguientes lineas (por favor no dejarles el signo de # al inicio!)
EXT_IF="eth0" EXT_IF_DHCP_IP=0 INT_IF="eth1" INTERNAL_NET="192.168.0.0/24" NAT=1 TRUSTED_IF="tun+" # esta es opcional, slo si tienes transparent proxy HTTP_PROXY_PORT="3128" #esta del 22 es opcional, para que puedas ssh a ambos servidores) OPEN_TCP="22" OPEN_UDP="1194"

Nada ms, arrancas el servicio de arno-iptables-firewall:


chkconfig arno-iptables-firewall on service arno-iptables-firewall start

Te debe funcionar el NAT y la VPN por el puerto 1194/UDP.. asi como el ssh por el puerto 22/TCP

Você também pode gostar