Higiene básica del servidor Linux (parte 1) / Sudo Null IT News

¡Hola a todos! Para fortalecer la seguridad de los servidores Linux, a continuación proporciono algunos consejos, cuya base es la publicación 40 consejos de seguridad para reforzar el servidor Linux (edición 2023) Casa rural Viveka. Las instrucciones proporcionadas suponen que está utilizando una distribución de Linux basada en Ubuntu/Debian. Omito parte del material del autor, ya que la publicación se centra en la seguridad de los hosts Linux en la infraestructura.

!!! Se debe probar la compatibilidad de las recomendaciones siguientes con los servicios que utiliza. Antes de la implementación, recomiendo realizar pruebas en cada tipo individual de servidor/aplicación. !!!

  1. Cifrar los datos transmitidos

    Si es posible, evite el uso de FTP, Telnet y Rlogin/Rsh, ya que en la mayoría de las configuraciones de red, cualquier usuario de la misma red puede interceptar nombres de usuario, contraseñas, comandos y transferencias de archivos mediante rastreadores de paquetes de red. Utilice OpenSSH, SFTP o FTPS, que agrega cifrado mediante TLS.

    Para eliminar NIS, rsh y otros servicios heredados:

sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
  1. Minimizar el software instalado para minimizar vulnerabilidades en Linux

    Evite instalar software innecesario para evitar vulnerabilidades adicionales. Utilice un administrador de paquetes RPM como apt-get y/o dpkg para ver todo el conjunto de paquetes de software instalados en un sistema.

dpkg --list
dpkg --info packageName
apt-get remove packageName
  1. Un servicio de red por cada sistema único o instancia de máquina virtual

    Esto limitará la cantidad de otros servicios que pueden verse comprometidos. Por ejemplo, si un atacante puede utilizar con éxito software como Apache Flow, obtendrá acceso a todo el servidor, incluidos otros servicios como MySQL/MariaDB/PGSql, servidor de correo electrónico, etc. Si no tiene suficiente hardware, utilice la virtualización para obtener instancias adicionales.

  2. Mantenga actualizado su kernel y software de Linux

    La instalación de parches de seguridad es una parte importante del mantenimiento de un servidor Linux. Linux proporciona todas las herramientas necesarias para actualizar su sistema y también le permite actualizar fácilmente entre versiones. Todas las actualizaciones de seguridad deben revisarse (probarse) y aplicarse lo más rápido posible. Para aplicar actualizaciones use el comando

apt-get update && apt-get upgrade
  1. Utilice extensiones de seguridad de Linux

    Linux viene con varios parches de seguridad que puede utilizar para protegerse contra programas mal configurados o comprometidos. Si es posible, utilice SELinux y otras extensiones de seguridad de Linux para hacer cumplir las restricciones de la red y otros programas. Por ejemplo, SELinux proporciona varias políticas de seguridad para el kernel de Linux.

  2. Configurar control de acceso obligatorio

    SELinux permite el uso de control de acceso mondat (MAC). Según el control de acceso discrecional (DAC) de Linux estándar, una aplicación o proceso que se ejecuta como usuario (UID o SUID) tiene los permisos del usuario sobre objetos como archivos, sockets y otros procesos. La ejecución del kernel MAC protege el sistema de aplicaciones maliciosas o con errores que pueden dañar o destruir el sistema. Ver documentación oficial Sombrero rojoque explica la configuración de SELinux.

  3. Cuentas de usuario de Linux y políticas estrictas de contraseñas

    Utilice los comandos useradd/usermod para crear y mantener cuentas de usuario. Asegúrese de tener una política de contraseñas buena y segura. Por ejemplo, una buena contraseña tiene al menos 14 caracteres (aquí he cambiado la recomendación del autor a 8 caracteres) e incluye una combinación de letras, números, caracteres especiales, mayúsculas y minúsculas, etc. Es una buena práctica verifique las contraseñas de los usuarios con diccionarios de hashes de contraseñas filtrados.

    Normalmente los archivos de configuración relacionados con la contraseña y la autenticación se almacenan en el directorio /etc/pam.d/ en sistemas basados ​​en Debian. Y la política de contraseñas está definida en el archivo. /etc/pam.d/contraseña-común. Antes de realizar cambios en él, haga una copia de seguridad de este archivo por si acaso.

Para establecer la longitud mínima de la contraseña, edite el archivo:

sudo vi /etc/pam.d/common-password

Busque la siguiente línea:

password (success=2 default=ignore) pam_unix.so obscure sha512

Y añade una palabra extra al final: minlen=14. Aquí he establecido la longitud mínima de la contraseña. 14.

password (success=2 default=ignore) pam_unix.so obscure sha512 minlen=14

Guarde y cierre el archivo. Los usuarios ahora no pueden utilizar una contraseña de menos de 14 caracteres.

Para obtener más información sobre cómo configurar la complejidad de la contraseña, consulte Aquí.

  1. Establecer la fecha de vencimiento de la contraseña

    El comando chage cambia la cantidad de días entre cambios de contraseña y le permite determinar la fecha del último cambio de contraseña. El sistema utiliza esta información para determinar cuándo el usuario debe cambiar su contraseña.

    Hay otro archivo interesante en Linux: /etc/sombra. Este archivo almacena la frase de contraseña con hash (o “hash”) para las cuentas de usuario de Linux. Puede editar el archivo /etc/shadow en los siguientes campos

{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
  • Días_mínimos – el número mínimo de días requeridos entre cambios de contraseña, es decir el número de días que quedan antes de que se le permita al usuario cambiar su contraseña.

  • Días_máximo – el número máximo de días durante los cuales la contraseña es válida (después de los cuales el usuario se verá obligado a cambiar su contraseña).

  • Advertir – cuántos días antes de que caduque la contraseña se advertirá al usuario sobre la necesidad de cambiar la contraseña.

  • Caducar – días en los que la cuenta estará deshabilitada, es decir Una fecha absoluta que especifica cuándo ya no se puede utilizar el inicio de sesión.

    1. Restringir el uso de contraseñas anteriores

      Se recomienda evitar que todos los usuarios utilicen o reutilicen las mismas contraseñas antiguas en Linux. El parámetro de memoria del módulo pam_unix se puede utilizar para configurar la cantidad de contraseñas anteriores que no se pueden reutilizar. /etc/pam.d/common-password: archivo de configuración pam de Debian/Ubuntu Linux.

      Edite/agregue la línea de contraseña y agregue recordar=5 para evitar que el usuario reutilice cualquiera de sus últimas 5 contraseñas:

password sufficient pam_unix2.so use_authtok md5 shadow remember=5

Tenga en cuenta que las últimas 5 contraseñas de cada usuario se almacenan en el archivo /etc/security/opasswd para aplicar un historial de cambios de contraseña y evitar que el usuario cambie la misma contraseña con demasiada frecuencia.

  1. Bloquear cuentas de usuario después de un inicio de sesión fallido

    En Linux, puede utilizar el comando Faillog para mostrar las entradas del registro de errores o establecer límites en los intentos fallidos de inicio de sesión. faillog formatea el contenido del registro de errores /var/log/faillog. También se puede utilizar para mantener contadores y limitar los intentos fallidos de inicio de sesión. Para ver los intentos fallidos de inicio de sesión, ingrese:

faillog

Para desbloquear una cuenta después de intentos fallidos de iniciar sesión, ejecute:

faillog -r -u userName

La opción -m le permite establecer el número máximo de intentos fallidos de inicio de sesión (MAX) en el sistema; una vez que se excede este número, la cuenta se deshabilitará. Establecer un valor MAX de 0 no genera límite en la cantidad de inicios de sesión fallidos.

# faillog -M MAX -u username
# faillog -M 5 -u root

Tenga en cuenta que puede utilizar el comando passwd para bloquear y desbloquear cuentas:

# lock Linux account
passwd -l userName

# unlock Linux account
passwd -u userName

¿Cómo puedo asegurarme de que ninguna cuenta tenga contraseñas en blanco? Ingrese el siguiente comando

awk -F: '($2 == "") {print}' /etc/shadow

Bloquear todas las cuentas con contraseña vacía:

passwd -l userName
  1. Asegúrese de que ninguna cuenta que no sea root tenga su UID configurado en 0

    Sólo la cuenta raíz tiene UID 0 con permisos completos para acceder al sistema. Ingrese el siguiente comando para mostrar todas las cuentas con un UID de 0:

awk -F: '($3 == "0") {print}' /etc/passwd

Sólo deberías ver una línea:

root:x:0:0:root:/root:/bin/bash

Si ve otras líneas, elimínelas o asegúrese de que esas cuentas puedan usar UID 0.

  1. Deshabilitar el inicio de sesión raíz

    Nunca inicies sesión como root. Debe usar sudo para ejecutar comandos de nivel raíz según sea necesario. sudo mejora enormemente la seguridad del sistema al no compartir la contraseña de root con otros usuarios y administradores.

  2. Evaluar la seguridad física de los servidores Linux.

    Debe asegurar el acceso a la consola física de los servidores Linux. Configure el BIOS y desactive el arranque desde dispositivos externos como unidades de DVD/CD/USB. Establezca una contraseña para el BIOS y el cargador de arranque grub para proteger estas configuraciones. Puedes ver más detalles sobre la configuración. Aquí.

  3. Deshabilitar servicios innecesarios de Linux

    Deshabilite todos los servicios y demonios innecesarios (servicios que se ejecutan en segundo plano). Debe eliminar todos los servicios innecesarios desde el inicio del sistema. Ingrese el siguiente comando para ver todos los servicios que se inician durante el arranque en la capa 3:

# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target

Deshabilitar el servicio durante el arranque

# systemctl disable service
# systemctl disable httpd.service

Iniciar/detener/reiniciar el servicio

# systemctl start service
# systemctl start httpd.service

# systemctl restart service
# systemctl restart httpd.service

# systemctl stop service
# systemctl stop httpd.service

Ver registros

# journalctl
# journalctl -u network.service
# journalctl -u ssh.service
# journalctl -f
# journalctl -k
  1. Encuentra puertos de red abiertos

    Utilice el siguiente comando para obtener una lista de todos los puertos abiertos y sus programas asociados:

ss -tulpn
  1. Quitar sistemas X Window (X11)

    Los sistemas X Window (interfaz gráfica) no son necesarios en el servidor. No tiene sentido ejecutar X11 en un servidor de correo Linux dedicado y en un servidor web Apache/Nginx. Puede desactivar y desinstalar X Windows para mejorar la seguridad y el rendimiento del servidor. Debian usa /etc/rc2.d/*gdm o /etc/rc2.d/*kdm o /etc/rc2.d/*xdm para la GUI en el arranque. Para eliminar use los comandos.

update-rc.d gdm remove <== удаление Gnome
update-rc.d xdm remove <== удаление Kde
update-rc.d kdm remove <== удаление Xdm
  1. Configurar un firewall basado en Iptables y Envoltorios TCP

    Iptables es un programa de aplicación que le permite configurar el firewall (Netfilter) proporcionado por el kernel de Linux. Tenga cuidado al configurar Iptables: si comete un error en la configuración, puede perder el acceso a la red del servidor (afortunadamente, si Linux está en una máquina virtual, puede conectarse y corregir la configuración a través del hipervisor). Ejemplos de configuración disponibles Aquí.

  2. Ejecutar Refuerzo del kernel de Linux /etc/sysctl.conf

    El archivo /etc/sysctl.conf se utiliza para configurar los parámetros del kernel al inicio. Linux lee y aplica la configuración de /etc/sysctl.conf en el momento del arranque. Ejemplo /etc/sysctl.conf:

# Включаем execshield
kernel.exec-shield=1
kernel.randomize_va_space=1

# Включить защиту от IP спуфинга
net.ipv4.conf.all.rp_filter=1

# Отключить IP source роутинг
net.ipv4.conf.all.accept_source_route=0

# Игнорирование broadcast-запросов
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

# Убеждаемся, что сетевые пакеты с некорректными адресами логируются 
net.ipv4.conf.all.log_martians = 1

Publicaciones Similares

Deja una respuesta

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