7 sept 2009

Asegurar tu SSH



Nota: Este articulo es un copy-paste y por problemas de tiempo no lo he podido realizar personalmente en estos momentos, pero quería publicar el articulo por que me parecio interesante, luego lo probare en mi Debian ;-)  ya que este esta hecho en Ubuntu y no es que tenga algo encontra de Ubuntu pero en estos momentos estoy utilizando Debian en mi PC.
Si no sabemos que es ssh primero veamos un poco de información antes de proceder: Click Aquí
Bueno en este articulo no pretendo mostrar un completo manual sobre como asegurar tu "ssh", solo son algunos tips que pueden servirnos para asegurarlo un poco más, pero existen otras formas de asegurarlo de una manera mucho más completa.
Lo primero es tener el paquete (obvio) y de no ser así entonces procedemos a instalarlo:
Antes de esto podemos actualizar nuestro sistema y sus repositorios:
root@ubuntu:~# apt-get update
root@ubuntu:~# apt-get upgrade
Y ahora sí instalamos el paquete
root@ubuntu:~# apt-get install ssh
Ya con el paquete instalado procedemos a configurarlo, entonces abrimos el archivo de configuración que normalmente lo encontramos en /etc/ssh/sshd_config.
 
root@ubuntu:~# vim /etc/ssh/sshd_config
Nota: El simbolo "#" al principio de las lineas en el archivo significa que es un comentario y no se lee como configuración del archivo por eso debemos descomentar si es necesario
Lo primero que haremos es cambiar el puerto en el que escucha por defecto

# What ports, IPs and protocols we listen for
Port 7085
Recordemos que el puerto debe estar  libre...
Como el ssh establece conexion con cualquier direccion IP lo configuraremos para que solo se conecte con una direccion IP en especifico.

# Use these options to restrict which interfaces...
ListenAddress 192.168.1.1

Aunque recordemos que en un ataque hacia nuestro server pueden existir muchas tecnicas para evadir este pequeño filtro (como la tecnica de spoofing) pero esta configuración nos dara un poco más de seguridad ante posibles inexpertos o ante algunas personas curiosas.

Establecer el protocolo con el cual trabajara el ssh (1 o 2), aunque en nuevas versiones creo que ya viene por
defecto trabajando con el protocolo 2,  pero de no ser así lo haremos nosotros mismos:
Protocol 2
Ahora configuraremos nuestro servicio para que cierre la conexión pasado un tiempo determinado sin que sea introducido el password.
# Authentication:
LoginGraceTime 20
Luego lo que haremos es deshabilitar el acceso del root mediante el ssh por motivos de seguridad. 

# Authentication:
PermitRootLogin no

También deshabilitamos el uso de contraseñas vacias, aunque esto por defecto viene deshabilitado pero será mejor asegurarnos
# To enable empty passwords...
PermitEmptyPasswords no
Esta linea del archivo sirve para permitir el uso del entorno grafico, se cual sea la necesidad lo permitimos o no, depende de cada uno y su necesidad.

X11Forwarding no
  
Entrar con usuario y password está bien , pero podemos tener mas seguridad usando un par de claves publica y privada. Creamos nuestra clave publica en nuetra maquina cliente
root@ubuntu:~# ssh-keygen -t rsa
Al ejecutar este comando nos pide una clave, le asignamos una y luego deberemos colocar en esa maquina remota la clave RSA publica que acabamos de generar (~/.ssh/id_rsa.pub) en el directorio ~/.ssh/authorized_keys de el servidor ssh.
Habilitamos la autenticación por clave en el servidor ssh
Ahora es momento de volver a configurar /etc/ssh/sshd_config para habilitar la autenticación con las claves anteriormente añadidas:
~/.ssh/authorized_keys del servidor ssh
en /etc/ssh/sshd_config
PubKeyAuthentication yes 
AuthorizedKeysFile    .ssh/authorized_keys

Y ahora deshabilitamos el uso de contraseñas para loguearse en el server

PasswordAuthentication no

Si estamos trabajando con contraseñas para el logueo configuramos la cantidad maxima de intentos para ingresar la contraseña. Pasados los intentos definidos se corta la conexión.

MaxStartups 3

Si queremos banear las direcciones que hacen varios intentos de login en nuestro server ssh hacemos lo siguiente:
Necesitamos el paquete fail2ban, entonces procedemos a descargarlo

root@ubuntu:~# apt-get install fail2ban

Ahora necesitamos crear una directiva para el ssh

root@ubuntu:~# vim /etc/fail2ban/jail.local

Añadiendo lo siguiente:
    [ssh]enabled = true
    port = 7085
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 5

El numero 5 es el numero maximo de intentos, despues de esta cantidad se banea la dirección IP
Ahora establecemos nuestro cifrado seguro de ssh.

Ciphers aes128-ctr,aes256-ctr,arcfour256,arcfour,aes128-cbc,aes256-cbc

Editamos el mensaje de bienvenida del ssh (opcional).
Banner /etc/issue.net 

Luego configuramos el usuario que se conectara por medio del ssh

#Usuarios permitidos
AllowUsers sairux

Con esta linea solo el usuario sairux se podra conectar al server y solo desde la dirección IP 192.168.1.1 antes configurada.
Si queremos otro usuario para loguearse en el server

#Usuarios permitidos
AllowUsers sairux fox

Y si queremos configurar un grupo para el logueo en el server.

#Habilitando grupos
AllowGroups users_ssh

Nota: Debemos de tener los dos usuarios antes comentados (sairux y fox) en el grupo de permitidos.
Ahora pasamos a esconder la version del ssh.

Codigo
snprintf(buf,sizeofbuf,"SSH-%d.%d-%.100s\n",major,minor,SSH_VERSION); 

por tanto, para eliminar/cambiar el banner sólo hace falta modificar la macro SSH_VERSION que está definida en version.h:

Codigo
#define SSH_VERSINO "OpenSSH_4.5"

Nota: No existe otra forma posible de hacer esto, ya que OpenSSH no lee el banner de un fichero, sino que está incrustado en el propio código.
Al realizar todos los cambios pertinentes reiniciamos los dos servicios:

root@ubuntu:~# /etc/init.d/ssh restart
root@ubuntu:~# /etc/init.d/fail2ban restart
Y listo ya tenemos nuestro server corriendo


No hay comentarios: