IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Paquets Debian

Llista de paquets

$ apt-cache search openvpn
openvpn - virtual private network daemon
openvpn-blacklist - list of blacklisted OpenVPN RSA shared keys
anytun - secure anycast tunneling protocol
collectd-core - statistics collection and monitoring daemon (core system)
ebox-openvpn - Zentyal - VPN Service
eurephia - flexible OpenVPN authentication module
gadmin-openvpn-client - GTK+ configuration tool for openvpn (client)
gadmin-openvpn-client-dbg - GTK+ configuration tool for openvpn (debug for client)
gadmin-openvpn-server - GTK+ configuration tool for openvpn (server)
gadmin-openvpn-server-dbg - GTK+ configuration tool for openvpn (debug for server)
gadmintools - GTK+ server administration tools (meta-package)
kvpnc - vpn clients frontend for KDE4
network-manager-openvpn - network management framework (OpenVPN plugin core)
network-manager-openvpn-gnome - network management framework (OpenVPN plugin GNOME GUI)
openvpn-auth-ldap - OpenVPN LDAP authentication module
openvpn-auth-radius - OpenVPN RADIUS authentication module
openvpn-auth-radius-dbg - debugging symbols for openvpn-plugin-radius
tunneldigger - Configures OpenVPN tunnel networks
tunneldigger-utils - Utilities for TunnelDigger-configured OpenVPN tunnels


Client OpenVPN

Linux. Network Manager

Cal instal·lar el paquet network-manager-openvpn:

$ sudo apt-get install network-manager-openvpn

NOTA: Si esteu a Gnome també instal·larà network-manager-openvpn-gnome

Ara aneu a:

networ-manager > Connexions VPN > Configura la VPN
TODO: Captures de pantalla

TODO...

IMPORTANT: A advanced cal activat que la connexió sigui per TCP si utilitzeu un servidor OpenVPn de microtik/routerOS (routerOS no suporta UDP)

Per depurar cal consultar el fitxer:

$ sudo tail -f /var/log/syslog

Debian/ubuntu

Podeu utilitzar Network Manager instal·lat el plugin:

$ sudo apt-get install network-manager-openvpn

Android

TODO

Windows

OpenVPN GUI can be downloaded at http://www.openvpn.se/download.html .

Servidor OpenVPN

Instal·lació

Per instal·lar el servidor a un sistema de la família Debian:

$ sudo apt-get install openvpn

Els fitxers instal·lats són:

Fitxers de configuració:

$ dpkg -L openvpn | grep etc
/etc
/etc/openvpn
/etc/openvpn/update-resolv-conf
/etc/network
/etc/network/if-up.d
/etc/network/if-up.d/openvpn
/etc/network/if-down.d
/etc/network/if-down.d/openvpn
/etc/bash_completion.d
/etc/bash_completion.d/openvpn
/etc/default
/etc/default/openvpn
/etc/init.d
/etc/init.d/openvpn

L'executable és :

$ dpkg -L openvpn | grep bin
/usr/sbin
/usr/sbin/openvpn

La resta de fitxers són la documentació que es troba a la carpeta:

/usr/share/doc/openvpn

I llibreries i manuals.

Protocol i ports

OpenVPN utilitza una infraestructura client-servidor on el clients OpenVPN accedeixen a un servidor VPN utilitzant el port 1194:

$ cat /etc/services | grep 1194
openvpn		1194/tcp
openvpn		1194/udp

Tipus de servidors

Static key vs PKI (Public Key Infrastructure)

Hi ha dos formes de treballar amb OpenVPN: clau estàtica i PKI (Public Key Infraestructure)

Static Key

Avantatges:

  • Configuració senzilla
  • No cal mantenir cap infraestructura PKI

Inconvenients:

  • Escal.labilitat limitada: un client -> un servidor
  • Lack of perfect forward secrecy -- key compromise results in total disclosure of previous sessions. TODO!
  • Cal compartir un clau secreta en format de text pla a cada Peer VPN
  • La clau privada s'ha de precompartir mitjançant algun canaa segur.

PKI

  • Configuració més complicada
  • Seguretat molt alta

Routed vs bridged

  • Routed server: Les interfícies es diuen tun. En aquest cas estem fent una VPN de capa 3.
  • Bridged server: Les interfícies es diuen tap. En aquest cas estem fent una VPN de capa 2 (Layer 2 Ethernet bridging)

Quan utilitzar un tipus o l'altre?

Sovint l'opció de routing és la millor opció per a la majoria dels casos ja que és més eficient i és més fàcil de configurar. També permet un millor control dels drets d'accés dels clients.

Normalment es recomana utilitzar routing a no ser que desitgeu:

  • Que la VPN necessiti treballar amb protocols no IP (per exemple IPX)
  • S'executin aplicacions que utilitzin broadcast
  • Es vulgui per exemple utilitzar les opcions de Browsing de la xarxa de Windows o Samba sense configurar un servidor WINS.

A RouterOS les anomenen mode ip (routed) o mode Ethernet (bridge). Vegeu dos exemples de configuració del client OpenVPN.

Ip (routed):

/interface ovpn-client \
 add name="ovpn-out1" connect-to=189.64.0.1 port=1194 mode=ip user="username" password="password" profile=default \
 certificate=vpngate-client cipher=aes256 add-default-route=no

Ethernet (bridge)

/interface ovpn-client \
 add name="ovpn-out1" connect-to=189.64.0.1 port=1194 mode=ethernet user="username" password="password" profile=default \
 certificate=vpngate-client cipher=aes256 add-default-route=no

Recursos:

Linux. Debian/Ubuntu

TODO

Debian provides OpenVPN packages as part of the standard distribution, just install them by typing

$ sudo apt-get install openvpn

Per a un servidor a més caldrà openssl:

$ sudo apt-get install openssl

TODO

Configuració amb clau estàtica

Aquest exemple mostra com crear una configuració simple amb OpenVPN i una connexió point-to-point. Un túnel VPN serà crear entre un servidor amb la IP 10.8.0.1 i un client amb la IP 10.8.0.2. Encrypted communication between client and server will occur over UDP port 1194, the default OpenVPN port.

El primer que cal fer és crear una clau estàtica:

$ openvpn --genkey --secret static.key

Ara copieu la clau tant al client com al servidor.

El fitxer de configuració del servidor:

dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key

I el del client:

remote myremote.mydomain
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key

Configuració del firewall:

Cal obrir el port UDP 1194

Millores:

Utilitzar compressió:

Cal afegir al client i al servidor:

comp-lzo

Per a links amb NAT i adreces IP públiques que canvien:

Cal afegir al client i al servidor:

   keepalive 10 60
   ping-timer-rem
   persist-tun
   persist-key

Afegir accés a la xarxa del servidor OpenVPN:

Suposem que el servidor està connectat a la xarza 192.168.4.0/24. Afegiu les següents línies al client:

route 192.168.4.0 255.255.255.0

Si el servidor no és el gateway per defecte de la xarxa especificada també caldrà la ruta de tornada. No us oblideu d'activar IP forwarding al servidor OpenVPN.

Recursos:

PKI. Public Key Infraestructure

Per establir una infraestructura de clau pública (aka PKI o Public Key Infrastructure) cal:

  • Un certificat SSL per a cada client i per al servidor (els certificats contenen la clau pública) a més de les corresponents claus privades.
  • Un certificat mestre CA ( master Certificate Authority) i la seva corresponen clau privada que s'utilitza per signar els certificats dels servidors i els clients.

OpenVPN suporta la autenticació bidireccional tant de client com de servidor, és a dir que tant el client ha d'autenticar el servidor com el servidor ha d'autenticar els clients.

El primer que faran tant el servidor com el client es verificar que el certificat de l'altre està signat correctament pel certificat de la CA. Un cop verificada la signatura a més es comprova:

  • El Certificate common name
  • El tipus de certificat (client o servidor).

Això té els següents avantatges:

  • El servidor només necessita el seu propi parell de claus asimètriques: certificat + clau privada. No necessita conèixer tots els certificats de cada possible client, coneixen el certificat del CA pot verificar els certificats clients verificant la signatura (cal però firmar abans els certificats client amb el certificat del CA.)
  • El servidor només acceptarà certificats signats pel CA. A més aquesta verificació es pot fer sense necessitat de disposar de la clau privada del CA. Això té com avantatge que aquesta clau (que és la part més delicada de tota la infraestructura) no té ni per què estar al servidor OpenVPN. Per exemple pot estar a una màquina sense accés a Internet per a més seguretat.
  • Si una clau privada es veu compromesa, es pot desactivar afegint-la al CRL (Certificate revocation list). Això permet descartat claus compromeses sense necessitat de tornar a muntar tota la infraestructura PKI.
  • El servidor pot forçar certs controls d'accés segons els camps del certificat client, com per exemple el Common Name.

IMPORTANT: Cal tenir en compte que els rellotges del client i del servidor han d'estar sincronitzats per tal que els certificats funcionin correctament. Es recomana l'ús de NTP.

Creació de certificats SSL

Hi ha múltiples formes de crear un certificat SSL i tot depèn del objectiu del certificat i del tipus de certificat que voleu crear. Una de les primeres decisions que heu de prendre és si el certificat SSL voleu que sigui autosignat o signat per una entitat certificadora (CA).

El paquet OpenVPN us proporciona ajuda per tal de facilitar-vos la creació de certificats SSL. Instal·leu el paquet openvpn

$ sudo apt-get install openvpn

A la carpeta:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/

Trobareu l'eina anomenada Easy-RSA que forma part del paquet OpenVPN... Per tal de poder utilitzar Easy-rsa és necessari tenir instal·lar openssl:

$ sudo apt-get install openssl

Ara per crear el certificat seguiu les següents passes. Obtingueu un copia de treball de la carpeta easy-rsa:

$ sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

En aquest cas hem decidit deixar la copia a la carpeta /etc/openvpn/easy-rsa. Això es recomanat pel propi manual de OpenVPN així en cas d'actualització del paquet OpenVPN no es veu modificada aquesta carpeta. Abans de crear el certificat cal configurar el fitxer vars:

$ cd /etc/openvpn/easy-rsa
$ sudo joe vars

El contingut del fitxer és:

# easy-rsa parameter settings

# NOTE: If you installed from an RPM,
# don't edit this file in place in
# /usr/share/openvpn/easy-rsa --
# instead, you should copy the whole
# easy-rsa directory to another location
# (such as /etc/openvpn) so that your
# edits will not be wiped out by a future
# OpenVPN package upgrade.

# This variable should point to
# the top level of the easy-rsa
# tree.
export EASY_RSA="`pwd`"

#
# This variable should point to
# the requested executables
#
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
 

# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`

# Edit this variable to point to
# your soon-to-be-created key
# directory.
#
# WARNING: clean-all will do
# a rm -rf on this directory
# so make sure you define
# it correctly!
export KEY_DIR="$EASY_RSA/keys"

# Issue rm -rf warning
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR

# PKCS11 fixes
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy" 

# Increase this to 2048 if you
# are paranoid.  This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=1024

# In how many days should the root CA key expire?
export CA_EXPIRE=3650

# In how many days should certificates expire?
export KEY_EXPIRE=3650

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

Configureu:

export EASY_RSA="/etc/openvpn/easy-rsa"
export KEY_DIR="/etc/openvpn/keys"

Normalment també voldreu modificar les variables:

KEY_COUNTRY
KEY_PROVINCE 
KEY_CITY
KEY_ORG
KEY_EMAIL

Als valors que us pertoquin.

Heu de crear la carpeta on guardareu les claus:

$ sudo mkdir /etc/openvpn/keys

Ara canvieu temporalment a superusuari:

$ sudo su -
# cd /etc/openvpn/easy-rsa

Un cop modificat fer un include de bash amb:

# . ./vars 

o

# source ./vars

Abans de crear la clau feu neteja:

# ./clean-all

Ara anem a crear el CA ( Certificate Authority )

./build-ca

NOTA: El build-ca és un script que executa l'ordre pkitool

Això crea els fitxers:

$ ls /etc/openvpn/keys/
ca.crt  ca.key

On ca.crt és el certificat en si i ca.key és la clau privada del certificat anterior. El fitxer ca.key cal guardar-lo molt bé per què ha de se ser secret.

Ara generem el certificat del servidor:

# ./build-key-server server

On server és el nom que voleu assignar al servidor. Podeu contestra el que vulgueu però és MOLT IMPORTANT que el Common Name del servidor conincideixi amb el que heu posat per línia d'ordres (a l'exemple server). També heu de contestar el següent:

Sign the certificate? [y/n] poseu y
"1 out of 1 certificate requests certified, commit? [y/n]" poseu y

Ara trobareu els fitxers:

# ls -la /etc/openvpn/keys/
total 48
drwx------ 2 root root 4096 2012-01-02 12:00 .
drwxr-xr-x 3 root root 4096 2012-01-02 11:57 ..
-rw-r--r-- 1 root root 3939 2012-01-02 12:00 01.pem
-rw-r--r-- 1 root root 1265 2012-01-02 11:58 ca.crt
-rw------- 1 root root  916 2012-01-02 11:58 ca.key
-rw-r--r-- 1 root root  117 2012-01-02 12:00 index.txt
-rw-r--r-- 1 root root   21 2012-01-02 12:00 index.txt.attr
-rw-r--r-- 1 root root    0 2012-01-02 11:57 index.txt.old
-rw-r--r-- 1 root root 3939 2012-01-02 12:00 ovpn-server.crt
-rw-r--r-- 1 root root  688 2012-01-02 12:00 ovpn-server.csr
-rw------- 1 root root  916 2012-01-02 12:00 ovpn-server.key
-rw-r--r-- 1 root root    3 2012-01-02 12:00 serial
-rw-r--r-- 1 root root    3 2012-01-02 11:57 serial.old

Per generar els certificats de cada client:

Per exemple per al client 1

# ./build-key client1
Generating a 1024 bit RSA private key
.......++++++
.......................++++++
writing new private key to 'client1.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'me@myhost.mydomain'
Certificate is to be certified until Dec 30 11:03:24 2021 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

IMPORTANT: Cal fer coincidir el CN amb el que s'ha posar a la línia d'ordres per a cada client!

Per a cada client cal fer el mateix.

És molt possible que haguiu de passar els certificats format PEM:

$ openssl rsa -in /etc/openvpn/keys/client1.key -out /etc/openvpn/keys/client1.pem

Per tal de poder-lo utilitzar en alguns sistemes com RouterOS

TODO: Comprovar si cal?

Generate Diffie Hellman parameters
Diffie Hellman parameters must be generated for the OpenVPN server. On Linux/BSD/Unix:

./build-dh

Podeu trobar més informació sobre certificats SSL a:

SSL#Certificats

Recursos:

Configuració bridged

Mikrotik router OS OpenVN server

Consulteu OpenVPN Microtik

Vegeu també

Enllaços externs