Saturday, 26 September 2009 15:19

openvpn server configuration Featured

Despues de una larga ausencia por motivos laborales hablamos en este caso de Vpn, en linux tenemos una opción con todas la seguridad que tendriamos con una solucion propietaria.

Vayamos al grano, lo primero que debemos hacer es juntar los datos de nuestra VPN, hasta el ultimo detalle, la formas de conexion, el Ip publico del servidor, Ip de la Vpn y la de la Lan son los datos que se destacan.

Los que quieran un VideoTutorial ponganse en contacto al mail This e-mail address is being protected from spambots. You need JavaScript enabled to view it .

Those who want a VideoTutorial get in contact to mail This e-mail address is being protected from spambots. You need JavaScript enabled to view it .

 

Despues de desarrollar el tutorial, si tiene un servidor LDAP lo puede configurar como backend a este ultimo. Siga el tutorial 

 

Variables a tener en cuenta

ipPublica   200.X.X.X
lanInterna  192.168.X.X
ipDado      192.168.X.X
GRUPOPDC

Configuracion del lado del servidor
primero se instala el servidor openvnp


apt-get install openvpn openssh-server

y los datos para la creacion de certificados digitales
se usa un shell que elabore para acceder a este shell ingresar a la carpeta /root/shells archivo nombre openvnp

#!/bin/bash

#Fecha 15-08-2009
#Autor: juan Pablo Gonzalez Camera
#Correo: This e-mail address is being protected from spambots. You need JavaScript enabled to view it
#Licencia: GPL V.3
#Descripción: Script permite configurar un servidor VPN con openvpn, en distribuciones como
# debian, Ubuntu y CentOS.

###INSTALACION DEL SERVICIO OPENVPN EN LAS DISTRIBUCIONES
### DEBIAN LENNY / CENTOS 5.0 / UBUNTU

echo -e "#####################################"
echo -e " INSTALACION DEL SERVIDOR OPENVPN n"
echo -e "#####################################"

### IDENTIFICA QUE TIPO DE DISTRIBUCION TIENES

distro=$(more /etc/issue | sed '2d' | cut -d' ' -f1)

if [ $distro == Debian -o $distro == Ubuntu ]
then
echo -e "INSTALANDO OPENVPN EN $distro n"
apt-get autoclean && apt-get update && apt-get install openvpn
elif [ $distro == CentOS ]
then
echo -e "INSTALANDO OPENVPN EN $distro n"
rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum clean all && yum update && yum install openvpn
else
echo -e "ESTE SCRIPT NO ES PARA TU DISTRIBUCIONN"
break
fi

echo -e "#####################################"
echo -e " INSTALACION TERMINADA EN $distro OK n"
echo -e "#####################################"

##### BUSCA Y COPIA CONFIGURACION DE OPENVPN DESDE LOS EJEMPLOS DE TU DISTRIBUCION.

echo -e "#####################################"
echo -e " BUSCANDO CONFIGUACION OPENVPN n"
echo -e "#####################################"

patchvpn=$(find /usr/share/doc/ -name *easy-rsa*)

echo -e " ### TRANSFIRIENDO DATOS OPENVPN ###n"

if [ $distro == Debian -o $distro == Ubuntu ]
then
patchvpn=$patchvpn/2.0/
cp -Rp $patchvpn /etc/openvpn/
mv /etc/openvpn/2.0/ /etc/openvpn/easy-rsa
elif [ $distro == CentOS ]
then
echo $patchvpn
cp -Rp $patchvpn /etc/openvpn/
fi

echo -e "#####################################"
echo -e " TRANFERENCIA DE DATOS TERMINADA n"
echo -e "#####################################"

echo -e "n"

echo -e "#####################################"
echo -e " CONFIGURACION OPENVPN n"
echo -e "#####################################"

#### OBTENIENDO DATOS DEL USUARIO PARA PODER CREAR CERTIFICADO Y LLAVES DEL SERVIDOR
#### TAMBIEN ES INFORMACION NECESARIA PARA LOS CERTIFICADOS DE LOS CLIENTES

cd /etc/openvpn/easy-rsa
vpn=$(pwd)

sed '64,68d' $vpn/vars > /dev/null

read -p "PAIS ---->" pais
echo "export KEY_COUNTRY="$pais"" >> vars

read -p "ESTADO ---->" estado
echo "export KEY_PROVINCE="$estado"" >> vars

read -p "CUIDAD ---->" cuidad
echo "export KEY_CITY="$cuidad"" >> vars

read -p "NOMBRE EMPRESA ---->" empresa
echo "export KEY_ORG="$empresa"" >> vars

read -p "CORREO ---->" correo
echo "export KEY_EMAIL="$correo"" >> vars

echo "n"

echo -e "LIMPIANDO CONFIGURACIONES ANTERIORES n"

mkdir $vpn/keys
source vars
sh clean-all

echo -e "CREANDO CERTIFICADO PARA OPENVPN n"
sh build-ca
sh build-dh
echo -e "OK n"

echo -e "CREANDO LLAVE PARA EL SERVIDOR OPENVPN n"
sh build-key-server server
echo -e "OK n"

cp $vpn/keys/ca.* /etc/openvpn
cp $vpn/keys/dh1024.pem /etc/openvpn
cp $vpn/keys/server.* /etc/openvpn/

echo -e "CREANDO ARCHIVO DE CONFIGURACION DEL SERVIDOR OPENVPN n"

echo "mode server" >> /etc/openvpn/server.conf
echo "port 1194" >> /etc/openvpn/server.conf
echo "proto udp" >> /etc/openvpn/server.conf
echo "dev tun" >> /etc/openvpn/server.conf
echo "ca ca.crt" >> /etc/openvpn/server.conf
echo "cert server.crt" >> /etc/openvpn/server.conf
echo "key server.key" >> /etc/openvpn/server.conf
echo "dh dh1024.pem" >> /etc/openvpn/server.conf
read -p "SEGMENTO DE RED DE LA VPN---->" seg
read -p "MASCARA DE RED DE LA VPN----->" mask
echo "server $seg $mask" >> /etc/openvpn/server.conf
echo "client-config-dir /etc/openvpn/ccd" >> /etc/openvpn/server.conf
echo "client-to-client" >> /etc/openvpn/server.conf
echo "keepalive 10 120" >> /etc/openvpn/server.conf
echo "comp-lzo" >> /etc/openvpn/server.conf
echo "user root" >> /etc/openvpn/server.conf
echo "group root" >> /etc/openvpn/server.conf
echo "tls-server" >> /etc/openvpn/server.conf
echo "persist-key" >> /etc/openvpn/server.conf
echo "persist-tun" >> /etc/openvpn/server.conf
echo "status /var/log/openvpn-status.log" >> /etc/openvpn/server.conf
echo "log /var/log/openvpn.log" >> /etc/openvpn/server.conf
echo "verb 1" >> /etc/openvpn/server.conf
echo "mute 20" >> /etc/openvpn/server.conf
echo "max-clients 20" >> /etc/openvpn/server.conf

echo -e "OK n"

echo -e "INICIANDO EL SERVICIO OPENVPN n"

/etc/init.d/openvpn restart

echo -e "OK"

echo -e "DESEA CREAR CLIENTES PARA LA VER VPN"
echo -e "1.-SI"
echo -e "2.-NO"
read -p "OPCION --->" op

if [ "$op" -eq "1" ]
then
echo -e "CREANDO CLIENTES OPENVPN n"
read -p "CUANTOS CLIENTES DESEAS CREAR--->" client
for i in `seq 1 $client`
do
read -p "NOMBRE DE CLIENTE VPN --->" nomvpn
/sbin/clientevpn.sh $nomvpn
done
else
echo -e "SALIMOS DEL ASISTENTE n"

echo -e "TERMINADO EL PROCESO"

fi

**********************************************************************************************
Como generar los certificados, cabe recordar que cada cliente tiene su propio certificado
cuando ejecutamos todo este shell se creara una carpeta llamada easy-rsa en /etc/openvpn que permitira la creacion de certificados o renovacion de los mismos cuando querramos
 cd /etc/openvpn/easy-rsa/

./clean-all
sh build-key nombreclienteNro

Yo personalmente puse cliente1....,cliente2......etc

Probar si la copia de cliente1.crt a cliente2.crt es igual de valida para saltear la creación de certificados

/etc/openvpn/server.conf
mode server
port 1194
proto udp
dev tun0
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key  /etc/openvpn/easy-rsa/keys/server.key
dh  /etc/openvpn/easy-rsa/keys/dh1024.pem
server LanVpn 255.255.255.0
#Agregado Ayer
#route 192.168.0.19 255.255.255.0
#push "route 192.168.0.19 255.255.255.0"
#push "dhcp-option WINS 192.168.0.19"

#Fin de Agregacion
client-config-dir /etc/openvpn/ccd
client-to-client
keepalive 10 120
comp-lzo
user root
group root
tls-server

persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 4
mute 20
max-clients 20
#Fin Original

La linea que hace referencia a
client-config-dir /etc/openvpn/ccd
es porque hay un directorio llamado ccd
un archivo cliente1
cliente1 contiene

push "dhcp-option DNS 192.168.0.19"
push "dhcp-option WINS 192.168.0.17"
push "dhcp-option DOMAIN GRUPOPDC"
push "route LanInterna 255.255.255.0"


en donde la mas importante es push "route LanInterna 255.255.255.0"
para rutear los pedidos desde fuera hacia vpn tun hacia la lan LanInterna

Teniendo en cuenta que el puerto utilizado por la VPN es el 1194, habilitar este en
iptables debido que la politica es denegar todos y aceptar los conocidos
En iptables /etc/init.d/iptables.sah

iptables -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT
#El servidor es OpneVPN Editado el dia 17 de Agosto del 2009
iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1194 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --dport 1194 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -p udp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o tun+ -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -p tcp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o tun+ -p tcp --dport 1194 -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
iptables -t nat -A POSTROUTING -s  LanInterna/24 -o eth0 -j MASQUERADE

# Empleando reenvio y aceptandolo
iptables -A FORWARD -i tun0 -s LanVpn/24 -j ACCEPT
#Para unir la VPN a la LAN (Opcional)
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to 192.168.0.19

haciendo un ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:76:97:09:d0  
          inet addr:201.217.50.130  Bcast:192.168.50.255  Mask:255.255.255.252
          inet6 addr: fe80::20c:76ff:fe97:9d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1621605 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1662842 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1514734785 (1.5 GB)  TX bytes:223548100 (223.5 MB)
          Interrupt:19 Base address:0xc00

eth1      Link encap:Ethernet  HWaddr 00:1a:92:ef:8f:b8  
          inet addr:192.168.0.19  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21a:92ff:feef:8fb8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1837854 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1554677 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:241001373 (241.0 MB)  TX bytes:1517068285 (1.5 GB)
          Interrupt:252 Base address:0xe000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2064 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2064 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:90261 (90.2 KB)  TX bytes:90261 (90.2 KB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.15.1  P-t-P:192.168.15.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:1814 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:154070 (154.0 KB)  TX bytes:179608 (179.6 KB)


del lado del cliente
apt get install openvpn openssh-server
en /etc/openvpn/cliente.ovpn

client proto udp
dev tun0

#Dirección IP Pública del servidor OpenVPN
remote ipPublica 1194  #Coloca en Ip Publica los datos de tu servidor
ns-cert-type server
push route "LanInterna 255.255.255.0"            # Aqui va la red interna en donde se hace el ruteado
resolv-retry infinite
nobind persist-key
persist-tun
ca /etc/openvpn/keys/ca.crt                                #Los Certificados respectivos generados anteriormente
cert /etc/openvpn/keys/cliente1.crt
key /etc/openvpn/keys/cliente1.key
comp-lzo yes
verb 3
************************************************************************
Donde la validacion de los certificados se dan igualando  
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/cliente1.crt
key /etc/openvpn/keys/cliente1.key
hacia el servidor

***********************************************************************

Pruebas,
de Inicializacion

ejecucion de "sudo openvpn /etc/openvpn/cliente1.ovpn"
sudo: unable to resolve host multiterminal
[sudo] password for usuario2:
Sat Aug 29 09:32:12 2009 OpenVPN 2.1_rc7 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on May  8 2009
Sat Aug 29 09:32:12 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m
Sat Aug 29 09:32:12 2009 LZO compression initialized
Sat Aug 29 09:32:12 2009 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Sat Aug 29 09:32:12 2009 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Aug 29 09:32:12 2009 Local Options hash (VER=V4): '41690919'
Sat Aug 29 09:32:12 2009 Expected Remote Options hash (VER=V4): '530fdded'
Sat Aug 29 09:32:12 2009 Socket Buffers: R=[110592->131072] S=[110592->131072]
Sat Aug 29 09:32:12 2009 UDPv4 link local: [undef]
Sat Aug 29 09:32:12 2009 UDPv4 link remote: IpPublica:1194
Sat Aug 29 09:32:12 2009 TLS: Initial packet from 201.217.50.130:1194, sid=8dac6d35 8c5d98c1
Sat Aug 29 09:32:16 2009 VERIFY OK: depth=1, /C=PY/ST=_xC3_x91eembucu/L=Pilar/O=Unp/OU=Fca/CN=unp/emailAddress= This e-mail address is being protected from spambots. You need JavaScript enabled to view it
Sat Aug 29 09:32:16 2009 VERIFY OK: nsCertType=SERVER
Sat Aug 29 09:32:16 2009 VERIFY OK: depth=0, /C=PY/ST=_xC3_x91eembucu/L=Pilar/O=Unp/OU=Fca/CN=server/emailAddress= This e-mail address is being protected from spambots. You need JavaScript enabled to view it
Sat Aug 29 09:32:19 2009 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Sat Aug 29 09:32:19 2009 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Aug 29 09:32:19 2009 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Sat Aug 29 09:32:19 2009 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Aug 29 09:32:19 2009 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Sat Aug 29 09:32:19 2009 [server] Peer Connection Initiated with 201.217.50.130:1194
Sat Aug 29 09:32:20 2009 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sat Aug 29 09:32:20 2009 PUSH: Received control message: 'PUSH_REPLY,route LanVpn 255.255.255.0,topology net30,ping 10,ping-restart 120,dhcp-option DNS 192.168.0.19,dhcp-option WINS 192.168.0.17,dhcp-option DOMAIN GRUPOPDC,route LanInterna 255.255.255.0,ifconfig IpDado 192.168.15.5'
Sat Aug 29 09:32:20 2009 OPTIONS IMPORT: timers and/or timeouts modified
Sat Aug 29 09:32:20 2009 OPTIONS IMPORT: --ifconfig/up options modified
Sat Aug 29 09:32:20 2009 OPTIONS IMPORT: route options modified
Sat Aug 29 09:32:20 2009 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Sat Aug 29 09:32:20 2009 TUN/TAP device tun0 opened
Sat Aug 29 09:32:20 2009 TUN/TAP TX queue length set to 100
Sat Aug 29 09:32:20 2009 ifconfig tun0 IpDado pointopoint 192.168.15.5 mtu 1500
Sat Aug 29 09:32:20 2009 route add -net LanVpn netmask 255.255.255.0 gw 192.168.15.5
Sat Aug 29 09:32:20 2009 route add -net LanInterna netmask 255.255.255.0 gw 192.168.15.5
Sat Aug 29 09:32:20 2009 Initialization Sequence Completed

de Conexiones

Pude entrar al 192.168.0.19 (Server VPN) y al 192.168.0.17 (Server PDC) con ssh
tambien desde el explorador a ambos ip, y realizando ping al 192.168.0.17 dio esto

64 bytes from 192.168.0.17: icmp_seq=1 ttl=63 time=259 ms
64 bytes from 192.168.0.17: icmp_seq=2 ttl=63 time=221 ms
64 bytes from 192.168.0.17: icmp_seq=3 ttl=63 time=152 ms
64 bytes from 192.168.0.17: icmp_seq=4 ttl=63 time=236 ms
64 bytes from 192.168.0.17: icmp_seq=5 ttl=63 time=251 ms
64 bytes from 192.168.0.17: icmp_seq=6 ttl=63 time=206 ms
64 bytes from 192.168.0.17: icmp_seq=8 ttl=63 time=251 ms
64 bytes from 192.168.0.17: icmp_seq=9 ttl=63 time=226 ms
64 bytes from 192.168.0.17: icmp_seq=10 ttl=63 time=259 ms
64 bytes from 192.168.0.17: icmp_seq=11 ttl=63 time=263 ms
64 bytes from 192.168.0.17: icmp_seq=12 ttl=63 time=259 ms
64 bytes from 192.168.0.17: icmp_seq=13 ttl=63 time=276 ms
64 bytes from 192.168.0.17: icmp_seq=14 ttl=63 time=222 ms
64 bytes from 192.168.0.17: icmp_seq=15 ttl=63 time=271 ms
64 bytes from 192.168.0.17: icmp_seq=16 ttl=63 time=217 ms

ademas en el cliente podemos hacer impresion del enrutamiento viendo que el ip creado por la vpn "192.168.15.5" tiene como destino la red LAN de la UNP "LanInterna" de esta manera todo lo dirigido hacia la LAN de la Empresa debera pasar por la ip de VPN es lo que dice el flags "UG" de la 5ta columna "Use Gateway" Usar pasarela

usuario2@multiterminal:~$ route
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.15.5    *               255.255.255.255 UH    0      0        0 tun0
10.154.50.0     *               255.255.255.252 U     0      0        0 eth1
LanInterna     192.168.15.5    255.255.255.0   UG    0      0        0 tun0
LanVpn    192.168.15.5    255.255.255.0   UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth1
default         10.154.50.1     0.0.0.0         UG    100    0        0 eth1
usuario2@multiterminal:~$









Last modified on Monday, 30 May 2011 23:58
Juan Pablo González

Juan Pablo González

Diseñador de paginas web, administrador de redes y un apasionado por el software libre y la difusión de conocimientos

Website: www.juanpablo.netne.net E-mail: This e-mail address is being protected from spambots. You need JavaScript enabled to view it

Subscripciones

Cursos
Programación
Linux

Receive HTML?
Gracias..

Buscar

Estan en linea

We have 2 guests online