securización configuración SSH
El protocolo de comunicación SSH es de los más seguros que hay actualmente, no obstante hay que hacer unas configuraciones para que esto siga siendo así, ya que un servicio o herramienta es segura mientras se administre bien.
El archivo de configuración sshd_config que viene al instalarlo es bastante seguro pero hay que hacer bastantes retoques para dormir más tranquilos.
Este es el fichero sshd.config tal cual está al instalarlo:
m3t4g4m3 nexolinux: ~ $ cat /etc/ssh/sshd_config | grep -v ^# Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes
Opciones de red:
– El puerto por defecto debería ser otro para evitar ataques a un puerto conocido y hasta estaría mejor si es más del puerto 1000.
Port 2024
– Restringir el acceso a IPv4 únicamente, si no se utiliza IPv6 no tenemos que tenerlo habilitado directamente.
AddressFamily inet
– Escuchar sólo en la red interna:
ListenAddress 192.168.1.0
– Usar sólo versión 2 de protocolo, ya que la versión 1 ya tiene más vulnerabilidades conocidas.
Protocol 2
– Deshabilitar XForwarding.
X11Forwarding no
– Deshabilitar TCPKeepAlive , para prevenir ataques de suplantación de identidad (Spoofing), y usar ClientAliveInterval ya que el sshd mandará un mensaje al cliente esperando respuesta para mantener la conexión. el ClientAliveCountMax es el máximo número de intentos que hará y en caso de no tener una validación desconectará la sesión.
TCPKeepAlive no ClientAliveInterval 600 ClientAliveCountMax 3
Configuración de red con claves:
– ruta de claves para versión 2 de protocolo:
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
Separación de privilegios activada. divide los procesos del servidor para prevenir explotación de escalado de privilegios.
UsePrivilegeSeparation yes
– Usar clave pública para autenticación:
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys
– Deshabilitar claves en listar negra, si está puesto a «yes» permitirá hacer login con claves en lista negra.
PermitBlacklistedKeys no
Configuración de clave y autenticación.
Crear una lista blanca para usuarios permitidos:
AllowUsers user1 user2
– Un minuto para meter la frase de paso
LoginGraceTime 60
– No permitir el login de root, esto es algo que no tiene discusión, en linux se escalan privilegios una vez entrados en la máquina destino, no nos conectamos NUNCA con el usuario root.
PermitRootLogin no
Forzar la comprobación de permisos en ficheros de claves y directorios:
StrictModes yes
No leer los ficheros ~/.rhosts y ~/.shosts de los usuarios:
IgnoreRhosts yes
– Deshabilitar autenticación basada en host:
HostbasedAuthentication no
– No confiar en ~/.ssh/known_hosts para RhostsRSAAuthentication
IgnoreUserKnownHosts yes
– No permitir passwords vacíos:
PermitEmptyPasswords no
– Deshabilitar uso de passwords por completo, lo recomendable sería usar sólo claves públicas y privadas.
PasswordAuthentication no
– Si usamos claves no necesitamos PAM (Módulos de autenticación Conectables) y permitimos a sshd funcionar como un usuario no root.
UsePAM no
Autenticación:
– Logging es importante así como la ruta donde guardarlos, un atacante experimentado intentará limpiar logs para evitar ser atrapado.
SyslogFacility AUTH LogLevel INFO
# Registrar la última vez que un usuario hizo login:
PrintLastLog yes
– Enseñar un cartel de advertencia (exponiendo temas legales de un acceso no autorizado, lo que pongamos en este fichero saldrá en pantalla cuando un usuario hace login)
Banner /etc/issue.net
Deja un comentario