Tengo en casa una Raspberry Pi que tengo conectada a mi red doméstica. Lo uso para ejecutar un servidor VPN, un túnel SSH y, ocasionalmente, ingreso mediante SSH para realizarle mantenimiento.
¿Es una mala idea tener puertos abiertos (TCP) en mi enrutador para poder conectarme remotamente a mi Pi mientras estoy fuera de casa? No uso el puerto 22 habitual; Es un puerto aleatorio que elegí. Sin embargo, cuando escaneo mi dirección IP usando nmap
on pentest-tools.com
, veo el puerto abierto que elegí usar para SSH. Mi Pi está protegido por contraseña y, que yo sepa, no hay datos confidenciales ni números de tarjetas de crédito en él. Pero considerando que lo uso para túneles VPN o SSH, es posible que datos confidenciales viajen a través de él. Entonces, ¿es malo tener este puerto SSH abierto en mi enrutador? ¿Alguien puede hacer algo malicioso en mi red doméstica al abrir este puerto, considerando que mi Pi siempre está encendida y escuchando ese puerto?
Respuesta1
En términos de seguridad, me vienen a la mente tres métodos adicionales.
R: utilice autenticación de clave pública
Para aumentar la seguridad, puede configurar su servidor SSH para utilizar autenticación de clave pública. Es decir, además de una contraseña segura o en lugar de ella, la conexión se abrirá solo si el cliente SSH proporciona la clave privada que coincide con la clave pública en el servidor. Incluso si un atacante pudiera obtener la clave pública de alguna manera, no podría recuperar la clave privada. Sin embargo, esto no ocultará su puerto de los escáneres de puertos.
B: use un puerto diferente
Además, obtuve una buena experiencia en términos de menos escaneos de puertos al configurar el servidor SSH para escuchar un puerto diferente al 22. La opción de configuración predeterminada correspondiente /etc/ssh/sshd_config
es
Port 22
Podrías cambiar eso a, por ejemplo, 54322:
Port 54322
Recuerde reiniciar el servidor SSH después; Dependiendo del Linux de tu Raspberry, podría ser uno de
# service sshd restart
# systemctl restart sshd
(El #
signo, si no está en un archivo, indicará un mensaje de raíz aquí en mis ejemplos).
No se preocupe, su sesión SSH actual permanecerá activa. Podría valer la pena intentar abrir una segunda sesión SSH en el puerto 54322 para ver si el inicio de sesión aún funciona. Recuerda
- configure su cliente SSH en el nuevo puerto
- si corresponde, reenvíe el nuevo puerto de su enrutador de Internet a la Raspberry Pi
C: cierre el puerto y ábralo solo cuando usted lo solicite
Si realmente no desea mostrarle a "Internet" que tiene este puerto abierto, eche un vistazo a los demonios que bloquean puertos, por ejemplo knockd
. Esos programas escuchan los puertos (cerrados) definidos por usted y, tras una secuencia de llamada, también definida por usted, abren un puerto diferente, por ejemplo, su puerto SSH. Desde un teléfono móvil o una computadora portátil, inicia la secuencia de golpe y el demonio de golpe en su Raspberry Pi abre su puerto SSH, que no estaba visible en absoluto.
Más detalladamente, el golpe de puerto agregará una línea a su iptables
configuración. Esta línea abrirá el puerto de tu Raspberry. Esto también significa que el puerto SSH debe cerrarse iptables
antes. Y esto significa que no puedes iniciar sesión a través de SSH.
Un ejemplo knockd.conf
podría verse así:
[openclosessh]
sequence = 1000,2020,3015,65432
seq_timeout = 15
tcpflags = syn
start_command = /usr/local/bin/knockd-open.sh %IP%
cmd_timeout = 30
stop_command = /usr/local/bin/knockd-close.sh %IP%
Además, recuerde reenviar los puertos que se van a eliminar desde su enrutador de Internet a su Raspberry.
Los scripts de apertura/cierre correspondientes podrían verse así:
#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
y
#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
Recuerde hacer que ambos scripts sean ejecutables con chmod +x /usr/local/bin/knockd*
. Además, debe iniciar y habilitar el servicio knockd con uno de
# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd
Especialmente si utilizas la función de tocar en una computadora remota a la que no tienes acceso a la consola, es posible que desees utilizarla atd
para revocar automáticamente cualquier cambio y/o reiniciar la Raspberry en caso de errores de configuración.
Debido a que iptables no se almacenará automáticamente al reiniciar, en un ejemplo, podría ser root (a través de su
) y
# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh
Un ejemplo ./script-which-closes-iptables.sh
podría verse así (recuerde hacerlo ejecutable con chmod +x
)
#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Si su sesión SSH está muriendo ahora, Raspberry se reiniciará en 5 minutos. Si su sesión SSH aún está activa, revoque el reinicio pendiente con
# atq
15 reboot
# atrm 15
Si su sesión SSH aún está activa, intente iniciar sesión mediante una segunda sesión SSH. Eso no debería funcionar. Luego use su teléfono móvil y toque los puertos que configuró /etc/knockd.conf
. Después de eso, intente nuevamente iniciar sesión a través de una segunda sesión SSH. Esta vez debería funcionar.
Luego puedes hacer que tus iptables persistan y reinicies. En su sistema, es posible que deba instalar un paquete a través de
# apt-get install iptables-persistent
Guarde sus iptables con
# iptables-save > /etc/iptables/iptables-rules
y habilitar el servicio iptables con
# systemctl enable iptables
Respuesta2
Si su Raspberry Pi tiene una contraseña segura y una seguridad SSH sólida, está bien; los atacantes no pueden hacer nada con SSH si no pueden iniciar sesión ni explotarlo. Aunque seguro que encontrarán el puerto.
Nota histórica: En el pasado,Ha habido un problemacon la configuración SSH; la clave generada automáticamente era predecible. Eso se ha solucionado.
Si los atacanteshacerlogran obtener acceso SSH, efectivamente son propietarios del dispositivo. Luego pueden usarlo para hacer cosas malas comoEnvenenamiento por ARP, lo que les permite capturar y cambiar datos no cifrados que cruzan su red. También podrían usar el Pi como punto de lanzamiento para ataques a sus otros hosts. El Pi es una computadora como cualquier otra y debes tener cuidado para asegurarla.