Montar un servidor casero con Raspberry Pi (Parte 6): Acceder al servidor desde el exterior
En esta parte 6 del tutorial veremos como acceder al servidor desde el exterior de la red local de nuestro domicilio. Obtendremos un dominio personalizado con el que acceder a nuestra red e intentaremos aportar un poco de seguridad al sistema.
Índice de tutoriales:
- Objetivos e índice.
- Instalar Raspbian en una tarjeta SD.
- Primera ejecución de Raspbian.
- Configurar servidor DHCP.
- Configurar servidor DNS caché.
- DNS local con actualizaciones DHCP.
- Acceder al servidor desde el exterior.
- Instalación y configuración de OpenVPN.
- NAS con Raspberry Pi y Samba
Tutoriales relacionados:
- Encendiendo ordenadores automáticamente con Wake-on-LAN y Cron.
- Copia completa de nuestra Raspberry Pi.
- Reducir el tamaño de Raspbian eliminando paquetes no usados.
Configuración de DNS dinámico con no-ip
Esta serie de tutoriales se centra en la creación de un servidor doméstico con nuestra Raspberry Pi, y puesto que lo más habitual en nuestros hogares es disponer de una conexión con IP dinámica deberemos conseguir una forma amigable de conectarnos desde el exterior, ya que la IP que te puedas apuntar hoy puede que no te sirva mañana.
Hay multitud de servicios orientados a solucionar este problema, uno de los más utilizados es el de no-ip que será el que utilizaremos aquí.
Lo primero que debemos hacer es registrarnos en su website y crear un nuevo hostname del tipo “A” con un nombre que podamos recordar y asignando el dominio que prefiramos de la lista. No voy a detallar el proceso ya que existen multitud de tutoriales al respecto en la red.
Hecho esto tenemos nuestro nombre de dominio creado, pero necesitamos asociarlo a nuestra red, y además hacer que nuestra Raspberry Pi actualice ese registro cada cierto intervalo de tiempo para que, cuando nuestra dirección IP pública cambie, el hostname de no-ip se actualice.
Para ello debemos seguir los siguientes pasos extraídos de su web:
Nos dirigimos al directorio desde el que instalaremos el programa:
|
|
Descargamos el programa:
|
|
Lo descomprimimos e instalamos:
|
|
Aquí se nos generará el archivo de configuración por defecto /usr/local/etc/no-ip2.conf con los datos que se nos preguntarán:
|
|
Los rellenamos y ya tendremos todo listo. Ahora con ejecutar el archivo /usr/local/bin/noip2 se nos actualizará el registro hostname en no-ip cada “X” intervalo que hayamos configurado.
Lo último que deberemos hacer será crear un simple script que se ejecute tras cada reinicio para que llame a este ejecutable. En el directorio /usr/local/src/noip-2.1.9-1 se nos proporciona información sobre cómo hacerlo en perfecto castellano en el archivo LEEME.PRIMERO debajo del apartado COMO INICIAR EL CLIENTE.
Así que procederemos a crear el archivo en init.d:
|
|
Y copiamos el siguiente contenido dentro:
|
|
Guardamos y procedemos a darle permisos de ejecución al script así como actualizar la configuración de arranque con este script:
|
|
Podemos reiniciar la Raspberry Pi para comprobar que efectivamente se ejecuta el script.
Añadiendo seguridad a Raspberry Pi
Tenemos que ser muy conscientes de lo que estamos haciendo, estamos abriéndonos la puerta de entrada al dispositivo desde el exterior de nuestra red local, por lo que los riesgos de seguridad se disparan. Hay algunas medidas de seguridad que podemos aplicar para conseguir un plus de seguridad en el dispositivo. Estas medidas no son infranqueables, nada en el mundo de la informática lo es, pero podemos intentar protegernos de los ataques más frecuentes.
Seguridad en los usuarios
Este es el primero de todos los pasos. Hay que ser consciente que si no disponemos de una contraseña robusta para nuestros usuarios estamos dejando la puerta abierta a nuestro sistema, cosa que no queremos. Hay mucha documentación sobre creación de contraseñas seguras en la red, un buen punto para empezar es este.
Una vez hemos determinado la contraseña que queremos usar podemos actualizarla con un simple:
|
|
Tampoco está de más cambiar el nombre del usuario “pi” por otro, o crear uno nuevo y eliminar este, ya que cuantas menos cosas tengamos en nuestro sistema “por defecto” más difícil estamos poniéndole las cosas a un atacante. Podemos consultar esta guía de referencia para la gestión de usuarios.
Seguridad en ssh
El primer servicio al que probablemente queremos acceder una vez abierta la comunicación con el exterior es a ssh, para así poder acceder a nuestro dispositivo desde donde queramos. Como este servicio provee acceso completo a nuestro sistema deberemos realizar algunas tareas para asegurar el servicio. Podemos acceder a su archivo de configuración desde:
|
|
Hay muchas cosas que nos puede interesar cambiar en este archivo, pero básicamente tocaremos dos. Cambiaremos el puerto por defecto ya que como anteriormente he dicho hay que huir de las configuraciones por defecto. Así que nos dirigimos al campo “Port” y cambiamos el 22 por el que nos plazca:
|
|
Por otro lado prohibiremos al usuario root la conexión ya que en el supuesto caso de que se consiguiera acceso con este usuario por un atacante estaríamos totalmente vendidos. Así que nos dirigimos a PermitRootLogin y cambiamos el “yes” por “no”.
|
|
Estas son medidas básicas, con una rápida búsqueda en la red encontraremos muchas más medidas a tomar para endurecer el servicio.
Recordad que a partir de ahora para conectaros vía ssh a la Raspberry Pi habrá que especificar el puerto, ya sea rellenando el campo correspondiente en PuTTY o con la opción -p en GNU/Linux:
|
|
Evitar ataques de fuerza bruta con fail2ban
Fail2ban es una fantástica aplicación que monitoriza los logs de los principales servicios a instalar en un servidor en busca de intentos fallidos de login. Al detectarse una cantidad “X” de intentos (configurable) desde una misma IP se procede a bloquear el acceso durante “Y” tiempo (configurable también.
Para instalarlo, como siempre:
|
|
Fail2ban viene con una serie de servicios ya configurados, facilitando extremadamente su puesta en marcha.
Su archivo de configuración se encuentra en /etc/fail2ban/jail.conf. Así que como siempre creamos una copia de backup del archivo y procedemos a editar:
|
|
Hay muchas cosas que podemos configurar aquí, nosotros solo veremos unas pocas. En la sección [DEFAULT] encontramos las opciones:
|
|
Estas son las opciones generales, ahora podemos dirigirnos a la sección JAILS donde encontraremos [ssh]. Nos aparecerá una configuración por defecto preparada para funcionar con ssh y que modificaremos para cumplir con nuestros intereses:
|
|
El resto de la configuración lo dejaremos tal cual, aunque podemos cambiar el número que aparece en maxretry ya que este sobreescribirá la configuración del apartado [DEFAULT].
Hecho esto reiniciamos el servicio con:
|
|
Notas finales
Hecho esto debemos redirigir el puerto 6784 en nuestro router apuntando a nuestro servidor Raspberry Pi. Hay que tener en cuenta que estas medidas no nos protegerán ante todo lo que acecha al otro lado de nuestro router, pero sí que evitaremos caer ante ataques automatizados de fuerza bruta, que al final son los más fáciles de llevar a cabo, incluso por gente que no necesariamente sepa mucho de seguridad informática.
Es interesante ir revisando periódicamente los logs del sistema, situados en /var/log/ para detectar posibles intrusiones a nuestro sistema.