0.- Configuracion predeterminada SSHd cat /etc/ssh/sshd_config 1.- Inicio de sesión basado en clave pública SSH Una forma de hacer que solo puedan intentar autenticar en SSH, es que utilice autenticación basada en clave pública; Creamos una clave publica con el comando ssh-keygen y luego esa clave publica la instalamos en todos los clientes que queremos que puedan establecer conexión con nuestro servidor, con el comando ssh-copy-id 2.- Deshabilitar el inicio de sesión del usuario root vim /etc/ssh/sshd_config PermitRootLogin no 3.- Deshabilitar el inicio de sesión basado en contraseña PubkeyAuthentication yes (Solo se permite inicios de sesión basados en claves públicas; Métodos de autenticación clave pública) 4.- Restringir el acceso ssh de ciertos usuarios AllowUsers antonio admin pepe DenyUsers root user administrador 6.- Deshabilitar el uso de contraseñas vacias PermitEmptyPasswords no 7.- Uso de contraseña seguras para usuarios/claves de ssh Utilizaremos un generador de claves y/o un criterio para claves seguridas con un numero minimo de 10 caracteres, 16 seria ideal, con al menos una letra en mayuscula y un par caracteres numericos por Ejemplo; PonFerrada563245 8.- Cortafuegos SSH TCP puerto 22 apt-get install ufw sudo ufw allow from 80.58.0.0/15 to any port 22 9.- Cambiar el puerto SSH Port 65535 10.- TCPWrapper es un sistema ACL de red basado en host TcpWrapper es es un sistema ACL de red en SO linux basado en host, vim /etc/hosts.allow sshd: 192.168.1.2 172.16.23.12 IP permitidas 11.- Impedir fuerza bruta a credenciales apt-get install sshguard sshguard fail2bain vim /etc/sshguard/sshguard.conf Ejemplo de configuración: https://raw.githubusercontent.com/hackingyseguridad/ssha/master/sshguard.conf 12.- Ver/modificar la lista de cifrados ofrecidos para ver que cifrados tenemos: ssh -Q cipher ssh -Q cipher-auth ssh -Q mac ssh -Q kex ssh -Q key para limitar la oferta de cifrados: # Especificamos KEX (Key Exchange) algorithms. KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 # Especificamos los cifrados ofrecidos Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr # Especificamos los MAC (message authentication code) algoritmos MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sh 13.- Port_knocking Es una forma de ocultar un puerto de un servicio abierto, solo responderá el servicio si le llega un determinado paquete Requiere instalar knockd en Linux y configurar /etc/knockd.conf 14.- Configurar intervalo de tiempo de espera de cierre de sesión inactivo ClientAliveInterval 300 ClientAliveCountMax 0 15.- banner de advertencia para los usuarios de ssh vim /etc/issue AVISO LEGAL: ha accedido a un sistema propiedad de HackingySeguridad.COM. Necesita tener autorizacion antes de usarlo, estando usted estrictamente limitado al uso indicado en dicha autorizacion. El acceso no autorizado a este sistema o el uso indebido del mismo esta prohibido y es contrario a la legislacion vigente. El uso que realice de este sistema puede ser monitorizado.\n \l 16.- Deshabilitar archivos .rhosts IgnoreRhosts yes ssh puede emular el comportamiento del comando rsh obsoleto, simplemente deshabilite el acceso no seguro a través de RSH. viene del servicio rlogin el archivo /etc/hosts.equiv está bajo el control del administrador del sistema y puede ser gestionado eficazmente, cualquier usuario puede crear un archivo .rhosts que conceda acceso a cualquier persona que el usuario elija sin el conocimiento del administrador del sistema. 17.- Deshabilitar la autenticación basada en host HostbasedAuthentication no 18.- Parchear OpenSSH y sistema operativo apt-get install ssh apt-get install openssh-server 19.- Chroot OpenSSH (Bloquear a los usuarios en sus directorios de inicio) Establecer con el comando chmod permisos que impidan a los usuarios acceder a carpetas del sistema tales como: /etc /bin /sbin 20.- Deshabilitar el servidor OpenSSH en el cliente sudo /etc/init.d/ssh stop Ejemplo de configuración sshd_config segura! https://raw.githubusercontent.com/hackingyseguridad/ssha/master/sshd_config