Securizando los accesos a un sistema GNU/Linux

Cuando tenemos una maquina expuesta directamente a internet es realmente muy importante tener primero de todo una buena política de passwords, además de realizar 4 cambios para aumentar la seguridad frente ataques por fuerza bruta.

Lo primero de todo y muy recomendable es no permitir el login de root (si se precisa acceso hacerlo vía pre-sharedkey):

# vi /etc/ssh/sshd_config
PermitRootLogin no

A continuación indicamos también qué usuarios son los que pueden acceder por ssh a esta máquina:

# vi /etc/ssh/sshd_config
AllowUsers Blackhold pepito manganito

También es recomendable, si la máquina está directamente a la red (que no está detrás de NAT), de cambiar el puerto por defecto, en este ejemplo el 2224:

# vi /etc/ssh/sshd_config
Port 2224

Es importante usar algun puerto que no se use por algún programa, ya que hay algun software de escaneo de puertos que suele mirar los puertos por defecto de los servicios mas comunes.

Tras aplicar estos cambios es preciso reiniciar el servicio de ssh:

# /etc/init.d/ssh restart

Una vez hecha la parte de la conexión por ssh, es preciso obligar a los usuarios mantener una política de passwords correcta.

Lo primero es evitar que usen passwords de diccionario. Para ello instalaremos la libreria libpam-cracklib:

# apt-get install libpam-cracklib

Y la activaremos en el fichero common-password:

# vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=8 difok=3

Esta línea la tendremos que colocar arriba del todo del bloque primario (“Primary” block)

Además esta librería nos permite realizar varias restricciones, por ejemplo

password requisite pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=1 ucredit=1 dcredit=1 ocredit=0

Donde:
minlen: especifica el número mínimo de caracteres.
lcredit: especifica el número mínimo de letras minúsculas
ucredit: especifica el número mínimo de letras mayúsculas
dcredit: especifica el número mínimo de caracteres numéricos ocredit especifica el número de caracteres de otro tipo, como por ejemplo símbolos.

Este ejemplo requerirá 1 minúscula y 1 mayúscula, además de un número.

Otra cosa que se puede hacer para mejorar la seguridad es obligar a los usuarios a cambiar su password cada x tiempo, esto se hace en el fichero login.defs:

/etc/login.defs
PASS_MAX_DAYS 60
PASS_MIN_DAYS 7
PASS_WARN_AGE 10

Nos hará cambiar la contraseña pasados 2 meses, avisándonos cada vez que hagamos login los 10 dias previos a la caducidad.

Además para forzar que no se repitan los passwords, pam_unix.so nos permite guardar los passwords usados en un fichero llamado opasswd dentro de /etc/security, para activar esto tendremos que volver a editar el fichero common-password y modificar la linea:

# vi /etc/pam.d/common-password
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=10

Esta línea también tiene que ir en la Primary block, debajo de la otra línea que hemos añadido antes.

Podemos hacer la prueba cambiando el password del usuario, veremos como el fichero opasswd va creciendo ;)

Lo siguiente para evitar que alguien pille un usuario y empiece a probar passwords, vamos a definir un numero máximo de intentos y un tiempo de gracia para que el usuario en cuestión pueda entrar de nuevo pasado este tiempo. Para ello editamos el fichero common-auth:

# vi /etc/common-auth
auth required pam_tally.so onerr=fail deny=3 unlock_time=3600

Para ver si los logins fallidos de un usuario vamos a usar el comando pam_tally:

# pam_tally --user usuario
User usuario (1001) has 3

En el caso que un usuario tenga demasiados intentos fallidos, pero sea el propio usuario el que se ha hecho el “auto-ataque”, podemos resetear el numero de intentos otra vez a 0:

# pam_tally --user usuario --reset
User usuario (1001) had 3
# pam_tally --user usuario
User usuario (1001) has 0

5 Comments

  1. Pingback: Tweets that mention Securizando los accesos a un sistema GNU/Linux | Blackhold -- Topsy.com

  2. la leche!!
    el tally ese es util-util, tanto que he estado dos horas sin poder acceder a mi cuenta, hasta que me he acordado de que lo había añadido a /etc/pam.d/common-auth (que por cierto, no es /etc/common-auth ;), he entrado como su, y he reseteado el tally…

    jejej, por si alguien trata de tocarme el equipo en un descuido está de la leche.

    aparte, ahora me he pillado un tunel ipv6, de manera que mis ordenatas de la “red local ipv4” tienen direcciones plenamente públicas y alcanzables por cualquier ordenata operando en ipv6 y con conexión a esta nube…

    el caso es que, aunque tengo un shorewall6 en el servidor de casa con el que hago mis pinitos, mi ordenata está bastante más expuesto con esto del ipv6, así que el tally me viene de perlas.

    venga, mucho ánimo!!
    sax

    Respon
  3. umm, otra cosa que estoy pensando, quizás esto del tally se pueda configurar para que pasado n tiempo sin incrementos de intentos vuelva a dejar entrar, por aquello de que si te hacen un ataque de fuerza bruta luego no puedas acceder…

    Respon
  4. Vale, no he dicho nada; el tiempo para levantar el veto son 3600 segundos (aka 60 minutos aka 1 hora).
    Siento el despiste
    Atte
    tonic

    Respon

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.