Consejos de seguridad para SSH

Hace no mucho comencé a utilizar OpenSSH y a saber utilizar /etc/ssh/sshd_conf. Si hubiera leído esta pequeña guía de fortificación de Security By Default hace cosa de un par de meses, me habría ahorrado algo de trabajo. Ocho detalles a modificar para mejorar la seguridad de tu servidor SSH. Bien es cierto, que dadas las necesidades de cada uno, no siempre se podrán llevar a cabo, pero sí es bueno saberlo:

 

  • Port (por defecto: 22)
Especifica el número del puerto en el que el servicio escuchará. El mayor número de ataques se producen por herramientas automáticas, que en busca de este demonio, probarán usuarios y contraseñas comunes. Modificando el puerto a un número no estándar, por ejemplo 8822 se evitarán en su gran mayoría, ahorrando de esta forma la generación de cientos de registros inútiles al día. Tiene especial importancia en servidores expuestos en Internet.

 

Un truquito para elegir el puerto es utilizar el que ya conocemos, en este caso el 22 y añadirle algún número para que sea más fácilmente memorizable. Además, si buscamos si está definido en el archivo "nmap-services" (/usr/share/nmap/nmap-services en mi linux) complicaremos un poquito más su detección a solo los escaneos que contemplen todos los puertos.
  • Protocol (por defecto: 1,2)
Especifica la versión del protocolo con la que un cliente puede conectarse. Debido a las vulnerabilidades conocidas de ataques de hombre en el medio en la versión 1, este parámetro se ha de establecer únicamente a "2".
  • PermitRootLogin (por defecto: yes)
El usuario administrador del sistema no debería realizar la autenticación directamente contra el equipo. Es recomendable modificar este parámetro dejándolo en "no" y en caso de necesidad por el uso de scripts o aplicaciones automáticas, utilizar el valor "forced-commands-only", que permitirá la conexión del usuario root solo si es mediante certificado.
  • ListenAddress (por defecto: all)
La directiva ListenAddress especifica en que direcciones IP se abrirá el puerto para ofrecer el servicio. Si el sistema dispone de más de una dirección IP, ya sea IPv4 o IPv6, es conveniente limitar esta escucha únicamente a las necesarias. Se permite el uso repetido de este parámetro, en caso de por ejemplo, querer escuchar en dos de las tres direcciones IP de un equipo.
  • AllowUsers (por defecto: todos los usuarios)
AllowUsers concreta que usuarios tienen permitido el uso del servicio SSH, se permite especificar distintos usuarios separados por coma y opcionalmente, el host desde el que conectan con el formato "usuario@host".

El host puede ser limitado de distintas formas, ya sea con un cortafuegos o mediante el uso de unTCPWrappers.

Esta directiva complementa el grupo "Allow/Deny" compuesto por otros parámetros, en concreto, según su orden de procesado: AllowUsers, DenyUsers, AllowGroup y DenyGroup.
  • AllowGroups (por defecto: todos los grupos)

Al igual que con AllowUsers, AllowGroups permite especificar el grupo o los grupos de usuarios a los que se les permite hacer acceder mediante ssh al sistema.

  • MaxAuthTries (por defecto: 6)
Con el parámetro MaxAuthTries se especifica el máximo número de intentos de autenticación fallida por conexión. Cuando se alcanza la mitad de este número los sucesivos intentos serán registrados en los correspondientes logs. Se recomienda su configuración a un valor más bajo como 3.
  • LoginGraceTime (por defecto: 120)
Con esta directiva se especifica cuantos segundos se permite que un usuario permanezca con una conexión abierta sin haberse autenticado correctamente. Es recomendable que este valor sea inferior, como por ejemplo 60.

 

Comentarios

Garbu:

MUY BUEN POST!! Gracias, y un saludo

Warning: INSERT command denied to user 'linuxhis_drupal'@'localhost' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:300:\"UPDATE command denied to user 'linuxhis_drupal'@'localhost' for table 'sessions'\nquery: UPDATE sessions SET uid = 0, cache = 0, hostname = '38.107.179.236', session = '', timestamp = 1328733772 WHERE sid = 'f1262b4464d58d8da69fb5b104e2b457'\";s:5:\"%file\";s:54:\"/home/linuxhis/public_html/portal/includes/session.inc\";s:5:\"%line\";i:68;}', 3, '', 'http://www.linuxhispano.net/portal/noticia/consejos-seguridad-para-ssh', '� in /home/linuxhis/public_html/portal/includes/database.mysql.inc on line 128