TL;DR

Al cambiar de portatil, he encontrado este borrador sobre como instalar OpenVPN en un raspberry pi. Aprovechando que he tenido que reinstalar el SO ( no escatimeis en tarjetas SD buenas ), os lo pongo por aqui. Esta MUY desactualizado, ( los ultimos cambios en el SO han hecho que deje de funcionar asi ), asi que si os apetece probar, ir directamente a PIVPN.

 

Eso si, os hareis enemigos del FBI ( ya han dictaminado que las VPN son para terroristas ) y del gobierno britanico ( han aprobado un plan de espionaje sin juez para todos los ciudadanos, excepto los diputados  )

 

**************************************************************************

Como su propio nombre indica, es una red privada virtual. Se crea a partir de una conexiona internet existente, para comunicar de manera segura con nuestros propios servidores.

De esta manera, todo nuestro trafico de datos, es “invisible” al resto de la red.

Proveedores de VPN’s hay muchos, tantos como usos podemos dar a la conexion. Algunos proveedores son gratuitos, otros cobran un precio. Algunos limitan el ancho de banda, otros no ponen limites ( hasta cierto punto, claro )

Pero nosotros somos mas divertidos, y no queremos depender de nadie. Vamos a crear nuestra propia red, y vamos a aprovechar nuestra conexion de adsl casera para navegar desde cualquier lugar del mundo. Ya que pago por 24 horas de servicio, porque no voy a usarlo? Así, la proxima vez que te conectes a una red wifi abierta y gratuita, podras navegar seguro.

Recuerda, si alguien te ofrece un servicio gratuito, el servicio eres tu.

 

ventajas

Obvio, nadie puede saber que hacemos ( hasta cierto punto, claro )

En algun momento, nuestro trafico debe salir de la vpn. pero sera desde un punto que nosotros “controlamos”, o al menos somos conscientes de donde está ( nuestra conexion en casa, un servidor privado alquilado, ..)

 

desventajas

La unica desventaja es ninguna.

 

Porque

Creo que ya lo he dicho, seguridad. No estar seguro al conectarte a una red desconocida. No sabes quien te esta espiando ( y lo hacen, no es paranoia ). Por defecto, el trafico web desde tu movil u ordenador lo puede leer cualquiera.

Con este invento, vamos a ponerlo mas dificl. De paso mando un caluroso saludo a la NSA, CESID, BND, MI5, y tantos otros que me olvido.

Que necesitamos

hw

Poca cosa. Una raspberry Pi. Hay muchos modelos actualmente. Como minimo, un modelo B. Deseable un modelo B+.

Una tarjeta SD. Con 8 Gb será suficiente, aunque con los precios actuales, no importa si es mayor. Si aun no tienes una rasp, es muy facil obtener un pack con tarjeta, carcasa y alimentador. Este ultimo es mas facil, pues es un cargador de movil estandar micro-usb de 1A.

Por supuesto, un cable ethernet, categoria 5e o superior.

 

sf

configuracion

Ahora empieza lo divertido.

 

Desde la web de rasp, instala NOOBS, y configura Raspbian. Copia y pega, no tiene mas complicacion.

Ahora, configura una direccion IP estatica que corresponda con tu red interna.        10.0.10.9

Comprueba que esta habilitado el protocolo SSH ( deberia ser por defecto ), pues para poder acceder a la rasp lo vamos a necesitar, y asi no dependeremos de teclado, monitor y demas.

Conectate a tu router, y enruta el puerto 1194 UDP a la direccion IP que has configurado en tu rasp. La configuracion en este caso depende de tu modelo en particular, pero por lo general puedes acceder via web, y veras la opcion facilmente.

 

Empezamos con lo divertido. Sientate relajado, y conectate via SSH a la rasp ( por defecto el usuario-passowrd en pi & raspberry ) Desde windows necesitas un programa, te recomiendo Putty.

Cambia el password, antes de continuar con

sudo passwd

Ahora, actualizamos los paquetes a la ultima version con

sudo apt-get update

sudo apt-get upgrade

 

diez minutitos despues, vamos a instalr el motor de la vpn ( para eso estamos squi )

sudo apt-get install openvpn

 

Pasamos ahora a crear un juego de claves seguras. Al fin y al cabo, ese es el misterio.

Openvpn funciona en base a RSA, podeis leer algo sobre el tema en la wikipedia.

 

En nuestra consola SSH, pasamos a modo administrador con

sudo -s

De esta forma, las siguientes configuraciones se realizaran sin errores.

 

Vamos a copiar el contenido generado por la instalacion, en donde nosotros almacenaremos las claves. Siempre es mejor no depender de las localizaciones por defecto.

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

 

Ahora editamos el siguiente archivo

cd /etc/openvpn/easy-ras/   –> nos movemos a la ruta donde se encuentra el archivo

nano vars  –> abrimos el archivo para edicion

Busca una variable llamada “EASY-RSA” ( sin comillas ), y cambia su valor a

export EASY-RAS=”/etc/openvpn/easy-rsa”

y confirmamos ques esta es la ruta donde queremos guardar nuestras claves.

 

Guarda los cambios, y cierra nano.

 

Vamos a convertir la rasp en una entidad certificadora. Te has fijado en los candaos que aparecen el tu navegador al llegar a una web segura? Eso es porque estan certificadas por una entidad, mas o menos lo que vamos a hacer.

 

Ve al directorio ( si no has cmabiado )

cd /etc/openvpn/easy-rsa

y escribe

source ./vars

./clean-all –> elimina las claves que pueda haber creadas, para evitar confusiones

./build-ca –> ahora si, ya estas creando tu entidad certificadora

Te pedira un monton de datos ( pais, nombre, …. ) si no te apetece escribir, deja lo que te aparezca, y continua.

Apunta los datos que escribes ( o no ), mas tarde vas a necesitar alguno.

Continuamos ( igual que antes, apunta los nombres que escribas )

./build-key-server nombre-de-servidor bocata-vpn

 

Atento, estos dos pasos DEBES dejarlos en blanco

A challenge password []:

An optional company name []:

Por ultimo te pregunta si quieres firmar el certificado. Pues claro que si, hombre.

Atentos, el certificado caduca en 10 años, no te olvides de renovarlo.

 

Por el momento el servidor esta terminado. Vamos a por los clientes. Tenemos que crear tantas claves de cliente como conexiones simultaneas queremos tener ( portaitil, movil, … )

./build-key-pass nombrecliente        empanada

 

Enter PEM pass phrase: –> utiliza una contraseña que seas capaz de recordar ( no, no vale usar asdf o similares )

A challenge password []: –> de nuevo dejalo en BLANCO

y por supuesto, firma el certificado

 

Ahora vamos a encriptar la clave, no queremos que sea presa facil

cd keys

root@raspberrypi:/etc/openvpn/easy-rsa/keys# openssl rsa -in empanada.key -des3 -out empanada.3des.key

al hacer esto, te pide la contraseña

 

Vamos a por el intercambio de claves.

en la ruta

/etc/openvpn/easy-rsa/keys

escribe

./build-dh

 

toma un rato, pues se dedica a crear numeros aleatorios.

 

Como somos un poco puñeteros con la seguridad, vamos a implementar una defensa contra taques DOS, tan habituales en estos tiempos.

openvpn –genkey –secret keys/ta.key –> estamos diciendo que a menos que detecte nuestra clave de usuario, ignore todas las peticiones de conexion.

 

 

vamos a editar la configuracion de openvpn, para poder darle los detalles necesarrios

nano /etc/openvpn/server.conf

 

Como ves, el archivo esta en blanco. Te recomiendo que copies esto:

 

local 10.0.10.9 # SWAP THIS NUMBER WITH YOUR RASPBERRY PI IP ADDRESS

dev tun

proto udp #Some people prefer to use tcp. Don’t change it if you don’t know.

port 1194

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/bocata-vpn.crt # SWAP WITH YOUR CRT NAME

key /etc/openvpn/easy-rsa/keys/bocata-vpn.key # SWAP WITH YOUR KEY NAME

dh /etc/openvpn/easy-rsa/keys/dh1024.pem

server 10.8.0.0 255.255.255.0

# server and remote endpoints

ifconfig 10.8.0.1 10.8.0.2

# Add route to Client routing table for the OpenVPN Server

push “route 10.8.0.1 255.255.255.255”

# Add route to Client routing table for the OpenVPN Subnet

push “route 10.8.0.0 255.255.255.0”

# your local subnet

push “route 10.0.10.9 255.255.255.0” # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS

# Set primary domain name server address to the SOHO Router

# If your router does not do DNS, you can use Google DNS 8.8.8.8

push “dhcp-option DNS 10.0.10.10”

# Override the Client default gateway by using 0.0.0.0/1 and

# 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of

# overriding but not wiping out the original default gateway.

push “redirect-gateway def1”

client-to-client

duplicate-cn

keepalive 10 120

tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0

cipher AES-128-CBC

comp-lzo

user nobody

group nogroup

persist-key

persist-tun

status /var/log/openvpn-status.log 20

log /var/log/openvpn.log

verb 1

 

vas a tener que cambiar detalles, cmo la direcion IP de tu rasp, los nombres de tus claves de servidor,… ( las lineas estan marcadas con # )

 

Para que la rasp enrute trafico desde internet a nuestra red ( por defecto no es asi ), abre

nano /etc/sysctl.conf

y descomenta ( elimina el # ) la liena

#net.ipv4.ip_forward=1

 

salva todos los cambios realizados con

 

sysctl -p

 

cambiamos la configuracion del firewall, para evitarnos lios

 

nano /etc/firewall-openvpn-rules.sh

es un archivo en blanco, donde solo debes añadir

#!/bin/sh

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT –to-source 10.0.10.9 –> la IP de tu rasp

 

cambiamos los permisos, para convertr este archivo en ejecutable

chmod 700 /etc/firewall-openvpn-rules.sh

chown root /etc/firewall-openvpn-rules.sh

 

Editando el siguiente archivo, hacemos que la configuracion se cargue en el arranque

 

nano /etc/network/interfaces

 

debajo de

iface eth0 inet manual

escribe

pre-up /etc/firewall-openvpn-rules.sh

 

 

ahora un reinicio con

 

sudo shutdown -r

 

y estamos listos para continuar con los clientes

 

 

Para configurar los clientes, vamos a utilizar un script que nos ayudara a automatizar el proceso.

para eso editamos el siguiente fichero

 

nano /etc/openvpn/easy-rsa/keys/default.txt

 

y escribimos esto:

client

dev tun

proto udp

remote bocata.dtdns.net 1194

resolv-retry infinite

nobind

persist-key

persist-tun

mute-replay-warnings

ns-cert-type server

key-direction 1

cypher AES-128-CBC

comp-lzo

verb 1

mute 20

 

 

Crea el siguiente archivo ( la extension .sh indica que es un ejecutable, el equivalente de .exe en windows )

nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh

 

y añade esto ( el original pertenece a https://gist.github.com/laurenorsini/10013430 )

 

#!/bin/bash

 

# Default Variable Declarations

DEFAULT=”Default.txt”

FILEEXT=”.ovpn”

CRT=”.crt”

KEY=”.3des.key”

CA=”ca.crt”

TA=”ta.key”

 

#Ask for a Client name

echo “Please enter an existing Client Name:”

read NAME

 

 

#1st Verify that client’s Public Key Exists

if [ ! -f $NAME$CRT ]; then

echo “[ERROR]: Client Public Key Certificate not found: $NAME$CRT”

exit

fi

echo “Client’s cert found: $NAME$CR”

 

 

#Then, verify that there is a private key for that client

if [ ! -f $NAME$KEY ]; then

echo “[ERROR]: Client 3des Private Key not found: $NAME$KEY”

exit

fi

echo “Client’s Private Key found: $NAME$KEY”

 

#Confirm the CA public key exists

if [ ! -f $CA ]; then

echo “[ERROR]: CA Public Key not found: $CA”

exit

fi

echo “CA public Key found: $CA”

 

#Confirm the tls-auth ta key file exists

if [ ! -f $TA ]; then

echo “[ERROR]: tls-auth Key not found: $TA”

exit

fi

echo “tls-auth Private Key found: $TA”

 

#Ready to make a new .opvn file – Start by populating with the

default file

cat $DEFAULT > $NAME$FILEEXT

 

#Now, append the CA Public Cert

echo “<ca>” >> $NAME$FILEEXT

cat $CA >> $NAME$FILEEXT

echo “</ca>” >> $NAME$FILEEXT

 

#Next append the client Public Cert

echo “<cert>” >> $NAME$FILEEXT

cat $NAME$CRT | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ >> $NAME$FILEEXT

echo “</cert>” >> $NAME$FILEEXT

 

#Then, append the client Private Key

echo “<key>” >> $NAME$FILEEXT

cat $NAME$KEY >> $NAME$FILEEXT

echo “</key>” >> $NAME$FILEEXT

 

#Finally, append the TA Private Key

echo “<tls-auth>” >> $NAME$FILEEXT

cat $TA >> $NAME$FILEEXT

echo “</tls-auth>” >> $NAME$FILEEXT

 

echo “Done! $NAME$FILEEXT Successfully Created.”

 

#Script written by Eric Jodoin

\ No newline at end of file

 

 

 

una vez conseguido, asigna permisos de root al archivo desde la carpeta Keys

 

chmod 700 MakeOVPN.sh

 

y ejecutalo

 

./MakeOVPN.sh

 

te pedira el nombre de algun cliente ( asegurate de escribirlo correctamente )

 

Ya está. Tienes un servidor funcionando y una clave de cliente.

Ahora instala en tu móvil el cliente de OpenVPN, y ejecutalo.

Desde las opciones, importa el certificado, y ya está todo hecho.