Por defecto el acceso remoto utilizando SSH suele ocurrir a través del puerto 22 y permitir la identificación directa como root. Demasiado obvio para cualquier atacante. Sin embargo a la seguridad de los servidores siempre se le puede dar una vuelta de rosca más para intentar que cualquier asaltante desista de su intento, o se convierta en un reto para él. Unos consejos para intentar, no siempre con éxito, desquiciar a malhechores:
- Cambiar el puerto en
/etc/ssh/sshd_config
por el 6969 —por ejemplo 😛 :Port 11810
- Cambiar el tiempo de espera en segundos para identificarse —en el mismo archivo— por un valor inferior
LoginGraceTime 30
- No permitir acceder directamente como root; para ello se puede utilizar el
su root
una vez identificado un usuario normal —también en/etc/ssh/sshd_config
PermitRootLogin no
Estos son básicos. Luego hay mil y un consejos más que pueden llegar a hacer estallar a los administradores cuando estén llenos de nervios intentando resolver algún problema que tiene inutilizado el servidor. De primeras parecen muy útiles pero no siempre serán deseables:
- Cerrar la sesión de root por inactividad, que si el administrador se despista y se olvida del asunto no pueda luego llegar un pillo en persona y aprovecharse. En
/root/.bashrc
se añade el tiempo en segundos:TMOUT = 300
aunque si se prefiere que sea para todos los usuarios se puede añadir en
/etc/profile
:readonly TMOUT = 300
- Limitar las direcciones IP desde las que poder conectarse —si el demonio de SSH tiene soporte para TCP Wrappers— añadiendo al archivo /etc/hosts.deny:
sshd : ALL
y a /etc/hosts.allow las direcciones IP autorizadas:
sshd : IP1,IP2,IP3,IPn
- Limitar con
iptables
el número máximo de conexiones por minuto, útil por ejemplo contra los ataques por fuerza bruta para el puerto configurado para SSH (6969):iptables -A INPUT -p tcp --dport 6969 -m limit --limit 3/minute -m state --state NEW -j ACCEPT
- Bloquear el puerto para el primer intento de conexión y aceptar conexiones a continuación en el plazo de un minuto. Práctico para intentar esconder que el puerto está abierto ante escaneos de puertos:
iptables -A INPUT -p tcp --dport 4587 -m limit --limit 1/minute -m state --state NEW -j DROP
OJO: esta regla se ha de aplicar antes de la del punto anterior.
Esto ha sido en cuanto a SSH. No obstante hay un montón de reglas más para ipfilter válidas para otros servicios del servidor, ajustes del núcleo, eliminar la consola para usuarios de sistema, etc. Muchas vulnerabilidades que pueden ser detectadas con la herramienta Tiger.
Fuente → Reforzando la instalación de Debian GNU/Linux [esdebian.org].