Protegiendo la Raspberry Pi
2017-09-01
Índice
- Desactivando autentificacion por contraseña de SSH
- Desactivando login para root en SSH
- Instalar UFW como cortafuegos
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. 🐧