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
Pingback: Tweets that mention Securizando los accesos a un sistema GNU/Linux | Blackhold -- Topsy.com
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
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…
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
Ya learn something new everyday. It’s true I guess!