jueves, 8 de septiembre de 2011

Accede a tu pc desde internet de forma segura con SSH

En este tutorial, voy a explicar como instalar openssh-server para poder conectarnos a nuestro pc desde una LAN o desde internet.

También lo configuraremos de manera que sea más seguro y añadiremos extras de seguridad.


Instalación y configuración de ssh

Para empezar, vamos  a instalar openssh-server

Abrimos una terminal y :

scorpyo@pc:~$ sudo apt-get install openssh-server

Como el programa una vez instalado, se ejecuta, pues lo vamos a parar... para que no esté andando.

scorpyo@pc:~$ sudo service ssh stop

Ahora, vamos a modificar los parámetros de ssh para que sea más seguro.

El archivo que configura ssh está en /etc/ssh/sshd_config, así que en la misma terminal ponemos:

scorpyo@pc:~$ sudo nano /etc/ssh/sshd_config

*Yo he usado nano, pero podeis usar gedit si preferís así:

scorpyo@pc:~$ gksu gedit /etc/ssh/sshd_config

Bien, ahora las opciones que tenemos que cambiar o añadir si no están son estas:

-Cambiar el puerto:
Por defecto, ssh usa el puerto 22, pero a nosotros no nos interesa eso, ya que es algo que cualquiera sabe, nos interesa poner otro puerto, ejemplo.... 4428, entonces tenemos que cambiar el parametro Port.
Quedaría así:
Port 4428

-Cambiar o añadir osuarios permitidos:
Por defecto, si tienes solo un usuario no hace falta, pero si tienes varios usuarios en tu pc, y quieres decidir quien pueden entrar por ssh a su cuenta desde el exterior, puedes ponerlo en el siguiente apartado, será entonces cuando solo se puedan conectar los usuarios que pongas ahí:

AllowUsers scorpyo

-Disminuir el tiempo de cortesía para logearse:
Por defecto suele venir en 120... pero eso es demasiado tiempo, si te sabes la contraseña, por muy larga que sea no tardas más de 8 segundos en colocarla, así que quien tarde más de 30 segundos es que no la sabe... lo pondremos en 30 segundos y mucho es.

LoginGraceTime
30

-No permitir login de root
Es importante, que nadie pueda acceder como root al sistema, y si queremos hacer tareas administrativas siempre podremos usar sudo.

PermitRootLogin no

-Maximos intentos de loguin erroneos hasta cerrar sesión:
Por si alguien está intentando averiguar la contraseña, esto le incordiará bastante, ya que lo que hacemos es cerrar la conexión tras un limites de intentos, en el ejemplo he puesto 2.

MaxAuthTries 2

(esto no evita que vuelca a conectar y reintentar otras claves)

Bueno, con esto ya tenemos lista nuestra configuración de ssh.
Guardamos y cerramos Gedit.
Si estamos editando con nano apretamos Ctrl+o para guardar, le damos enter para confirmar y salimos con Ctrl+x


Otras medidas de seguridad

Ahora, vamos a tomar otras medidas de seguridad.

Hay que tener en cuenta algo primordial, aquí estamos usando la clave del usuario para iniciar sesión por ssh, es decir, si tu clave de usuario es "pepe", vamos por muy mal camino, es una clave super facil.

Así que unos consejos:

-No usar claves que puedan encontrarse en un diccionario, tales como... silla, calabaza, hermano, perro.... ni nombres propios... ni fechas de nacimiento.

-Usad siempre palabras inventadas como PerricopterO14?Alf
Anda, ¡que averigüen eso!... jajaja

Así, que si creéis que buestra contraseña no es segura, cambiadla.

Lo mejor es crear un par de claves RSA o RDA de manera que no haya claves viajando por la conexión, aunque sea SSH se corren riesgos...
Más adelante crearé un tutorial para crear una pareja de claves RSA y dejar de usar el login tradicional y pondré un enlace aquí.


Sigamos...

Todos sabemos que mediante fuerza bruta se pueden sacar claves aunque sean difíciles como la de arriba... puede llevar horas, semanas o meses, pero eso, al que está atacando le da igual.

Pues nosotros vamos a ponérselo más difícil aún... vamos a Banear (impedir conexión) a todos los que hagan cierta cantidad de intentos de acceso con claves erróneas.

Para eso necesitamos instalar fail2ban, así que en la misma terminal ponemos:

scorpyo@pc:~$ sudo apt-get install fail2ban

Ahora lo vamos a configurar para que sea un poco más duro en su trabajo... Va a pegar guantazos y todo... jajaja

Igual que antes vamos a editar con nano o gedit el archivo /etc/fail2ban/jail.conf así que....

scorpyo@pc:~$ sudo nano /etc/fail2ban/jail.conf

Tenemos que ir hasta el apartado [ssh] y veremos los situientes parámetros:

[ssh]

enabled = true
port   = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6


Pues bien, hay que hacer cambios... nos aseguraremos de que el valor de enabled está en true ya que si etá en false significa que no controlará las conexiones ssh.

port (puerto a controlar)
El puerto está establecido como el que usa por defecto ssh, que es el 22 pero nosotros lo cambiamos para más seguridad, así que hay que especificarlo, el nuestro era el 4428

port = 4428

maxretry (intentos de conexión antes de banear)
Aquí pondremos el numero de veces que una determinada IP puede intentar hacer login de forma errónea...
Si supera ese límite el programa fail2ban impedirá la conexión de esa ip durante un tiempo establecido por defecto en 10 minutos.

maxretry = 4


Quedaría algo así:

[ssh]

enabled = true
port    = 4428
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 4

Ok, ya tenemos configurado la mayor parte, pero como soy muy malo, a mi, 10 minutos de baneo me parecen muy pocos... ya que como tiene 4 intentos por cada 10 minutos, significa que tiene 20 intentos por hora y 480 por día.. me parece una burrada... así, que vamos a complicarlo..

Buscamos el apartado Defaults que está casi arriba y buscamos la opción bantime.

Esta opción es el tiempo de baneo en segundos... así que en vez de 600 que són 10 minutos, le pondremos algo más, yo le pongo 1680 segundos que son 28 minutos.

bantime 1680

Esto, reduce considerablemente el uso de ataques a nuestro pc.

Ya, creo que hemos terminado con la seguridad, ahora, guardamos todo.
Apretamos Ctrl+o para guardar, le damos enter para confirmar y salimos con Ctrl+x

Bien, ahora relanzamos el programa fail2ban para que tome las nuevas opciones

scorpyo@pc:~$ sudo service fail2ban restart

Y también lanzamos de nuevo ssh que lo paramos anteriormente

scorpyo@pc:~$ sudo service ssh start


Cortafuegos y routers

Ahora tenemos que configurar nuestro cortafuegos para que permita las conexiones entrantes al puerto 4428 que es el que hemos puesto.

Si estámos tras un router tendrá también su propio cortafuegos, así que tendremos que añadir este puerto y redirigirlos hacia nuestro pc... para eso no voy a hacer un tutorial, pero has de tener una ip fija o asegurarte de que el router siempre asigna el puerto 2248 a tu pc mediante mac o como sea.
Hay muchos tutoriales en internet.


Probando nuestra conexión desde el exterior o desde LAN

Pues listo, ya podemos conectarnos desde otro pc al nuestro de la siguiente forma:

Por ejemplo, mi ip (la del exterior, es decir, con la que salimos a internet) es la 83.168.154.124 y mi usuario en la máquina en la que quiero conectarme es scorpyo, pues haré lo siguiente:

scorpyo@pc:~$ ssh -p 4428 scorpyo@83.168.154.124

-p es para especificar el puerto, ya que nosotros lo hemos cambiado, si no lo ponemos  el comando ssh usaría por defecto el 22 y no podríamos conectarnos.

La IP es facil averiguarla si queréis acceder desde la misma red local, por ejemplo tipeando en una terminal:

scorpyo@pc:~$ nm-tool | grep Address
  HW Address:        70:F1:A1:16:BE:3E
    Address:         192.168.0.106
  HW Address:        70:5A:B6:80:72:EA
Ahí la tenéis... la 192.168.0.106 (siempre tengo la misma dentro de la red local)

Si queréis acceder desde internet podéis averiguar vuestra ip de muchas maneras, hay páginas en internet que os la dicen, también sale en el router... etc.

Como la mayoría de las ip's que nos asignan los proveedores de internet, son ips dinámicas, (esto significa que no siempre es la misma) pues eso añade el problema de que tenemos que estar constantemente averiguando la ip del pc, y si estamos fuera de casa, pues es un problemón.

Para eso, os podeis hacer una cuenta en http://dyn.com/dns/ o en http://www.no-ip.com/
Añadís los datos al router (no todos los routers soportan esta opción) y de esta manera, podríais tener un dominio tipo mimakina-remota.dyndns.org o mimakina-remota.no-ip.com y esta siempre os redirigiría hacia la ip actual que tengas.

Así yo me conectaría por ejemplo de esta manera:


scorpyo@pc:~$ ssh -p 4428 scorpyo@la-pcera.dyndns.org

Listo, ahora mismo eso es todo, y es lo mínimo que debéis de hacer para tener un servicio ssh mínimamente seguro.

Lo mejor es no tener activo ssh cuando no se necesite o cerrar el puerto en el cortafuegos.

Una forma de incrementar notablemente la seguridad es creando una pareja de claves RSA:
Tutorial y explicación sobre parejas de claves RSA

No hay comentarios:

Publicar un comentario

Deja aquí tu mensaje...