Acceder a tu Raspberry de forma segura

Este es uno de los capítulos del tutorial Tu propia nube en la Raspberry Pi. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Recientemente escribí un artículo que te permitía acceder a tu Raspberry teniendo una IP dinámica. En este artículo vamos a dar un paso mas. Se trata de acceder a la Raspberry Pi de forma segura. Es decir a cifrar la conexión punto a punto, entre nuestro navegador, o lo que sea que utilicemos para conectarnos con nuestra Raspberry Pi, y el pequeño servidor. Así podrás acceder a la Raspberry teniendo una IP dinámica, pero accederás a la Raspberry de forma segura.

Si, has leído bien, he dicho, entre nuestro navegador o lo que sea que utilicemos para conectarnos. Y es que tienes que pensar en la Raspberry Pi como algo mas que un simple chisme que te permite mostrar páginas web. Al fin y al cabo, estamos utilizando la Raspberry como un servidor, y como tal, puede alojar multitud de servicios. Desde luego entre esos servicios, podemos contar con un servicio de páginas web, pero no en exclusiva.

Sea como fuere, el destino que le des a tu Raspberry, lo importante, es poder cifrar la información entre el pequeño servidor y el cliente. Para cifrar la información solo necesitas un certificado digital. Crear tu propio certificado de seguridad SSL, no es nada complicado. Sin embargo, haciéndolo así, te ocurrirá que cuando accedas desde tu navegador Firefox o Chrome a la Raspberry, te pondrá el dichoso mensaje de conexión no segura. Esto sucede así, porque el certificado no es de confianza porque está autofirmado. Esto, depende de las circustancias, tampoco tiene mayor impotancia, puesto, que al fin y al cabo, conoces quien lo ha creado. Sin embargo, en determinados situaciones, esto no es recomendable.

Acceder a tu Raspberry de forma segura

Acceder a tu Raspberry de forma segura

Como he comentado en la introducción, es muy interesante cifrar las comunicaciones entre cliente y servidor, para de esta forma acceder a la Raspberry de forma segura.

Tenemos dos opciones, o bien, crear un certificado SSL autofirmado, o bien recurrir a un certificado de Let’s Encrypt. La ventaja que tienes de utilizar un certificado Let’s Encrypt es que no te mostrará el mensaje de conexión no segura.

¿Que necesitamos para tener un certificado Let’s Encrypt?

Para obtener un certificado Let’s Encrypt necesitamos un nombre de dominio. En el caso de que tengas un IP fija, siempre puedes comprar un nombre de dominio, y resuelto. Sin embargo, el problema, lo tienes en tu casa, donde normalmente tienes una IP dinámica. Sin embargo, esto lo puedes resolver fácilmente siguiendo las indicaciones del artículo sobre como acceder a tu Raspberry teniendo IP dinámica.

Una vez, tienes tu nombre de dominio, por ejemplo, nombre_de_dominio.duckdns.org, ya puedes continuar con el proceso.

Instalar las herramientas

Parto de que tienes instalada una distribución Raspbian, en tu Raspberry. En otros casos, si tienes una derivada, será similar. Lo primero es saber que versión de Raspbian tienes instalada.

Para saber la versión de Raspbian o de tu distribución, instalada, tan solo tienes que ejecutar la siguiente orden,

cat /etc/os-release

Esto te arrojará un resultado como el que ves a continuación,

PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="https://www.raspbian.org/"
SUPPORT_URL="https://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="https://www.raspbian.org/RaspbianBugs"/RaspbianForums" BUG_REPORT_URL="https://www.raspbian.org/RaspbianBugs"

Si estás utilizando la versión 8 Jessie, lo recomendable es que actualices a la versión 9 Strech. Pero si por alguna razón no lo puedes o quieres hacer, aquí encontrarás los pasos para utilizarlo igualmente.

Actualización del sistema

Tal y como te indiqué en el artículo sobre descargar torrents con Transmission en Raspberry, lo primero que tenemos que hacer es actualizar el sistema.

Así lo primero ejecutaremos las siguientes órdenes,

sudo apt update
sudo apt upgrade

Además actualizaremos el firmware de la Raspberry ejecutando la siguiente orden,

sudo rpi-update

Dependiendo del resultado de todas estas operaciones, es posible, que sea necesario reiniciar la Raspberry. Para ello, ejecutaremos,

sudo reboot

Instalando el software de Let’s Encrypt

Raspbian Jessie

Como he mencionado depende de la versión de la distribución que tengas instalado. Para el caso de Raspbian Jessie 8, tienes que añadir un repositorio. Los siguientes pasos solo los tienes que seguir para Jessie, en el caso de Stretch los tienes que obviar.

  • Lo primero en el caso de Jessie es añadir la siguiente línea,
deb https://ftp.debian.org/debian jessie-backports main

Al final del archivo /etc/apt/sources.list. Esto lo puedes hacer desde el editor nano, ejecutando la siguiente orden,

sudo nano /etc/apt/sources.list

Una vez añadida la línea comentada al final del archivo, simplemente guardas el archivo.

  • El siguiente paso es añadir las claves públicas del repositorio. Para ello, ejecuta las siguientes órdenes,
gpg --keyserver pgpkeys.mit.edu --recv-key  8B48AD6246925553
gpg -a --export 8B48AD6246925553 | sudo apt-key add -
gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010
gpg -a --export 7638D0442B90D010 | sudo apt-key add -

Ahora ya puedes actualizar,

sudo apt update

Ahora instalaremos las herramientas necesarias. Aquí también dependerá del servidor web que estés utilizando, o bien Apache o Nginx. En el caso de Apache, ejecuta las siguientes órdenes,

sudo apt-get install python-certbot-apache certbot -t jessie-backports

Mientras que en el caso de Nginx,

sudo apt-get install python-certbot-nginx certbot -t stretch-backports

En el caso de Raspbian Stretch, las ordenes serán, para Apache,

sudo apt-get install python-certbot-apache certbot

Y para Stretch + Nginx,

sudo apt-get install python-certbot-nginx certbot

Por otro lado, en el caso de Apache, es necesario, modificar la configuración, añadiendo el parámetro ServerName. Para hacer esto, debemos editar el archivo /etc/apache2/sites-available/nombre_de_dominio.duckdns.org.conf. Que no es mas que una copia de default.conf. En este archivo añadiremos,

ServerName nombre_de_dominio.duckdns.org;

Comprueba que la configuración del servidor Apache es correcta, con sudo apache2ctl configtest y recarga la configuración del servicio sudo systemctl reload apache2

En el caso de Nginx, editaremos el archivo /etc/nginx/sites-available/default, y añadiremos

server_name nombre_de_dominio.duckdns.org;

Igualmente comprobamos la sintaxis con sudo nginx -t y recargamos la configuración del servicio Nginx, con sudo systemctl reload nginx.

Por otro lado, y con independencia de si utilizas el servicio Apache o Nginx, recuerda abrir los puertos. Para ello, simplemente comprueba la configuración de tu cortafuegos con sudo ufw status.

  • Ahora obtenemos el certificado. Para el caso de Apache será,
sudo certbot --apache -d nombre_de_dominio.duckdns.org

Mientras que para el caso de Nginx,

sudo certbot --nginx -d nombre_de_dominio.duckdns.org

Una vez ejecutado certbot, con cualquiera de las dos órdenes anteriores, te preguntará una dirección de correo electrónico, y si estás de acuerdo con los términos del servicio. Terminados estos dos pasos, certbot se comunica con el servidor de Lets’s Encrypt y comprobará que tu eres el dueño del dominio que has indicado.

Si todo ha ido como se espera, te preguntará si quieres redirigir el tráfico de HTTP a HTTPS, o no.

Y con esto ya lo tienes todo, y no te tienes que preocupar por nada mas. Aunque el certificado de Let’s Encrypt es válido solo por 90 días, el propio certbot se encarga de añadir un proceso en el cron. Este proceso, se ejecuta dos veces al día, y se encargará de renovar el certificado treinta días antes de que deje de ser válido.

Puedes comprobar el correcto funcionamiento de este proceso, ejecutando la orden,

sudo certbot renew --dry-run

Conclusión

Aunque pueda parecer algo lioso el proceso, ten en cuenta que he dado las posibilidades para hacerlo desde las dos versiones de Raspbian que hay en liza, y para dos servicios, Apache y Nginx. Simplemente, elige tu versión de Raspbian, y tu servidor de páginas web y a instalar.

Una vez instalado y configurado, la cosa es realmente sencilla, y no te tendrás que preocupar mas… Así podrás acceder a la Raspberry de forma segura…


Más información,

Deja una respuesta

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