Cuando trabajamos en remoto a través de un punto de acceso gratuito WiFi o a través de una cafetería, estamos trabajando en nuestros servidores, webs, … de manera totalmente insegura, ya que pueden captar nuestros datos en este proceso.
Para evitar esto lo más interesante es utilizar OpenVPN que asegura nuestra conexión y evitaremos que nuestro tráfico sea interceptado por otros.
Además si tienes restricciones por algún firewall, u otra razón, puedes utilizar OpenVPN para conectarte sin impedimentos.
Puedes usar una variedad de distintos servicios OpenVPN gratuitos pero no son fiables, hay límites en la velocidad de transferencia y tienen otras restricciones. Para arreglar esto, me he puesto manos a la obra y he contratado un VPS OpenVZ barato de RamNode para tener mi propio servidor OpenVPN.
Vas a ver en este artículo como he instalado y configurado OpenVPN en un servidor Debian 7.
El servidor VPS que he contratado es el más barato, tiene las siguientes especificaciones:
- 128mb RAM (con 128mb swap)
- 1 nucleo CPU
- 10 GB SSD de espacio
- Puerto de 1Gbps
- 500GB de ancho de banda
- Direcciones 1 IPv4 & 16 IPv6
- Soporte de una gran variedad de distribuciones de linux.
Estas características son ideales para ejecutar un servidor personal OpenVPN. Es barato (solamente 15$ para todo un año) y te permite transferir una gran cantidad de datos. Los 10GB SSD y los 128mb de RAM pueden paracer poco, pero es más que suficiente para un servidor OpenVPN. De hecho podrías correr Nginx y PHP en el servidor sin llegar a consumir más de un 70% de memoria.
He escogido la distribución Debian 7, porque es muy parecida a la que utilizo yo (ubuntu) y es perfecta para servidores.
Compra del Servidor
Esta es la pantalla que obtendremos cuando vamos a contratar un servidor de Ramnode, pudiendo elegir la localización del servidor y por tanto su IP.
En nuestro caso como queremos una IP americana elegiremos NYC como servidor OpenVZ.
Según necesitemos más RAM, disco duro o Bandwidth el precio irá incremenándose.
La siguiente pantalla elegimos el servidor y la distribución con la que trabajaremos:
A partir de aquí tendremos que darnos de alta, introducir nuestros datos y pagar por el método elegido.
Una vez acabado el proceso nos llegarán una serie de mails con las claves y todos los datos de la compra, por lo que podremos conectarnos a nuestro servidor.
Preparativos
Antes de trabajar con el servidor y poder instalar OpenVPN tienes que asegurarte de que tu VPS esté ejecutándose. Tendrás que permitir el TUN/TAP y el PPP en el Panel de Control SolusVM.
Podrás encontrar esta configuración en la página de inicio del panel de control en la pestaña ‘Settings’:
Optimizaciones antes de la instalación
Antes de instalar OpenVPN, vamos a hacer algunas optimizaciones del sistema.
Como este servidor lo vamos a utilizar para más servicios y probaremos a instalar algunas webs en el y WordPress, cada gasto de memoria RAM que haga cualqueir programa es conveniente que lo reduzcamos.
Una de las primeras optimizaciones de gasto de RAM va a ser sustituir el open-ssh por otro que consuma menos ram.
En este caso el programa elegido es Dropbear.
Primero tendremos que acceder al servidor con el comando SSH siguiente:
ssh root@1.2.3.4
Siendo 1.2.3.4 la IP de tu servidor.
Te pedirá la contraseña y te preguntará si confías en la clave.
Para instalarlo en el sistema utilizaremos el siguiente comando:
apt-get install dropbear
Una vez instalado, tenemos que configurar las opciones de dropbear. Instalaremos nano para editar los archivos:
apt-get install nano
Una vez tengamos nano, editaremos el archivo de configuración de dropbear para añadir el puerto de acceso:
nano /etc/default/dropbear
Tendremos que cambiar las siguientes líneas con el puerto escogido:
NO_START=0 DROPBEAR_PORT=2424
Una vez que lo tenemos configurado, iniciamos dropbear:
service dropbear start
Para comprobar que funciona correctamente dropbear, ejecutamos el siguiente comando:
netstat -nlpt | grep dropbear
Tenemos que ver algo como esto:
rtcp 0 0 0.0.0.0:2424 0.0.0.0:* LISTEN 1918/dropbear
Si todo ha ido bien, entonces salimos del servidor, y volvemos a entrar con el siguiente comando:
ssh -p 2424 root@1.2.3.4
Si todo funciona correctamente entonces podrás acceder al servidor. Una vez dentro del servidor pararemos el servicio openssh y lo desinstalaremos:
/etc/init.d/ssh stop o ejecuta service ssh stop apt-get remove openssh-server
RECUERDA: antes de desinstalar openssh-server asegurate de que funciona correctamente el acceso a tu máquina, porque sino entonces no podrás acceder y perderás todo lo que hayas hecho en el servidor. Que no se te olvide leche!!!
Instalando OpenVPN
Antes de instalar, actualizaremos los paquetes e instalaremos todas las actualizaciones:
sudo apt-get update sudo apt-get upgrade
Lo siguiente que haremos será instalar OpenVPN:
sudo apt-get install openvpn easy-rsa
En debian 7 no está por defecto el paquete easy-rsa, por lo que tendremos que añadir los backports de debian en los repositorios para poder instalar el paquete. Editaremos el archivos sources.list y añadiremos el respositorio siguiente:
nano /etc/apt/sources.list deb http://ftp.debian.org/debian wheezy-backports main
Una ve que tenemos el repositorio añadido instalaremos el paquete easy-rsa:
sudo apt-get update sudo apt-get upgrade sudo apt-get install easy-rsa
Configurar el servidor
La encriptación de OpenVPN utiliza certificados de cliente y servidor. Primero es necesario generar un certificado para el servidor. Copia los ejemplos de archivos de configuración en el directorio correcto:
cifrado de OpenVPN utiliza certificados de cliente y servidor. Así que vamos a empezar por generar un certificado para el servidor. Copiar el ejemplo config archivos en el directorio correcto:
mkdir -r /etc/openvpn/easy-rsa/ cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
Editar el archivo /etc/openvpn/easy-rsa/vars
y configura los valores KEY_
:
export KEY_COUNTRY="ES" export KEY_PROVINCE="VA" export KEY_CITY="Gandia" export KEY_ORG="Kacharreando" export KEY_EMAIL="me@mihost.midominio" export KEY_CN="KacharreandoVPN" export KEY_NAME="KacharreandoVPN" export KEY_OU="KacharreandoVPN" export KEY_ALTNAMES="KacharreandoVPN"
Marcaremos las opciones de KEY_CN y KEY_NAME en el archivo con # y las sustituiremos por estas anteriores que hemos visto.
Con esto realizado, ejecutaremos los siguientes comandos para construir la autoridad de certificación (CA):
cd /etc/openvpn/easy-rsa/ source vars ./clean-all ./build-ca
El siguiente paso es generar los parámetros Diffie Hellman para el servidor OpenVPN:
./build-dh
Certificados de servidor
Una vez que tenemos listo el servidor, ya podemos generar y firmar los certificados de servidor. easy-rsa también ofrece un script que hace todo el trabajo necesario. Vas a tener que introducir algunos parámetros para el certificado de servidor. La mayoría de los valores por defecto de /etc/openvpn/easy-rsa/vars será correcta.
./build-key-server KacharreandoVPN
Se te preguntará “Sign the certificate? [y/n]” y “1 out of 1 certificate requests certified, commit? [y/n]”, contesta ambas preguntas con yes.
Los certificados y las claves de servidor se han generado en el subdirectorio /etc/openvpn/easy-RSA/keys/. Ahora tendremos que copiarlos a /etc/openvpn/:
cd keys/ cp KacharreandoVPN.crt KacharreandoVPN.key ca.crt dh2048.pem /etc/openvpn/
Certificados de Clientes
Cada cliente VPN también necesita un certificado para autentificarse en el servidor. Normalmente se crea un certificado diferente para cada cliente. Para que puedas crear el certificado, introduce los siguientes comandos en una terminal con el usuario root:
cd /etc/openvpn/easy-rsa/ source vars ./build-key client1
Los archivos generados son los siguientes:
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key
Copiaremos los archivos generados a la home de nuestro ordenador, el que vamos a conectar con OpenVPN. Desde el cliente realizamos los siguientes comandos para copiar los archivos a /home/:
scp -P 2424 root@1.2.3.4:/etc/openvpn/ca.crt ~/ scp -P 2424 root@1.2.3.4:/etc/openvpn/easy-rsa/keys/client1.crt ~/ scp -P 2424 root@1.2.3.4:/etc/openvpn/easy-rsa/keys/client1.key ~/
Una vez copiados a nuestro ordenador es conveniente borrarlos del servidor para que nadie pueda acceder a ellos en caso de que nos hackeen el servidor. Utilizando el siguiente comando borraríamos los archivos:
rm /etc/openvpn/easy-rsa/keys/client*
Configurando el enrutado y el firewall
Para que OpenVPN enrute todo el tráfico desde el cliente a través del servidor y tengamos la IP del servidor, tenemos que configurar algunas cosas relacionados con la red. En primer lugar, tendrás que asegurarte de que el reenvío de puerto (port forwarding) esté habilidato en el kernel. Si la salida del siguiente comando es 1
no tienes que configurar nada:
cat /proc/sys/net/ipv4/ip_forward
Si no, tendrás que editar el archivo /etc/sysctl.conf
y cambiar estas variables (tendrás que reiniciar el servidor):
# Packet forwarding net.ipv4.ip_forward = 1 net.inet.ip.fastforwarding = 1
Con el reenvío de puerto (port forwarding) habilitado, todo lo que falta es permitir que el tráfico en el firewall y configurar el enrutamiento. Con varias guias de internet he creado este script en bash:
# OpenVPN (depending on the port you run OpenVPN) iptables -A INPUT -i venet0 -m state --state NEW -p udp --dport 1194 -j ACCEPT # Allow TUN interface connections to OpenVPN server iptables -A INPUT -i tun+ -j ACCEPT # Allow TUN interface connections to be forwarded through other interfaces iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o venet0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i venet0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT # NAT the VPN client traffic to the internet iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE iptables -A OUTPUT -o tun+ -j ACCEPT
Este script lo he copiado de internet, por lo que no voy a escribir que significa cada una de las partes, además no me llevo muy bien con iptables, por lo que simplemente copia el texto y pégalo en un archivo en el servidor. Yo lo he llamado firewall.sh
y le he dado permisos de ejecución (chmod +x firewall.sh
). El script tiene que ejecutarse cada vez que el servidor arranque, así que lo que he hecho ha sido añadirlo al crontab. Para añadirlo ejecuta crontab -e
y añade lo siguiente:
@reboot /root/firewall.sh
NOTA IMPORTANTE: Muchas de las guías que verás por internet hacen los cambios en la interfaz eth0
. Sin embargo en OpenVZ la interfaz por defecto se llama venet0
.
Configurar y Arrancar el servidor OpenVPN
Ya tenemos todo listo! En el paso final necesitamos crear un archivo de configuración para el servidor OpenVPN. Afortunadamente no tenemos que crearlo desde cero, OpenVPN viene con archivos de configuración de ejemplo que podremos usar. Simplemente copiaremos y los extraeremos en el directorio correcto:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ gzip -d /etc/openvpn/server.conf.gz
Ahora editaremos el archivo /etc/openvpn/server.conf
y nos aseguraremos que añades los certificados y claves que has creado anteriormente. Tiene que quedar algo así:
ca ca.crt cert KacharreandoVPN.crt key KacharreandoVPN.key dh dh2048.pem
Y con esto ya podríamos arrancar el servidor OpenVPN y usarlo sin problemas. Solo tendríamos que teclear en la consola:
service openvpn start
Últimos Ajustes
Ya tienes todo listo para establecer un túnel VPN seguro entre el cliente y el servidor OpenVPN y utilizar su IP.
Si estás usando un firewall, necesitas abrir el puerto 1194 para permitir las conexiones entrantes a tu servidor OpenVPN. Lo más cómodo es utilizar ufw en debian, por lo que puedes utilizar el comando siguiente para abrir el puerto:
sudo ufw allow 1194
Como último punto vamos a dejar configurado el acceso ssh en el puerto por defecto (22) y sin acceso root, así añadiremos una capa más de seguridad al servidor. Cuando tengamos que acceder a root lo haremos desde dentro del servidor.
Editaremos el archivo dropbear:
nano /etc/default/dropbear
Y añadiremos las siguientes opciones:
nano /etc/default/dropbear DROPBEAR_PORT=22 DROPBEAR_EXTRA_ARGS="-w -g"
La primera opción es para que inicie dropbear al arrancar el servidor. Cambiamos el puerto usado temporalmente 2424 para desinstalar openssh a el puerto por defecto 22. Los argumentos que ponemos «-w -g», la opción «-w» es para no acceso root, y «-g» para no acceso de clave de root.
Otra opción posible es -s para desactivar los accesos con clave. En este caso necesitarías un par de claves para autentificarte.
Una vez que lo tenemos configurado, reiniciamos dropbear:
service dropbear restart
Conclusion
Por el precio que ofrece RamNode, es una gran oferta como VPS para realizar tus pruebas de servidor y aprender de ello. Tiene un rendimiento para ejecutar diversos servicios y como OpenVPN servidor.
El único inconveniente es que no he sido capaz de conectarme vía mi escritorio de Ubuntu. Posiblemente he generado de manera incorrecta las claves del cliente y por lo tanto no lo he conseguido.
En el próximo artículo haré un artículo para configurarlo de manera mucho más sencilla.
Espero que lo disfrutes. Artículo basado en este en inglés.
Deja una respuesta