Menú principal

sábado, 4 de septiembre de 2010

Configuración OpenSSH en dispositivos iPhone (3 de 4)

========================================================================
- Configuración OpenSSH en dispositivos iPhone (1 de 4)
- Configuración OpenSSH en dispositivos iPhone (2 de 4)
- Configuración OpenSSH en dispositivos iPhone (3 de 4)
- Configuración OpenSSH en dispositivos iPhone (4 de 4)
========================================================================

En las dos primeras partes de la serie de configuración OpenSSH en dispositivos iPhone se ha hablado acerca de como instalar el servidor SSH en el dispositivo móvil, como se podía cambiar las contraseñas de los usuarios para dotar a éstos de una mayor seguridad, como realizar conexiones desde equipos al dispositivo móvil y dónde se encuentran los ficheros de configuración de OpenSSH. En este tercer post de la serie se va a hablar sobre como mejorar la seguridad del servidor para que a un atacante malintencionado le cueste tener acceso al dispositivo móvil.

Ficheros de configuración: /etc/ssh/sshd_config


Este fichero es el que contiene la configuración del demonio servidor SSH. En él se pueden modificar aspectos tan importantes para la seguridad como:
  • El puerto por el que está escuchando.
  • El número de intentos para loguearse.
  • Número de conexiones simultáneas
  • La posibilidad de poder loguearnos como root.
  • Tiempo para loguearse.
  • Banner para los usuarios que se logueen en el sistema.
Estas características son sólo algunas de las que se pueden realizar con el fichero de configuración y vamos a ver como se pueden configurar en detalle.

Lanzador de demonios


El sistema operativo del iPhone no dispone del comando service, el cual puede parar, arrancar y reiniciar un servicio en otras versiones de sistemas de las familias UNIX. En el sistema iOS de  iPhone se dispone de una ruta, /Library/LaunchDaemons, en la cual se almacenan los ficheros XML de aquellos servicios que se deben arrancar al encender el dispositivo. Este fichero es el que se se usará después para poder configurar la ejecución del puerto del servidor.

Fichero de servicios

En el sistema operativo de iPhone existe un fichero que es el encargado de establecer qué puerto utiliza cada servicio. El archivo se encuentra en la ruta /etc/services.

Se puede observar en la imagen como en el fichero tiene una estructura fácil de comprender: En la columna de la izquierda se establece el nombre del  servicio, en la columna del centro el puerto y protocolo de transporte que utilizan, y en la columna de la derecha un breve descripción del puerto, opcional, siempre después del carácter de comentario #.

Cambiar puerto de escucha por defecto

El puerto del protocolo SSH es, por defecto, el 22. Este dato es conocido por todo usuario medio/avanzado por lo que sería interesante que nuestro servidor no estuviera tan visible a ojos ajenos si sólo queremos usarlo nosotros. Una buena práctica en seguridad es cambiar el puerto por el que el servidor está escuchando las peticiones de conexión con el fin de evitar los ataques realizados mediante el uso de scanners.

Para realizar el cambio de puerto por el que el servidor está a la escucha de peticiones basta con insertar en el fichero de servicios un nuevo puerto y un nuevo nombre de servicio para él. Para el ejemplo se ha utilizado el nombre securessh como nombre de servicio y el puerto escogido es el 9123.

Una vez realizada esta inserción se debe editar el fichero  com.openssh.sshd.plist situado en  la ruta /Library/LaunchDaemons/ Como se ha comentado anteriormente, el fichero está en formato XML y es el que alberga la configuración de arranque del demonio SSH.

Para configurar el puerto de escucha, se debe buscar la clave Bonjour y cambiar, entre la apertura y el cierre de las etiquetas  string  el valor ssh por securessh, o el nombre que se haya puesto en el fichero de servicios. Además, también es necesario cambiar en la clave SockServiceName el valor ssh por securessh.

Una vez editado el fichero y guardado se debe reiniciar el dispositivo mediante la ejecución del comando reboot. Hay otros medios para hacer esto, pero de momento valdrá para los propósitos.

Probando el cambio del puerto


Utilizando la herramienta Putty - en nuestro caso - se puede realizar una nueva conexión sobre el dispositivo y, tal y como se puede apreciar en la imagen, por el puerto por defecto no se puede conectar al dispositivo. Sin embargo, se puede conectar por el nuevo puerto configurado. De este modo, se ha conseguido “esconder” un poco más el servidor SSH.


Posibilidad de loguearse como root

Para evitar la posibilidad de que un usuario pueda hacer login con la cuenta de  root se debe editar el fichero /etc/ssh/sshd_config y modificar la directiva PermitRootLogin que se debe descomentar y cambiar el valor de yes por un no. Una vez se reinicie el sistema esta directiva estará operativa. Esto evitará los ataques de fuerza bruta a la conexión que típicamente se realizan a la cuenta de root.

Número de intentos para loguearse


Para controlar el número de intentos que tiene un usuario para loguearse también se debe editar el fichero /etc/ssh/sshd_config. En este caso hay que descomentar la directiva MaxAuthTries y establecer el número de intentos que se quiere que un usuario tenga antes de dejarle un tiempo sin poder loguearse. Se recomienda 3 intentos, ya que siempre se puede olvidar la clave y no acertar a la primera... ni a la segunda.

Tiempo máximo de login

Esta directiva es importante ya que permite configurar un tiempo máximo para realizar el login al servidor SSH. Está pensada para las conexiones olvidadas en la mesa de trabajo, es decir, para que una sesión de login no se quede abierta esperando a que alguien introduzca las credenciales. Si salta, se da por supuesto que el usuario que se quería conectar ha perdido foco y mejor cerrar la sesión.

Para configurar la directiva se debe también editar el fichero /etc/ssh/sshd_config y buscar la directiva LoginGraceTime. Hay que descomentar la directiva y modificar su valor. Se recomienda un valor entre 10 y 20 segundos. Cuando el usuario se vaya a loguear tendrá ese número de segundos para hacerlo si no la conexión se cerrará.

Eso no es todo

En el siguiente post se terminará la serie con las últimas modificaciones para fortificar el servidor SSH. En este punto se tiene un servidor con claves seguras y distintas entre usuarios, no se puede loguear como root en el servidor y además el puerto por el que el servidor escucha no es el de por defecto. Con esto tenemos un poco más de seguridad, pero se puede mejorar aún bastante.

========================================================================
- Configuración OpenSSH en dispositivos iPhone (1 de 4)
- Configuración OpenSSH en dispositivos iPhone (2 de 4)
- Configuración OpenSSH en dispositivos iPhone (3 de 4)
- Configuración OpenSSH en dispositivos iPhone (4 de 4)
========================================================================

2 comentarios:

  1. En la foto de /etc/services dice que hay que cambiar ssh por securessh, mientras en el texto pone que hay que cambiarlo por secureshell.

    ResponderEliminar
  2. @jlalcazar, gracias por reportar la incongruencia ;)

    realmente da igual el nombre del servicio porque estamos dándole un nomobre nosotros, pero bueno lo dejaremos en securessh, como viene en la imagen.

    Gracias! ;)

    ResponderEliminar

Artículos relacionados

Otras historias relacionadas

Entradas populares