• Ir al contenido principal
  • Ir a la barra lateral primaria
  • Ir al pie de página
  • Cachivaches
  • Ubuntu
  • Servicios en la nube
  • Raspberry Pi
  • La Historia de este Blog
    • ¿Quieres hablar?

Kacharreando

Kacharreando desde Antes que montara este blog

Cómo instalar OpenVPN en un VPS por menos de 15$ al año

28 de abril de 2016 por luidelkacha Dejar un comentario

Loading...

Instalar OpenVPN en Debian por 15$

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

Servdor OpenVZ de RamnodeEsta 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:

Selección del Servidor OpenVZ de 128MB de RAM

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’:

Habilitar acceso TUN TAP para openvz

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:

Loading...
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.

Loading...

Archivado en:Servicios en la nube

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Barra lateral primaria

Comentarios recientes

    Artículos recientes

    Un potente editor de texto para nuestro sistema operativo Ubuntu

    17 de diciembre de 2020 Por luidelkacha Dejar un comentario

    Footer

    Texto sobre la web

    Esto es un ejemplo de widget de texto.

    Seguiremos informando.

    Entradas recientes

    • Un potente editor de texto para nuestro sistema operativo Ubuntu
    • Instalar el universo Java en Ubuntu
    • 3 servicios de almacenamiento en la nube que uso
    • Mapas mentales en Ubuntu
    • Configurar el servidor en autologin con ssh sin usar pasword

    Buscar …

    Derechos de autor © 2021 · Magazine Pro en · WordPress · Iniciar sesión

    Utilizamos una galletitas (también llamadas cookies) para darte una navegación y brindarte la experiencia más relevante al recordar tus preferencias y quieras volver. Dándole a Aceptar, das tu consentimiento para el uso de TODAS las cookies.
    Ajustes CookieACEPTAR
    Manage consent

    Privacy Overview

    This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
    Necesarias
    Siempre activado

    Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

    No necesarias

    Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.