lunes, noviembre 08, 2010

OpenVPN Debian (RoadWarriors)

OpenVPN Debian (RoadWarriors)

El objetivo es que los usuarios se puedan conectar con la oficina cuando están fuera de ella de forma segura y puedan hacer uso de todos los recursos en forma similar a cuando están en la misma.

Instalación de OpenVPN paso a paso para soportar roadwarriors en Linux (Debian, similar para otras distribuciones) y Windows. Basado en este post http://routerman.blogsome.com/2007/08/30/roadwarrior-en-openvpn-debian-etch/ , pero actualizado en algunos detalles. La parte del servidor Linux
# Don't leave any of these fields blank. export KEY_COUNTRY="PA" export KEY_PROVINCE="PA" export KEY_CITY="Panama" export KEY_ORG="Panama" export KEY_EMAIL="me@myhost.mydomain"
  • ejecutar: . vars (hay un punto adelante de vars)
  • ejecutar: ./clean-all (para eliminar cualquier cosa anterior)
  • ejecutar: ./build-ca
Esto último produce los siguientes archivos:
/etc/openvpn/easy-rsa/2.0/keys# ls ca.crt ca.key index.txt serial 01.pem ca.crt ca.key dh1024.pem index.txt index.txt.attr index.txt.old serial serial.old servidor.crt servidor.csr servidor.key * copiar ca.crt, servidor.crt, servidor.key, dh1024.pem de /etc/openvpn/easy-rsa/2.0/keys a /etc/openvpn
  • Contenido del archivo server.conf que va en /etc/openvpn:
  • *******************************************************************************
# puerto 5000 es recomendado en lugar del 1194 port 5000 proto udp dev tun persist-tun ca ca.crt cert servidor.crt key servidor.key dh dh1024.pem #Direcciones que se asignaran a los #clientes, el server es .1 server 10.1.1.0 255.255.255.0 ifconfig-pool-persist ipp.txt #Ruta para que los clientes alcancen la red local del server (1.0/24) #ajustar de acuerdo a la red que se va a rutear push "route 192.168.1.0 255.255.255.0" #Para que los clientes se visualicen entre ellos client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 4
  • ********************************************************************************
  • editar /etc/default/openvpn : poner AUTOSTART="server" (para que cargue la configuración server.conf que hicimos anteriormente al iniciar)
  • Generar las llaves de cada cliente (en nuestro caso edgardo) desde /etc/openvpn/easy-rsa/2.0
  • ./build-key edgardo
  • Esto genera los archivos adicionales:
    edgardo.crt edgardo.csr edgardo.key
en mi caso uso un firewall iptable. admito el acceso al puerto 5000: $IPTABLES -A INPUT -s 0.0.0.0/0 -p UDP --dport 5000 -m state --state NEW -j ACCEPT La parte del Cliente Linux
  • Copiar los archivos generados anteriormente (en el servidor) al directorio /etc/openvpn del cliente:
ca.crt edgardo.crt edgardo.key
  • Contenido del archivo cliente.conf que va en /etc/openvpn:
  • *****************************************************************************
client dev tun proto udp remote url_o_ip_del_servidor.com float #debido a que la IP de arriba es dinamica resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert edgardo.crt key edgardo.key comp-lzo
  • ***********************************************************************************
  • editar /etc/default/openvpn : poner AUTOSTART="cliente" (para que cargue la configuración cliente.conf que hicimos anteriormente al iniciar)
  • Esto sería todo para el cliente Linux, reiniciar el openvpn en ambas máquinas y listo (/etc/init.d/openvpn restart)
La parte del Cliente Windows Instalar http://openvpn.net/release/openvpn-2.1.3-install.exe o la versión disponible en http://openvpn.net/index.php/open-source/downloads.html donde quedó la instalación (archivos de programas o la que sea) hay un directorio llamado config, copiar ahí los siguientes archivos (eliminar todo lo existente primero) creados anteriormente: ca.crt edgardo.crt edgardo.key
  • Además del siguiente archivo de configuración edgardo.ovpn (es simple texto)
  • *************************************************************************************
##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server. #
# #
# This configuration can be used by multiple #
# clients, however each client should have #
# its own cert and key files. #
# #
# On Windows, you might want to rename this #
# file so it has a .ovpn extension #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one. On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server? Use the same setting as
# on the server.
;proto tcp
proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.

remote url_o_ip_del_servidor.com 5000 ############ojo esta es la línea importante

;remote my-server-2 1194

# Choose a random host from the remote
# list for load-balancing. Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here. See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets. Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.

ca ca.crt ############ojo esta es la línea importante
cert edgardo.crt ############ojo esta es la línea importante
key edgardo.key ############ojo esta es la línea importante

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server". This is an
# important precaution to protect against
# a potential attack discussed here:
# http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server". The build-key-server
# script in the easy-rsa folder will do this.
ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20
***************************************************************************
Opcionalmente se puede poner el OpenVPN GUI para iniciarse automáticamente copiando el acceso directo al menú de inicio.