domingo, 4 de octubre de 2009

Configuración de un servidor SSH en Debian GNU / Linux

En este artículo vamos a ver una serie de recomendaciones para tener un servidor SSH lo más seguro posible.

Los pasos de la configuración son los siguientes:

1. Instalación
2. Uso de pares de claves
3. Cambiar el puerto por defecto

A continuación se detallan cada uno de estos pasos:

1. Instalación

Para la instalación únicamente debemos ejecutar el siguiente comando:

aptitude install ssh

2. Uso de pares de claves

Configurando el servidor SSH para que solo se pueda acceder mediante pares de claves SSH se obtiene un gran beneficio. Por un lado, se obtiene mayor seguridad, ya que para el acceso a la máquina se debe disponer de una clave privada cuya clave publica este dada de alta en el servidor. Y por otro lado, es posible configurar que la clave privada de acceso esté guardada sin contraseña, de forma que se pueda acceder directamente al servidor sin que se solicite ningún tipo de contraseña. Esto puede ser útil, por ejemplo, para scripts de tareas automatizadas.

El primer paso será generar un par de claves SSH y configurar el servidor para que se pueda acceder con ellas.

Generamos el par de claves en el cliente de la siguiente forma:

ssh-keygen -t dsa -C "USERNAME@DOMAIN"

En el comando anterior podemos sustituir USERNAME por el nombre del usuario y DOMAIN por el dominio que queramos.

Durante la creación nos solicitará una contraseña que será la que proteja la clave privada generada. Si se considera que la cuenta del usuario está en un entorno fiable podemos omitirla y acceder al servidor SSH automáticamente sin contraseña.

Para permitir que ese cliente se conecte con las claves generadas a un usuario del servidor, debemos crear un fichero "$HOME/.ssh/authorized_keys" que contenga la información de la clave pública que hemos generado. Por defecto, la clave pública se genera en un fichero "$HOME/.ssh/id_dsa.pub". En el fichero "authorized_keys" se podrán meter todas las claves públicas que se desee y cada una deberá estar en una línea.

Es muy importante el tema de permisos en estos ficheros. Únicamente deberán poder ser accesibles por el usuario de la cuenta en la que esté contenido cada fichero.

Por último, si queremos que únicamente se permita el acceso a la máquina mediante pares de claves y no se permita acceder mediante usuario y contraseña, debemos configurar en el fichero "/etc/ssh/sshd_config" el valor de la variable "PasswordAuthentication" a "no" y reiniciar el servidor de SSH.

Si un usuario tiene varias claves, puede seleccionar la clave que quiere usar con el parámetro "-i" del comando ssh.

También es interesante impedir que se pueda acceder directamente con el usuario root. Para ello, debemos configurar en el fichero "/etc/ssh/sshd_config" el valor de la variable "PermitRootLogin" a "no" y reiniciar el servidor de SSH.

3. Cambiar el puerto por defecto

Cambiando el puerto por defecto del servicio SSH se consigue burlar ciertos escaneres de puertos. Para ello editamos el fichero "/etc/ssh/sshd_config" y cambiamos el parámetro "Port".

Al cambiar el puerto, para acceder al servicio debemos indicar un parámetro adicional. Por ejemplo, si cambiamos el servicio al puerto 1234 usaríamos el siguiente comando:

ssh -p 1234 user@hostname