Protegiendo la Raspberry Pi

2017-09-01

Índice

  1. Desactivando autentificacion por contraseña de SSH
  2. Desactivando login para root en SSH
  3. Instalar UFW como cortafuegos
    1. Permitiendo conexiones desde nuestra red local
    2. Configurando UFW para trabajar con OpenVPN
    3. Permitiendo las conexiones a nuestra red local VPN
    4. Activando UFW
    5. Comprobando funcionamiento
    6. Aprendiendo un poco mas sobre UFW
    7. Errores
    8. Referencia

Si vas a tener un dispositivo conectado las 24 horas del día a Internet, una de las primeras cosas por las que te deberías preocupar es por su seguridad, en el articulo de hoy vamos a ver como deshabilitar el poder hacer login al servicio ssh y como activar un cortafuegos para proteger las conexiones.

Desactivando autentificacion por contraseña de SSH

Si leíste este articulo, expliquó la forma de autentificarnos y conectarnos mediante ssh a nuestra rpi sin necesidad de introducir clave y contraseña.

Si estamos utilizando este mótodo para conectarnos es buena idea deshabilitar lo que no vayamos a usar, en este caso el ofrecer un login para conectar.

Editamos el fichero

sudo nano /etc/ssh/sshd_config

Buscamos y dejamos el valor tal y como lo pongo

PasswordAuthentication no

Desactivando login para root en SSH

Tambión en el fichero /etc/ssh/sshdconfig ponemos lo siguiente:

PermitRootLogin no

Y reiniciamos el servicio:

sudo service ssh restart

Ahora solo se podrá acceder a la rpi mediante la clave SSH

Instalar UFW como cortafuegos

ufw es un sencillo cortafuegos para configurar iptables, y mediante unos simples comandos, podemos ir añadiendo o quitando reglas de una forma fácil y compresible

Para instalar ufw simplemente nos conectamos por ssh a la rpi y ejecutamos:

sudo apt-get install ufw

Si utilizas IPv6 comprueba que la variable IPv6 tiene el valor yes dentro del fichero /etc/default/ufw excerpt

Antes de activar el cortafuegos vamos a configurar unas cuantas reglas

Permitiendo conexiones desde nuestra red local

Por defecto ufw viene configurado para denegar todo el trafico de red entrante y permitir toda el trafico de salida, así que lo primero que hacemos es permitir la entrada de todo el trafico interno de nuestra red local

sudo ufw allow from 192.168.1.0/24

Con esta sencilla regla vamos a permitir que cualquier ordenador que se encuentre en el tramo de red 192.168.1.xxx pueda conectar con la rpi.

Configurando UFW para trabajar con OpenVPN

Lo primero es permitir hacer forwarding para que trabaje el NAT.

Editamos el fichero /etc/default/ufw y buscamos la directiva DEFAULT_FORWARD_POLICY y cámbianos el valor de DROP a ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Editamos el fichero /etc/ufw/before.rules,

sudo nano /etc/ufw/before.rules

Y añadimos el siguiente texto entre la cabecera y la linea filter, cambia la IP/subnet por la que corresponda en tu caso, lo puedes comprobar en /etc/openvpn/server.conf .

# NAT (Network Address Translation) table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Allow traffic from clients to eth0
-A POSTROUTING -s 10.8.0.0/24 -o enxb827eb06342b -j MASQUERADE

# do not delete the "COMMIT" line or the NAT table rules above will not be processed
COMMIT

Para saber tu interfaz de red ejecutamos:

ip route | grep default

default via 192.168.1.1 dev enxb827eb06342b src 192.168.1.3 metric 202
default dev tun0 scope link src 10.8.0.1 metric 204

enxb827eb06342b seria la insterfaz que uso (más común puede ser eth0), tun0 corresponde a la interfaz que levanta openvpn.

Permitiendo las conexiones a nuestra red local VPN

Vamos a permitir que cualquier equipo que pertenezca a la red local de la VPN, 10.8.0.0/24, puedan conectarse a la rpi

sudo ufw allow from 10.8.0.0/24

La ultima regla que agrego es permitir las conexiones entrantes a la rpi desde cualquier dirección al puerto del servidor VPN, para que se puedan conectar los clientes+.

Supongamos que configuraste el puerto 1194 con el protocolo udp, como puerto de escucha en el servidor VPN, la regla seria:

sudo ufw allow 1194/udp

Activando UFW

Como dije antes, por defecto ufw viene configurado para denegar todas las peticiones entrantes y permitir todas las que salen, por lo que junto a las reglas que hemos ido agrandado ya tendremos configurado nuestro cortafuegos, solo queda activarlo, para ello:

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprobando funcionamiento

A sí han quedado mis reglas

  • Permito salir todo el tráfico de red

  • Deniego todo el trafico entrante salvo las siguientes reglas:

  • Solo tienen acceso a la rpi los equipos de mi red local 192.168.1.0/24

  • Solo tienen acceso a la rpi los equipos de mi red local VPN 10.8.0.0/24

  • Permito las conexiones udp al puerto 1194 para la VPN.

    sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip

    To Action From


    Anywhere ALLOW IN 192.168.1.0/24 1194/udp ALLOW IN Anywhere Anywhere ALLOW IN 10.8.0.0/24 1194/udp ALLOW IN Anywhere (v6)

Aprendiendo un poco mas sobre UFW

Con ufw no es necesario conocer el numero de puerto de un determinado servicio, ofrece la posibilitad de abrir o cerrar un puerto por el nombre de la aplicación

Para ver el listado de estas aplicaciones ya predefinidas

sudo ufw app list

Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  ....

Para abrir un puerto por el nombre de la aplicación:

sudo ufw allow 'WWW Secure'
sudo ufw allow KTorrent

Para cerrar un puerto por el nombre de la aplicación:

sudo ufw deny KTorrent

Abrir puerto

sudo ufw allow 1194/udp

sudo ufw allow 1714:1764/tcp
sudo ufw allow 1714:1764/udp

Cerrar puerto

sudo ufw deny 1194/udp

Borrar regla

sudo ufw delete allow 1194/udp
Rule deleted
Rule deleted (v6)

Activar ufw

sudo ufw enable

Desactivar ufw

sudo ufw disable

Borrar todas las reglas y dejar ufw por defecto

sudo ufw reset

Recargar ufw

sudo ufw reload

Ver el log

sudo more /var/log/ufw.log
sudo tail -f /var/log/ufw.log

Ver los puertos que están en modo escucha, esto es útil por si necesitamos abrir un puerto para un servicio en concreto

sudo ufw show listening | more

Aunque tambien podemos usar

sudo netstat -tanp | grep LISTEN

Denegar el acceso a una IP con 6 o mas intentos de conexión en menos de 30 segundos, si tienes habilitado sshd puede serte muy ótil

sudo ufw limit SSH

Errores

Me costo un poco encontrar la razón por la cual, despuós en reinicio de la Raspberry Pi, mis dispositivos no tenían acceso a Internet, tenían red, se veían entre ellos pero no resolvían las DNS, hasta que di con la solución, simplemente tenia que desinstalar el paquete iptables-persistent,

sudo apt purge iptables-persistent

Despuós de eso ahora mis dispositivos ya resolvían las DNS, por alguna razón, se mantenían las reglas previas en Iptables a las configuradas por UFW

Referencia

Espero que te haya gustado, pasa un buen día. 🐧


Ingrese la dirección de su instancia


Más publicaciones como este

Nextcloud con PHP 7 Nginx y SSL/TLS

2017-09-28 | #:raspberry: #letsencrypt #nextcloud

Índice Nginx Instalación de Nginx Configuración de Nginx Instalación de Nextcloud Permisos Unix Instalación modulos PHP Instalando y configurando PHP-FPM Instalación PHP-FPM Configuración Permisos php-fpm Dominios verificados Instalación y configuración MariaDB Instalación de MariaDB Error de autenticación Nombre de dominio y virtualhost SSL/TLS con Let’s Encrypt Instalando Certbot Obtención del certificado Diffie-Hellman Renovar el certificados Mejorar el rendimiento de Nextcloud Cache de PHP: OPcache Cache de datos con Apcu Referencias: Despuós de un tiempo utilizando como servidor HTTP Lighttpd, y aprovechado una nueva instalación del sistema en la raspberry, he decidido probar la instalación de Nextcloud 12 sobre un servidor HTTP Nginx, primero por aprender a hacerlo y ya de paso comprobar su rendimiento.

Continuar leyendo 