OpenVPN es una VPN SSL con todas las funciones que implementa la extensión de red segura de capa 2 o 3 de OSI mediante el uso del protocolo SSL/TLS estándar de la industria. Admite métodos flexibles de autenticación de clientes basados en certificados, tarjetas inteligentes y/o credenciales de nombre de usuario/contraseña, y permite políticas de control de acceso específicas de usuarios o grupos mediante reglas de firewall aplicadas a la interfaz virtual VPN. OpenVPN no es un proxy de aplicación web y no funciona a través de un navegador web.
Preparación del servidor
Para este tutorial, vamos a utilizar un servidor Debian o Ubuntu. Puede utilizar cualquier servidor que ya tenga en producción.
Instalación de OpenVPN
Todas las distribuciones conocidas de servidores Linux y UNIX tienen OpenVPN en su repositorio. La instalación es tan simple como ejecutar:
apt-get install openvpn
Configuración del cortafuegos
El puerto de escucha predeterminado para OpenVPN es 1194. Es seguro usar el puerto predeterminado. OpenVPN usa el protocolo UDP por defecto. Hay una razón simple para esto:
OpenVPN usa la capa 2 y 3
- La capa 2 es la capa de enlace de datos que proporciona una transferencia sin errores de tramas de datos a través de la capa física, lo que significa que utiliza su propio dispositivo de red TUN/TAP.
- La capa 3 es la capa de red que proporciona enrutamiento.
y esto significa que la capa 4 (capa de transporte que garantiza la entrega de paquetes) es administrada por el propio sistema operativo y la aplicación. En pocas palabras, cualquier control de tráfico y control de entrega de paquetes lo realiza el sistema operativo, por lo tanto, no es necesario que OpenVPN lo haga dos veces. Por supuesto, hay una opción para usar TCP para OpenVPN, lo que significa que se desperdician más recursos, pero en el caso de algunos entornos especiales, puede ser útil.
En resumen, abrir el puerto 1194 para UDP es suficiente para permitir la conexión VPN. No se necesita filtrado ya que OpenVPN tiene su propia verificación y control implementados (ver en una sección posterior). Agregue la siguiente declaración en la configuración de su firewall.
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
Configuración del servidor
Después de una instalación exitosa de OpenVPN, puede encontrar todos los archivos de configuración de OpenVPN en la carpeta /etc/openvpn. Abramos el archivo server.conf en nuestro editor y editémoslo.
nano /etc/openvpn/server.conf
Revisa y edita las siguientes secciones:
# SSL/TLS root certificate (ca), certificate
# (cert), and private key (key).
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key # This file should be kept secret
# Diffie hellman parameters.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Configure server mode and supply a VPN subnet
server 10.9.8.0 255.255.255.0
# Push routes to the client
push "route 10.9.8.0 255.255.255.0"
# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 # This file is secret
# Select a cryptographic cipher.
cipher AES-128-CBC # AES
# Enable compression on the VPN link.
comp-lzo
# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
user vpn
group vpn
Como elegimos la subred 10.9.8.0/24 como subred interna, su cliente obtendrá una dirección IP de esta subred después de conectarse. Por defecto, 10.9.8.1 está reservado para el propio servidor.
Generando certificados
Primero, tenemos que editar las vars expediente. Complete los parámetros KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG y KEY_EMAIL. Estos valores se utilizarán cada vez que genere un nuevo certificado.
Para cargar el archivo vars, ejecute:
./vars
Después de cargarlos, podemos crear una autoridad de certificación:
./clean-all
./build-ca
Cuando se haya generado la CA, continúe con la generación de certificados de servidor:
./build-key-server server
Y un certificado más para el cliente:
./build-key client
Después de todo, tenemos que generar parámetros DH:
./build-dh
Más seguridad
Para asegurarnos de que hemos asegurado nuestro servidor OpenVPN, vamos a utilizar tls-auth. Esto garantiza que no enviaremos nuestros certificados a servidores comprometidos.
openvpn –genkey –secret ta.key
Este archivo ta.key debe incluirse ahora en el paquete de certificados de cada cliente.
Configuración del cliente
##############################################
# 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-Windows 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 <your-server-ip> 1194
;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
cert client.crt
key client.key
# 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 AES-128-CBC
# 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
Guárdelo como archivo client.ovpn e incluya ta.key, ca.crt, client.crt, client.key en una carpeta.
Después de instalar el cliente openvpn en su computadora y ejecutar el archivo de configuración client.ovpn, debería poder conectarse a su servidor VPN. Después de eso, obtiene una dirección IP del rango 10.9.8.0/24 que configura y coopera con su servidor de forma privada.