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.