sábado, 3 de diciembre de 2011

Practicando con SSH

En la anterior entrada vimos qué era y cómo funcionaban SSH, OpenSSH y sus aplicaciones, y en esta segunda parte vamos a practicar con él, que es lo que nos interesa. En estos ejemplos hemos utilizado Debian Squeeze.
Para instalar el servidor ejecutaremos:
 
apt-get install openssh-server

Tras la instalación, procederemos a configurarlo. Y esto lo haremos con el archivo sshd_config, que se encuentra en /etc/ssh.
Lo primero que haremos será habilitar la conexión a los usuarios que deseemos (deben existir en el equipo). Para ello, en cualquier lugar del archivo sshd_config se deberá añadir la línea:

AllowUsers usuario1 usuario2 (separados por espacio, todos los usuarios que se desee).

También modificaremos el puerto. Por defecto, está puesto el puerto 22. Buscamos la línea Port 22 y sustituimos por otro que deseemos y que esté libre (en nuestro caso el 4321).
Otra cosa que también es recomendable modificar es la línea PermitRootLogin. Aquí se le indica si queremos permitir que se pueda loguear con el usuario root. Por defecto aparece yes, pero lo cambiaremos a no, ya que si alguien se consigue conectar como root tendrá acceso total y con todos los permisos al servidor SSH.
Otra opción interesante es el número máximo de intentos que tendrá un usuario para conectarse. Esto se especificará desde la línea MaxAuthTries número. Si se sobrepasa el número de intentos especificado la sesión SSH se cortará. Podremos volver a conectarnos y reintentarlo, pero así estamos evitando ataques de fuerza bruta. En nuestro ejemplo escribiremos MaxAuthTries 3, ya que 3 es un número suficiente de intentos para haber ingresado bien la contraseña.

También escribiremos una línea para indicar el número máximo de usuarios conectados a la vez. Esto se hace con MaxStartups número, donde número indica el máximo de conexiones.
Una vez configurado el archivo sshd_config, guardamos los cambios, salimos y habrá que reiniciar el servicio SSH para que los cambios tengan efecto, para ello se ejecuta: 

/etc/init.d/ssh restart

A partir de este momento, cualquiera de los usuarios que acabamos de incluir en la línea AllowUsers se puede validar en SSH. Por ejemplo, si tenemos un usuario pepe, y queremos trabajar con él, ejecutaremos:

ssh pepe@IP_servidor (donde IP_servidor es la IP del equipo en el que se ha instalado el servidor SSH, lógicamente)

Nos pedirá una contraseña, que es la del inicio de sesión del usuario. La introducimos y veremos cómo ha cambiado el prompt. Ahora nos indica con qué usuario estamos conectados. Y a partir de ese momento podremos trabajar en el host remoto como si fuésemos ese usuario, con sus permisos y todo igual.

Para utilizar una interfaz gráfica, vamos a "Lugares" y después “Conectar con el servidor”. Se nos abrirá una ventana que nos ofrece varios protocolos, elegimos SSH, elegimos también el puerto (nosotros lo configuramos con el 4321).
En el caso de Windows, deberás instalar algún software cliente para realizar esta conexión, por ejemplo puTTy.


Otros archivos de configuración de OpenSSH
Para permitir el acceso a tu equipo necesitas modificar el archivo /etc/hosts.allow. En él puedes modificar lo siguiente:
  • Todo el mundo puede conectarse:
sshd: ALL
  • Permitir el acceso sólo a la IP indicada:
sshd: 192.168.0.1
  • Permitir el acceso a un rango de IP’s:
sshd: 192.168.0.1/192.168.0.100

También se puede realizar estas operaciones pero con el efecto contrario, es decir, para denegar el acceso. Esto se hace desde el archivo /etc/hosts.deny. Y las líneas a escribir son iguales que en hosts.allow.


Generar llaves con OpenSSH
A parte de la autenticación de usuarios mediante su contraseña, OpenSSH utiliza otros métodos más seguros para este fin. El que vamos a ver ahora se basa en la autenticación RSA, que consiste en disponer de un juego de llaves privada y pública que garantiza la identidad del usuario que se intenta conectar al equipo remoto. Este juego de llaves tiene la propiedad de que lo que se encripta con una, sólo se puede desencriptar con la otra, pero a partir de la llave pública no se puede averiguar la privada.
Para trabajar con llaves, primero habrá que asegurarse que se el archivo sshd_config está configurado correctamente. Para ello, tenemos que asegurarnos de que las siguientes líneas están descomentadas:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Ahora procederemos a crear las llaves. Utilizaremos la aplicación ssh-keygen, incluida en la instalación de OpenSSH. Y ejecutamos lo siguiente:

ssh-keygen -t rsa (-t indica el tipo de llave a crear, RSA o DSA. Aquí utilizaremos RSA)

Al ejecutarlo lo primero que nos indicará es la ruta donde guardará las claves. Podemos dejarlo en blanco y que las copie en la ruta por defecto.
Lo siguiente que nos pide es una palabra clave (passphrase) para encriptar dicha llave. En caso de no introducir ninguna, la llave privada estará sin encriptar, lo cual no es recomendable para un uso habitual.

Una vez creadas, debemos copiar la llave pública al directorio Authorized_keys, situado en /home/tu_usuario/.ssh (.ssh es una carpeta oculta), del equipo remoto al que nos queremos conectar. Podemos copiarla normalmente o, utilizando la seguridad que nos proporciona OpenSSH, mediante la aplicación scp (dela que hablamos anteriormente).
Ahora, cuando con conectemos al equipo remoto por SSH, no nos pedirá la contraseña de inicio de sesión del usuario, solamente la passphrase con la que encriptamos la clave privada.

0 comentarios:

Publicar un comentario