documentos:seguridad:openvpn-easy-rsa

OpenVPN con easy-rsa

En términos generales se describe cómo se configura un server OpenVPN en la red interna que recibe las conexiones públicas por reenvío de puerto 1194/UDP desde el router o firewall de borde. Como resultado de la VPN, el client puede acceder a todos los equipos que están en la red privada 10.0.1.0/24, como muestra el siguiente esquema:

Estos son los pasos para dejar funcionando el servidor OpenVPN, utilizando los scripts que vienen con easy-rsa para generar los certificados.

apt-get update
apt-get install -y openvpn openssl

Tomar la configuración de ejemplo que viene con el paquete:

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

cd /etc/openvpn/
gzip -d server.conf.gz

Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma)

vim server.conf

# Esta ruta es pasada a los clientes para llegar a la red interna
push "route 10.0.1.0 255.255.255.0"

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

user nobody
group nogroup

Tomar la configuración que viene en el paquete

mkdir /etc/openvpn/easy-rsa
cp -rf /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

Editar el archivo de variables y adaptar las mismas al entorno donde va a funcionar la VPN:

vim vars

export KEY_COUNTRY="UY"
export KEY_PROVINCE="MVD"
export KEY_CITY="Montevideo"
export KEY_ORG="Pilas.Guru"
export KEY_EMAIL="info@pilas.guru"
export KEY_CN=openvpn-server
export KEY_NAME=server
export KEY_OU=server

Activar la configuración de openssl necesaria:

cp openssl-1.0.0.cnf openssl.cnf

Generar certificados para la Autoridad de Certificación:

source ./vars
./clean-all
./build-ca

Generar certificados para el servidor OpenVPN:

./build-key-server server

Generar certificados Diffie–Hellman:

./build-dh

copiar certificados generados al directorio /etc/openvpn para que queden disponibles para la VPN

cd /etc/openvpn/easy-rsa/keys
cp dh1024.pem ca.crt server.crt server.key /etc/openvpn

<WRAP center round important 60%> En el directorio /etc/openvpn servidor quedan los siguientes archivos:

  • server.conf
  • ca.crt
  • dh1024.pem
  • server.crt
  • server.key

</WRAP>

Se enmascara con la IP de la red interna todo el trafico que llega desde la VPN, para eso se configura iptables como sigue:

<WRAP center round tip 60%> no se puede configurar esta línea de iptables hasta tanto no esté levantada la VPN. Por ese motivo se configura en /etc/rc.local ya que es el ultimo script en que ejecuta en el arranque</WRAP>

vim /etc/rc.local
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Configurar forwarding entre las interfaces de red:

vim /etc/sysctl.conf
net.ipv4.ip_forward=1

Activar el forwarding configurado:

sysctl -p

Para que inicie OpenVPN descomentar la variable AUTOSTART:

vim /etc/default/openvpn

AUTOSTART="all"

La operación de instalación del cliente debe ser realizada para cada cliente que se va a conectar en la VPN.

apt-get update
apt-get install -y openvpn openssl

Tomar la configuración de ejemplo que viene con el paquete:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma)

cd /etc/openvpn/
vim client.conf

remote IP-o-hostname-server 1194
user nobody
group nogroup

<WRAP center round info 60%> En la linea remote se coloca el nombre o dirección IP pública del servidor de VPN. Se especifica cómo llega el cliente al servidor para armar la VPN.

A esta dirección se debe acceder mediante puerto 1194/udp que es la configuración por defecto de OpenVPN. </WRAP>

<wrap em>Esta operación se ejecuta en el servidor</wrap>

cd /etc/openvpn/easy-rsa
source ./vars
./build-key client

copiar del servidor los archivos:

  • /etc/openvpn/easy-rsa/keys/ca.crt
  • /etc/openvpn/easy-rsa/keys/client.crt
  • /etc/openvpn/easy-rsa/keys/client.key

y colocarlos en el cliente en la carpeta /etc/openvpn/

<WRAP center round important 60%> En el directorio /etc/openvpn cliente quedan los siguientes archivos:

  • client.conf
  • ca.crt
  • client.crt
  • client.key

</WRAP>

En el cliente se inicia el servicio de openvpn:

service openvpn start

Una vez levantada la VPN aparece una interfaz tun0 que presenta las IP de la VPN tanto en el servidor como el cliente.

Servidor: en caso de problemas verificar:

  • cadena POSTROUTING de la tabla nat, con el comando 'iptables -L -n -t nat'
  • archivo /proc/sys/net/ipv4/ip_forward que tiene que tener un 1
  • registro del log en el archivo /var/log/daemon.log

Cliente: por la configuración dada, se modifica:

  • archivo /etc/resol.conf agregando los DNS 8.8.8.8 y 8.8.4.4.
  • se agrega a la tabla de rutas cómo llegar a la red detras de la VPN (10.0.1.0), verificar con el comando 'ip route show'
  • se debe poder llegar con ping a cualquier host de la red 10.0.1.0

Si se necesita remover un cliente, para que ya no tenga acceso a la VPN, los comandos son:

 cd /etc/openvpn/easy-rsa
 source ./vars
 ./revoke-full client
  • documentos/seguridad/openvpn-easy-rsa.txt
  • Última modificación: 2014/12/16 17:05
  • por 127.0.0.1