Contents

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.

/wp-content/uploads/2013/05/banner-tutorial-raspi_-exterior-e1368692990658.png
Acceder al servidor desde el exterior

Índice de tutoriales:

  1. Objetivos e índice.
  2. Instalar Raspbian en una tarjeta SD.
  3. Primera ejecución de Raspbian.
  4. Configurar servidor DHCP.
  5. Configurar servidor DNS caché.
  6. DNS local con actualizaciones DHCP.
  7. Acceder al servidor desde el exterior.
  8. Instalación y configuración de OpenVPN.
  9. NAS con Raspberry Pi y Samba

Tutoriales relacionados:

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:

1
$ cd /usr/local/src

Descargamos el programa:

1
$ sudo wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz

Lo descomprimimos e instalamos:

1
2
3
4
$ sudo tar -xvzf noip-duc-linux.tar.gz
$ cd no-ip-2.1.9-1
$ sudo make
$ sudo make install

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:

1
2
3
4
5
6
Please enter the login/email string for no-ip.com
Please enter the password for user 'sdasd@asdsad.com'

Only one host [dfsf.no-ip.com] is registered to this account.
It will be used.
Please enter an update interval:[30]

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:

1
$ sudo nano /etc/init.d/noip2

Y copiamos el siguiente contenido dentro:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
##################################################################
#!/bin/sh
#./etc/rc.d/init.d/functions #descomente/modifique para su killproc
case "$1" in
start)
echo "Iniciando noip2..."
/usr/local/bin/noip2
;;
stop)
echo -n "Apagando noip2..."
killproc -TERM /usr/local/bin/noip2
;;
*)
echo "Uso: $0 {start|stop}"
exit 1
esac
exit 0
#################################################################

Guardamos y procedemos a darle permisos de ejecución al script así como actualizar la configuración de arranque con este script:

1
2
$ sudo chmod 755 /etc/init.d/noip2
$ sudo update-rc.d noip2 defaults

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:

1
$ passwd

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:

1
$ sudo /etc/ssh/sshd_config

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:

1
Port 6784

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

1
PermitRootLogin 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:

1
$ ssh pi@raspberry.home.local -p 6784

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:

1
$ sudo apt-get install fail2ban

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:

1
2
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.back
$ sudo nano /etc/fail2ban/jail.conf

Hay muchas cosas que podemos configurar aquí, nosotros solo veremos unas pocas. En la sección [DEFAULT] encontramos las opciones:

1
2
3
ignoreip = 127.0.0.1/8 # IP’s a ignorar. Podemos añadir el rango local con 192.168.66.0/24.
bantime = 172800 # Tiempo en segundos del bloqueo.
maxretry = 5 # Cantidad de intentos fallidos permitidos.

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:

1
2
enabled = true # Indicaremos que empiece a filtrar ssh.
port = 6784 # Aquí pondremos el puerto configurado anteriormente.

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:

1
$ sudo service fail2ban restart

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.