Cómo aumentar la seguridad y hardening en Linux

Cómo aumentar la seguridad y hardening en Linux

Seguridad Linux

Linux es uno de los sistemas operativos más seguros que hay, pero no es mágico. Debes configurar la seguridad de tu sistema Linux ( o de cualquier otro sistema) correctamente para protegerlo al máximo, y para eso está el hardening.

En esta entrada te explicaré que es exactamente el hardening y cuales son los puntos principales que debemos mejorar en nuestros sistemas para evitar problemas externos.

Si quieres conocer más sobre cómo funciona Linux y quieres saber cómo instalar tu propia distribución de Debian, puedes acceder de forma gratuita a mi curso básico de Linux.

¿Qué es el hardening en Linux?

Muchos os preguntaréis si el hardening tiene que ver con endurecer el sistema (por la traducción directa del inglés) y efectivamente, es exactamente eso. Es el proceso de reducción de vulnerabilidades en el sistema y recoge una serie de medidas de seguridad que se deben cumplir con el objetivo de estar preparados ante un ataque informático.

Cada vez estamos más expuestos al exterior, cualquiera puede tener ya una página web o un servidor de ssh, y con ello ya puedes ser objeto de un ataque. Por este motivo, cuando eres tú el que debe administrar el equipo, deberás tomar en consideración el seguir una serie de normas para asegurar y fortificar lo máximo posible tu sistema.

Consejos esenciales para configurar la seguridad y el Linux Hardening

A continuación te voy a explicar algunas de las medidas más aconsejables para mejorar el hardening de tu equipo. Si consiguieses seguir todas ellas, podrías conseguir un equipo prácticamente invulnerable.. pero eso es casi imposible. Las tecnologías y los conocimientos de hacking malicioso cada vez son más elevados y cada día surgen nuevos problemas o brechas de seguridad que aprovechan para atacar.

Por eso es tan importante tener un conocimiento, al menos básico, de lo que es el hardening y el fortalecimiento de la seguridad de tu equipo.

Contraseñas seguras

Seguro que estarás pensando, otro con la misma tabarra de usar contraseñas seguras y no reutilizables… Pues si, efectivamente esta es una de las principales medidas de seguridad de un equipo informático o de una cuenta online. Y créeme que una contraseña segura, larga (mínimo 12 caracteres), con mayúsculas, minúsculas, números y signos de puntuación es muy difícil (no imposible) que sea descifrada.

En Linux hay varias formas de obligar al usuario a que utilice una contraseña segura, pero te voy a explicar una de ellas. En primer lugar deberás descargar e instalar el paquete “libpam-pwquality”.

root@aprendolinux:/home/jaime# apt install libpam-pwquality
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
  cracklib-runtime libcrack2 libpwquality-common libpwquality1
Se instalarán los siguientes paquetes NUEVOS:
  cracklib-runtime libcrack2 libpam-pwquality libpwquality-common libpwquality1
0 actualizados, 5 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 244 kB de archivos.
Se utilizarán 977 kB de espacio de disco adicional después de esta operación.

Después puedes acceder al fichero de configuración en “/etc/security/pwquality.conf” y modificamos las entradas que se refieren al la longitud mínima de la contraseña y al tipo de contraseña. En este caso, el número 4 significa que deberá contener las 4 opciones mencionadas justo antes.

root@aprendolinux:/home/jaime# cat /etc/security/pwquality.conf
# Minimum acceptable size for the new password (plus one if
# credits are not disabled which is the default). (See pam_cracklib manual.)
# Cannot be set to lower value than 6.
minlen = 12
#
# The minimum number of required classes of characters for the new
# password (digits, uppercase, lowercase, others).
minclass = 4
....

Ahora puedes intentar crear un nuevo usuario en tu sistema, y te pedirá que cumplas con todos estos requisitos.

Revisar los permisos de ficheros y directorios por defecto

Hay una serie de permisos al crear los ficheros y directorios que en Linux no se configuran por defecto correctamente, y que deberíamos cuidar para que un posible atacante haga el menor daño en la máquina.

Por ejemplo, por defecto en Linux cuando creas un nuevo fichero se le asignan unos permisos con los que estás permitiendo que otro usuario del sistema pueda al menos leer ese fichero. Y cuando creas un directorio, pueden hacer un listado de los ficheros que contenga.

root@aprendolinux:/home/jaime/borrar# su - alex
alex@aprendolinux:~$ ls -las /home/jaime/
total 68
4 drwxr-xr-x 11 jaime jaime 4096 nov 16 23:56 .
4 drwxr-xr-x  4 root  root  4096 nov 16 23:58 ..
4 -rw-------  1 jaime jaime 3863 nov 16 23:58 .bash_history
4 -rw-r--r--  1 jaime jaime  220 mar 10  2021 .bash_logout
4 -rw-r--r--  1 jaime jaime 3526 mar 10  2021 .bashrc
4 drwxr-xr-x  3 jaime jaime 4096 nov 16 23:55 borrar

Para configurar correctamente estos permisos por defecto, habría que modificar el fichero “/etc/bash.bashrc” o “/etc/profile” y agregar la siguiente línea al final, para cambiar la máscara de los ficheros y directorios.

root@aprendolinux:/home/jaime/borrar# tail -n 1 /etc/bash.bashrc
umask 027
root@aprendolinux:/home/jaime/borrar# su - jaime
jaime@aprendolinux:~$ touch fichero
jaime@aprendolinux:~$ ls -l fichero
-rw-r----- 1 jaime jaime 0 nov 17 00:06 fichero
jaime@aprendolinux:~$ mkdir dir1
jaime@aprendolinux:~$ ls -ld dir1/
drwxr-x--- 2 jaime jaime 4096 nov 17 00:06 dir1/

Con esto hemos bloqueado completamente el acceso al resto de usuarios de la máquina a todos los ficheros que se creen en el futuro en nuestras cuentas de usuario.

Eliminar aplicaciones y software innecesario para mejorar la seguridad y hardening en Linux

Otra de las medidas aconsejables para mantener tu equipo lo más seguro posible es desinstalar y eliminar toda aplicación que ya no estés usando o que no tenga sentido tener instalada. Es decir, por ejemplo si tu equipo va a trabajar como un servidor Web o un almacén de backups.. ¿para qué necesita tener el servicio “cups” que sirve para la búsqueda y configuración de impresoras?

En Linux, si no tienes interfaz gráfico, puedes revisar los servicios que están instalados en el equipo ( y que quizás no estás utilizando ) con el siguiente comando:

root@aprendolinux:/home/jaime/borrar# service --status-all
 [ + ]  apparmor
 [ - ]  cgroupfs-mount
 [ - ]  console-setup.sh
 [ + ]  cron
 [ + ]  dbus
 [ + ]  docker
 [ - ]  hwclock.sh
 [ - ]  keyboard-setup.sh
 [ + ]  kmod
 [ + ]  networking
 [ + ]  procps
 [ + ]  rsyslog
 [ - ]  screen-cleanup
 [ + ]  ssh
 [ - ]  sudo
 [ + ]  udev
 [ - ]  x11-common

Configurar el acceso seguro por ssh a tu equipo

La mayoría de equipos Linux se pueden gestionar o al menor recibir accesos mediante el servicio SSH ( Secure Shell), por eso es muy importante que lo mantengas lo más seguro posible. Este servicio está instalado por defecto en la mayoría de distribuciones, pero podemos instalar el servidor completo con el paquete “openssh-server“.

Para empezar la configuración de este servicio, que se encuentra en el directorio “/etc/ssh/sshd_config“, debe tener unos permisos restringidos al usuario “root”. Aquí te explico más sobre como cambiar permisos de ficheros en Linux.

root@aprendolinux:/home/jaime# ls -l /etc/ssh/sshd_config
-rw-r--r-- 1 root root 3289 jul 28 15:33 /etc/ssh/sshd_config
root@aprendolinux:/home/jaime# chmod 600 /etc/ssh/sshd_config
root@aprendolinux:/home/jaime# ls -l /etc/ssh/sshd_config
-rw------- 1 root root 3289 jul 28 15:33 /etc/ssh/sshd_config

En este fichero hay varias entradas que es importante que estén habilitadas, como las siguientes:

  • UsePAM: Debe estar a “yes” para que se habilite el uso del módulo de autenticación PAM.
  • ClientAliveInterval: Establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del cliente, se le enviará un mensaje para solicitar una respuesta. Debería establecerse entre 300 a 600 segundos ( entre 5 y 10 minutos de inactividad).
  • ClientAliveCountMax: Establece el número de mensajes que se pueden enviar a un cliente sin que se reciba ninguna interacción del cliente. Si se alcanza este umbral sshd desconectará al cliente y finalizará la sesión. Este valor debería ser menor que 3 para no permitir que una conexión se quede abierta por un tiempo excesivamente alto.
  • MaxAuthTries: Especifica el número máximo de intentos de autenticación permitidos por conexión. Debería ser entre 3 y 6, para evitar los ataques por fuerza bruta.
  • PermitEmptyPassword: Establece si se permite el acceso al equipo con usuarios que tengan la contraseña vacia… obviamente esto no es nada seguro y habría que especificar a “no”.

Configurar sudoers para el comando sudo

Ahora te voy a explicar como reforzar la seguridad y hardening de Linux configurando correctamente el super comando “sudo“.

Como bien sabes, el comando sudo es muy importante para la gestión y administración de tu equipo, pero a la vez es una herramienta peligrosa que se debe configurar correctamente. En caso de no hacerlo, podrías permitir a cualquier usuario ejecutar comandos como usuario “root” lo que podría ser desastroso.

El fichero que se debe cambiar para la configuración del comando sudo está en “/etc/sudoers“. De forma predeterminada, se debe usar el comando “visudo” para la edición del fichero de configuración.

En la parte inicial del fichero, hay que definir valores por defecto y estos son los valores que deberías tener en cuenta:

  • use_pty: Obliga al usuario a tener una pseudo terminal abierta para lanzar comandos. Así no se podrían ejecutar comandos y dejarlos en segundo plano (lo que suele pasar cuando se infecta un equipo), ya que al terminar la sesión se cerrarán todas las terminales del usuario.
  • logfile: Si se define un fichero, podemos conseguir que se almacenen todos los comandos que son ejecutados con sudo. Así, revisando frecuentemente este fichero, serás capaz de vez si hay ejecuciones no autorizadas (o al menos intentos).
Defaults	logfile="/var/log/sudo.log"
Defaults        use_pty

Cambiar permisos de usuario y de grupo en sudoers

Para permitir que un usuario especifico pueda ejecutar un comando con privilegios de root, utilizando el comando sudo, se debería poner una línea con este formato (Con NOPASSWD delante, podemos especificar que no pida contraseña):

usuario    <terminal>=(usuario:grupo)       Comando/s
jaime          ALL=(root:root)             NOPASSWD:/usr/bin/apt

Cuando queremos referirnos a un grupo, deberemos especificar delante del nombre del grupo el signo de porcentaje, es decir debería quedar de esta forma:



%grupo      <terminal>=(usuario:grupo)       Comando/s
%wheel             ALL=ALL                 /usr/bin/mount

Instalar actualizaciones y parches

Una de las cosas buenas que tienen prácticamente todas las distribuciones de Linux es que tienen una comunidad muy activa, que siempre están buscando mejorar cada aplicación. Además, en caso de que se encuentre un error o un fallo de seguridad, los parches que lo solucionan no tardan mucho en publicarse.

Realizando una actualización periódica de tu sistema puedes estar seguro de que vas a estar protegido y a prueba de errores y fallos. Por lo que esta es una de las recomendaciones más sencillas, y a la vez más importantes que te puedo hacer.

Si quieres saber más puedes ir a mi entrada sobre como actualizar tu sistema Linux.

Backups

Otra de las tareas que deberías realizar periódicamente en cualquier sistema que estés manejando es la de realizar copias de seguridad. Con esto, estás asegurando que todo el trabajo que realizas cada día, las ultimas configuraciones o actualizaciones de tus aplicaciones, o tus datos personales van a estar seguros.

Estos backups no es recomendable que los hagas en otra partición del mismo disco duro, ni en otro disco duro que tengas conectado internamente en el ordenador. Esto es debido a que si hubiera un problema de fallo electrico, o incluso un incendio o inundación, podrías disponer siempre de una copia de tus datos más importantes y así conservarlos.

Hay muchas herramientas que te facilitar el almacenaje de copias de seguridad en los diferentes sistemas operativos, por lo que te recomiendo que revises cual puede ser la mejor opción.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *