miércoles, 25 de abril de 2012

SSH: Introducción y usos básicos

A la hora de administrar servidores existen incontables inconvenientes. El servidor tiene que estar operativo (y por lo tanto administrable) 24 horas al día, los 7 días de la semana, durante todo el año. En la mayor parte de los casos, no tenemos la posibilidad ni las ganas de estar delante del equipo cuando necesitamos hacer algo en él. Existen varias soluciones para los distintos sistemas operativos para administrarlo de forma remota. Centrándonos en los sistemas Linux (para qué cambiar a Windows…) el que se usa por excelencia es el ssh (Secure Shell).
Al conectarse por ssh, lo que conseguimos es una shell remota, desde la cual podremos hacer todo lo que nos permita nuestro usuario. Para usarlo, necesitaremos dos componentes, el ssh-server instalado en la máquina a la que queremos conectar y un cliente en la maquina desde la que conectemos. Si conectamos desde un Linux, generalmente viene ya instalado por defecto, y si no recuerdo mal en OSX también. Si lo que tenemos es un ordenador con Windows, tranquilos, se puede. El cliente más usado es el Putty, es un pequeño ejecutable que no hace falta instalar. Existen más con más opciones (mNGremote por ejemplo), pero Putty cumple con todas las necesidades.
Para instalar el servidor ssh, es tan sencillo como usar el gestor de paquetes preferido (apt-get install sshd-server o yum install sshd-server)*. Ahora viene la parte divertida, configurarlo (no se asuste nadie, es fácil).
Lo primero que haremos será editar el sshd_config (/etc/ssh/conf/sshd_config en las distros basadas en redhat, /etc/sshd_config en las basadas en debian)**. Usaremos nano, vi, gedit o lo que queramos, como siempre al gusto de cada uno.

Puntos importantes a editar:

Vamos a ver una configuración sencilla y segura para empezar. Buscamos la línea que ponga “port 22”, que puede estar comentada, y la cambiamos por otro puerto que no esté en uso (mayor de 1100 generalmente). El 22 es el puerto estándar por el que se usa el ssh, cambiándolo pondremos un poco más de seguridad.
Otra línea a editar, es la de “Protocol", que la pondremos a 2. Esto indica la versión de ssh a usar, pero la 1 está en desuso y con varias vulnerabilidades, por eso usamos la 2.
Esta que comento, se debería de deshabilitar, “PermitRootLogin”, habría que ponerla a no. Con esto hacemos que el usuario root no se pueda conectar por ssh ganando en seguridad, ya que es el usuario más importante del equipo (acceso total a todo)***. Si permitimos el acceso, hay que asegurarse de que tiene una contraseña robusta. Junto con esta línea, podemos editar otra que se llama “AllowUsers”, en la que indicamos que usuarios tendrán acceso ssh, importante si deshabilitamos el acceso al root. Desde cualquier usuario se puede hacer su o sudo su (dependiendo de la distro) para cambiar a root. La forma de esta línea es “AllowUsers gato perro [email protected]”, dejando que gato y perro se conecten siempre, pero que periquito se conecte sólo desde la ip 123.4.5.678.
Para un extra de seguridad podemos editar “LoginGraceTime 20”, que limita el tiempo en el que se puede poner la contraseña (en segundos), “MaxAuthTries 3” numero de intentos fallidos antes de cortar la conexión y “MaxStartups 4” que limita el numero de usuarios conectados a la vez. Los dos primeros vienen bien para cortar un poco los ataques de fuerza bruta.
Una vez editado, salimos y reiniciamos el demonio del sshd (/etc/init.d/sshd restart o service sshd restart).
Con esto, tenemos una configuración medianamente segura y podremos acceder a nuestro servidor para administrarlo de forma remota. Podremos hacer cualquier cosa que nos permita nuestro usuario, instalar paquetes, toquetear los servicios, etc… siempre desde una terminal.
En siguientes post, si me da, veremos cómo transferir archivos de forma segura usando el ssh, y cómo usar programas con interfaz gráfica mediante ssh.
¡Saludos!
PD: Para conectar por Putty, simplemente ponemos la IP o url del servidor y el puerto que hayamos configurado, y desde linux/mac con el comando “ssh usuario@ip” si usamos el puerto 22 o “ssh –p 12345 usuario@ip” si lo hemos cambiado.
* No estoy al 100% seguro que se llame así el paquete, me puede la pereza de comprobarlo. Tan sencillo como buscarlo.
** Escribo de memoria, si no están ahí, se pueden buscar, ya que cada distro es un mundo.
*** Por ello en los ataques de sacar contraseñas por fuerza bruta de ssh, este usuario no falta.