jueves, 6 de diciembre de 2018

Hardening SSH en Debian 9

Hace algunos años realice una publicacion sobre Hardening Servidores en Debian, esta vez voy hablar sobre Hardening en SSH, que es endurecer las politicas de configuracion del SSH.

Todo esta configuracion la realizaremos en un Debian 9 (stretch) con la version del ssh 7.4



 Antes de empezar recordemos de realizar una copia de seguridad a el archivo de configuracion del ssh; el cual esta en la siguiente ruta:

#cd /etc/ssh/

y el archivo a modificar seria: sshd_config

Ahora si manos a la obra, asi que utilizando el editor de texto vim procedemos a editar el archivo antes mencionado; y modificamos los siguientes parametros:
  • Port 22 # Puerto por defecto del ssh, cambiarlo por otro puerto.
  • LoginGraceTime 30 # cantidad de segundos en que la pantalla de login estará disponible.
  • PermitRootLogin no # deshabilitar el acceso directo como root.
  • MaxStartups 3 # cantidad de conexiones simultanea.
  • MaxSessions 2  # Especifica el número máximo de sesiones abiertas permitidas por conexión de red. El valor predeterminado es 10.
  • AllowUsers [username] # limitar el acceso de usuarios, solo agregar los usuarios permitido para hacer conexion.
  • IgnoreRhosts yes # no permite que SSH confíe en un host basado solo en su IP.
  • HostbasedAuthentication no # es igual que la opcion anterior.
  • PermitEmptyPasswords no # evita que los usuarios inicien sesión en SSH con una contraseña vacía, si se establece como tal.
  • X11Forwarding no # detiene la posibilidad de que el servidor envíe comandos de vuelta al cliente.
  • MaxAuthTries 3 # desconecta la conexión SSH después de 3 intentos de autorización fallidos.
  • Ciphers aes128-ctr,aes192-ctr,aes256-ctr # desactivar los cifrados débiles.
  • UsePAM yes # deshabilita la autenticación de contraseña y difiere la autorización al PAM basado en clave.
  • ClientAliveInterval 300 # cierra la sesión de usuarios inactivos después de 3 minutos.
  • ClientAliveCountMax 0 # cuántas veces el servidor comprueba si la sesión está activa antes de soltar.
  • Banner none # agregar un banner de advertencia para cuando se conecten via ssh. 
  • AddressFamily inet # deshabilitar ipv6.
  • LogLevel VERBOSE # registra la huella digital del usuario al iniciar sesión.
  • AllowTcpForwarding no # reenvío de puertos a través de SSH (SSH tunneling)
  • Compression no # Especifica si la compresión está habilitada después de que el usuario se haya autenticado correctamente. 
  • TCPKeepAlive no # Especifica si el sistema debe enviar mensajes de keepalive de TCP al otro lado.
  • AllowAgentForwarding no # Especifica si se permite el reenvío ssh-agent.

Despues de modificar el archivo, ejecutamos el siguiente comando para validar si tenemos algun error en la configuracion:

#sshd -t

Si no muestra nada, es que todo esta OK y procedemos a reiniciar el servicio de ssh:
 
#/etc/init.d/ssh restart





Esto seria todo, algo sencillo de realizar. 
Si algun otro conoce algun parametro que pueda ser agregado o modificado en la configuracion, bienvenido sea. 

Referencias WEB:

https://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

https://www.cyberciti.biz/tips/checking-openssh-sshd-configuration-syntax-errors.html

https://www.process.st/server-security/

https://www.ssh.com/ssh/sshd_config/