23 Consejos de seguridad para el refuerzo del servidor CentOS - Parte 2


Continuando con el tutorial anterior sobre Cómo proteger y fortalecer el servidor CentOS, en este artículo, analizaremos otros consejos de seguridad que se presentarán en la lista de verificación a continuación.

  1. 20 consejos de seguridad para el refuerzo del servidor CentOS - Parte 1

21. Deshabilite los comandos SUID y SGID inútiles

Si los bits setuid y setgid están configurados en programas binarios, estos comandos pueden ejecutar tareas con otros derechos de usuario o grupo, como privilegios de root que pueden exponer problemas de seguridad graves.

A menudo, los ataques de desbordamiento de búfer pueden explotar dichos binarios ejecutables para ejecutar código no autorizado con los derechos de un usuario root.

# find /  -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

Para desarmar el bit setuid, ejecute el siguiente comando:

# chmod u-s /path/to/binary_file

Para desarmar el bit setgid, ejecute el siguiente comando:

# chmod g-s /path/to/binary_file

22. Comprobar archivos y directorios sin propietario

Los archivos o directorios que no son propiedad de una cuenta válida deben eliminarse o asignarse con permisos de un usuario y grupo.

Ejecute el siguiente comando de búsqueda para enumerar archivos o directorios sin usuario ni grupo.

# find / -nouser -o -nogroup -exec ls -l {} \;

23. Lista de archivos que se pueden escribir en el mundo

Mantener un archivo de todo el mundo en el sistema puede ser peligroso debido al hecho de que cualquiera puede modificarlo. Ejecute el siguiente comando para mostrar archivos que se pueden escribir en palabras, excepto los enlaces simbólicos, que siempre se pueden escribir en todo el mundo.

# find / -path /proc -prune -o -perm -2 ! -type l –ls

24. Cree contraseñas seguras

Cree una contraseña de un mínimo de ocho caracteres. La contraseña debe contener dígitos, caracteres especiales y letras mayúsculas. Utilice pwmake para generar una contraseña de 128 bits desde el archivo/dev/urandom.

# pwmake 128

25. Aplicar una política de contraseña segura

Obligue al sistema a usar contraseñas seguras agregando la siguiente línea en el archivo /etc/pam.d/passwd.

password required pam_pwquality.so retry=3

Agregando la línea anterior, la contraseña ingresada no puede contener más de 3 caracteres en una secuencia monótona, como abcd, y más de 3 caracteres consecutivos idénticos, como 1111.

Para obligar a los usuarios a usar una contraseña con una longitud mínima de 8 caracteres, incluidas todas las clases de caracteres, verifique la fuerza de las secuencias de caracteres y los caracteres consecutivos agregue las siguientes líneas al archivo /etc/security/pwquality.conf.

minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3

26. Usar caducidad de contraseña

El comando chage se puede utilizar para el vencimiento de la contraseña del usuario. Para configurar la contraseña de un usuario para que caduque en 45 días, use el siguiente comando:

# chage -M 45 username

Para deshabilitar el tiempo de vencimiento de la contraseña, use el comando:

# chage -M -1 username

Forzar la caducidad inmediata de la contraseña (el usuario debe cambiar la contraseña en el próximo inicio de sesión) ejecutando el siguiente comando:

# chage -d 0 username

27. Bloquear cuentas

Las cuentas de usuario se pueden bloquear ejecutando el comando passwd o usermod:

# passwd -l username
# usermod -L username

Para desbloquear cuentas, use la opción -u para el comando passwd y la opción -U para usermod.

28. Impedir el acceso al shell de cuentas

Para evitar que una cuenta del sistema (cuenta ordinaria o cuenta de servicio) obtenga acceso a un shell bash, cambie el shell raíz a/usr/sbin/nologin o/bin/false en el archivo/etc/passwd emitiendo el siguiente comando:

# usermod -s /bin/false username

Para cambiar el shell al crear un nuevo usuario, ejecute el siguiente comando:

# useradd -s /usr/sbin/nologin username

29. Bloquear la consola de usuario virtual con vlock

vlock es un programa que se utiliza para bloquear una sesión múltiple en la consola de Linux. Instale el programa y comience a bloquear su sesión de terminal ejecutando los siguientes comandos:

# yum install vlock
# vlock

30. Utilice un sistema centralizado para administrar cuentas y autenticación

El uso de un sistema de autenticación centralizado puede simplificar enormemente la administración y el control de la cuenta. Los servicios que pueden ofrecer este tipo de gestión de cuentas son IPA Server, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS o Winbind.

Algunos de estos servicios están altamente protegidos de forma predeterminada con protocolos criptográficos y criptografía de clave simétrica, como Kerberos.

31. Forzar el montaje de solo lectura de medios USB

Con la utilidad blockdev, puede forzar que todos los medios extraíbles se monten como de solo lectura. Por ejemplo, cree un nuevo archivo de configuración de udev llamado 80-readonly-usb.rules en el directorio /etc/udev/rules.d/ con el siguiente contenido:

SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"

Luego, aplique la regla con el siguiente comando:

# udevadm control -reload

32. Desactivación del acceso raíz a través de TTY

Para evitar que la cuenta root inicie sesión en el sistema a través de todos los dispositivos de consola (TTY), borre el contenido del archivo securetty escribiendo el siguiente símbolo del terminal de comando como root.

# cp /etc/securetty /etc/securetty.bak
# cat /dev/null > /etc/securetty

Recuerde que esta regla no se aplica a las sesiones de inicio de sesión SSH
Para evitar el inicio de sesión de root a través de SSH, edite el archivo/etc/ssh/sshd_config y agregue la siguiente línea:

PermitRootLogin no

33. Use POSIX ACL para expandir los permisos del sistema

Las listas de control de acceso pueden definir derechos de acceso para más de un solo usuario o grupo y pueden especificar derechos para programas, procesos, archivos y directorios. Si configura ACL en un directorio, sus descendientes heredarán los mismos derechos automáticamente.

Por ejemplo,

# setfacl -m u:user:rw file
# getfacl file

34. Configurar SELinux en modo de aplicación

La mejora de SELinux al kernel de Linux implementa la política de control de acceso obligatorio (MAC), lo que permite a los usuarios definir una política de seguridad que proporciona permisos granulares para todos los usuarios, programas, procesos, archivos y dispositivos.

Las decisiones de control de acceso del kernel se basan en todo el contexto relevante para la seguridad y no en la identidad del usuario autenticado.

Para obtener el estado de Selinux y hacer cumplir la política, ejecute los siguientes comandos:

# getenforce
# setenforce 1
# sestatus

35. Instale las utilidades adicionales de SELinux

Instale el paquete policycoreutils-python que proporciona utilidades de Python adicionales para operar SELinux: audit2allow, audit2why, chcat y semanage.

Para mostrar todos los valores booleanos junto con una breve descripción, use el siguiente comando:

# semanage boolean -l

Por ejemplo, para mostrar y establecer el valor de httpd_enable_ftp_server, ejecute el siguiente comando:

# getsebool httpd_enable_ftp_server

Para hacer que el valor de un booleano persista entre reinicios, especifique la opción -P para setsebool, como se ilustra en el siguiente ejemplo:

# setsebool -P httpd_enable_ftp_server on

36. Utilice el servidor de registro centralizado

Configure el demonio rsyslog para enviar mensajes de registro de utilidades sensibles a un servidor de registro centralizado. Además, supervise los archivos de registro con la ayuda de la utilidad logwatch.

El envío de mensajes de registro a un servidor remoto asegura que una vez que el sistema se ha visto comprometido, los usuarios malintencionados no pueden ocultar completamente su actividad, dejando siempre rastros en los archivos de registro remotos.

37. Habilite la contabilidad de procesos

Habilite la contabilidad de procesos instalando la utilidad psacct y use el comando lastcomm para mostrar información sobre los comandos ejecutados anteriormente según se registra en el archivo de contabilidad del sistema y sa para resumir la información sobre los comandos ejecutados anteriormente según se registra en el archivo de contabilidad del sistema.

38. Endurecimiento de /etc/sysctl.conf

Utilice las siguientes reglas de parámetros del kernel para proteger el sistema:

net.ipv4.conf.all.accept_source_route=0
ipv4.conf.all.forwarding=0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Desactive la aceptación y el envío de paquetes redirigidos ICMP a menos que se requiera específicamente.

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.rp_filter=2

Ignorar todas las solicitudes de eco ICMP (establecer en 1 para habilitar)

net.ipv4.icmp_echo_ignore_all = 0

39. Utilice los servicios VPN para acceder a sus instalaciones a través de redes públicas desprotegidas

Utilice siempre los servicios VPN para que los operadores accedan de forma remota a las instalaciones de la LAN a través de Internet. Estos tipos de servicios se pueden configurar utilizando una solución de código abierto gratuita, como Epel Repositories).

40. Realizar una exploración del sistema externo

Evalúe la seguridad de su sistema en busca de vulnerabilidades escaneando el sistema desde puntos remotos a través de su LAN utilizando herramientas específicas como:

  1. Nmap - escáner de red 29 Ejemplos de comando Nmap
  2. Nessus: escáner de seguridad
  3. OpenVAS: se utiliza para buscar vulnerabilidades y para una gestión integral de vulnerabilidades.
  4. Nikto: un excelente escáner de secuencias de comandos de interfaz de puerta de enlace común (CGI) Escanear la vulnerabilidad web en Linux

41. Proteger el sistema internamente

Utilice la protección interna del sistema contra virus, rootkits, malware y, como buena práctica, instale sistemas de detección de intrusos que puedan detectar actividad no autorizada (ataques DDOS, escaneos de puertos), como:

  1. AIDE - Entorno avanzado de detección de intrusiones - http://aide.sourceforge.net/
  2. ClamAV - Escáner antivirus https://www.clamav.net
  3. Rkhunter - Escáner de rootkit
  4. Lynis: herramienta de análisis y auditoría de seguridad para Linux
  5. Tripwire: seguridad e integridad de los datos http://www.tripwire.com/
  6. Fail2Ban: prevención de intrusiones en la red
  7. OSSEC - (HIDS) Sistema de detección de intrusiones basado en host http://ossec.github.io/
  8. Mod_Security: protege los ataques de fuerza bruta o DDoS

42. Modificar variables de entorno de usuario

Agregue el formato de fecha y hora para almacenar la ejecución de los comandos emitiendo el siguiente comando:

# echo 'HISTTIMEFORMAT="%d/%m/%y  %T  "' >> .bashrc'

Fuerza a grabar instantáneamente HISTFILE cada vez que se escribe un comando (en lugar de cerrar sesión):

# echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc

Limite el tiempo de espera de la sesión de inicio de sesión. Derriba automáticamente el caparazón cuando no se realiza ninguna actividad durante un período de tiempo inactivo. Muy útil para desconectar automáticamente sesiones SSH.

# echo ‘TMOUT=120’ >> .bashrc

Aplica todas las reglas ejecutando:

# source .bashrc

43. Copia de seguridad de datos

Utilice instantáneas de LVM, etc. para almacenar una copia de su sistema, preferiblemente fuera del sitio, en caso de una falla del sistema.

Si el sistema se ve comprometido, puede realizar la restauración de datos de copias de seguridad anteriores.

Finalmente, no olvide que no importa cuántas medidas de seguridad y contramedidas tome para mantener su sistema seguro, nunca estará 100% completamente seguro mientras su máquina esté enchufada y encendida.