25 consejos de seguridad para fortalecer los servidores Linux


Todo el mundo dice que Linux es seguro por defecto y está de acuerdo en cierta medida (son temas debatibles). Sin embargo, Linux tiene un modelo de seguridad incorporado de forma predeterminada. Necesita ajustarlo y personalizarlo según sus necesidades, lo que puede ayudar a hacer un sistema más seguro. Linux es más difícil de administrar pero ofrece más flexibilidad y opciones de configuración.

Asegurar un sistema en una producción de manos de piratas informáticos y crackers es una tarea desafiante para un administrador de sistemas. Este es nuestro primer artículo relacionado con "Cómo proteger una caja Linux" o "Fortalecer una caja Linux". En esta publicación, explicaremos 25 consejos y trucos útiles para proteger su sistema Linux. Espero que los siguientes consejos y trucos te ayuden a extender la seguridad de tu sistema.

1. Seguridad del sistema físico

Configure el BIOS para deshabilitar el arranque desde CD/DVD, dispositivos externos, disquetera en BIOS. A continuación, habilite la contraseña de BIOS y también proteja GRUB con contraseña para restringir el acceso físico a su sistema.

  1. Set GRUB Password to Protect Linux Servers

2. Particiones de disco

Es importante tener diferentes particiones para obtener una mayor seguridad de los datos en caso de que ocurra algún desastre. Al crear diferentes particiones, los datos se pueden separar y agrupar. Cuando ocurre un accidente inesperado, solo se dañarán los datos de esa partición, mientras que los datos de otras particiones sobrevivirán. Asegúrese de tener las siguientes particiones separadas y asegúrese de que las aplicaciones de terceros deben instalarse en sistemas de archivos separados en/opt.

/
/boot
/usr
/var
/home
/tmp
/opt

3. Minimice los paquetes para minimizar la vulnerabilidad

¿De verdad quieres instalar todo tipo de servicios ?. Se recomienda evitar la instalación de paquetes inútiles para evitar vulnerabilidades en los paquetes. Esto puede minimizar el riesgo de que el compromiso de un servicio pueda llevar al compromiso de otros servicios. Busque y elimine o desactive los servicios no deseados del servidor para minimizar la vulnerabilidad. Utilice el comando "chkconfig" para averiguar los servicios que se ejecutan en el nivel de ejecución 3.

# /sbin/chkconfig --list |grep '3:on'

Una vez que descubra que se está ejecutando algún servicio no deseado, desactívelo con el siguiente comando.

# chkconfig serviceName off

Utilice el administrador de paquetes RPM como las herramientas "yum" o "apt-get" para enumerar todos los paquetes instalados en un sistema y eliminarlos con el siguiente comando.

# yum -y remove package-name
# sudo apt-get remove package-name
  1. 5 chkconfig Command Examples
  2. 20 Practical Examples of RPM Commands
  3. 20 Linux YUM Commands for Linux Package Management
  4. 25 APT-GET and APT-CACHE Commands to Manage Package Management

4. Compruebe los puertos de red de escucha

Con la ayuda del comando de red "netstat", puede ver todos los puertos abiertos y programas asociados. Como dije anteriormente, use el comando "chkconfig" para deshabilitar todos los servicios de red no deseados del sistema.

# netstat -tulpn
  1. 20 Netstat Commands for Network Management in Linux

5. Utilice Secure Shell (SSH)

Los protocolos Telnet y rlogin utilizan texto sin formato, no formato cifrado, que son las brechas de seguridad. SSH es un protocolo seguro que utiliza tecnología de cifrado durante la comunicación con el servidor.

Nunca inicie sesión directamente como root a menos que sea necesario. Utilice "sudo" para ejecutar comandos. sudo se especifican en el archivo/etc/sudoers y también se pueden editar con la utilidad "visudo" que se abre en el editor VI.

También se recomienda cambiar el número de puerto SSH 22 predeterminado por algún otro número de puerto de nivel superior. Abra el archivo de configuración SSH principal y realice algunos de los siguientes parámetros para restringir el acceso de los usuarios.

# vi /etc/ssh/sshd_config
PermitRootLogin no
AllowUsers username
Protocol 2
  1. 5 Best Practices to Secure and Protect SSH Server

6. Mantenga el sistema actualizado

Mantenga siempre actualizado el sistema con las últimas versiones de parches, correcciones de seguridad y kernel cuando esté disponible.

# yum updates
# yum check-update

7. Lockdown Cronjobs

Cron tiene su propia función incorporada, donde permite especificar quién puede y quién puede no querer ejecutar trabajos. Esto se controla mediante el uso de archivos llamados /etc/cron.allow y /etc/cron.deny. Para bloquear a un usuario usando cron, simplemente agregue los nombres de usuario en cron.deny y para permitir que un usuario ejecute cron add en el archivo cron.allow. Si desea evitar que todos los usuarios usen cron, agregue la línea "TODOS" al archivo cron.deny.

# echo ALL >>/etc/cron.deny
  1. 11 Cron Scheduling Examples in Linux

8. Deshabilite la memoria USB para detectar

Muchas veces sucede que queremos restringir a los usuarios el uso de memorias USB en sistemas para proteger y asegurar los datos contra el robo. Cree un archivo "/etc/modprobe.d/no-usb" y agregar la siguiente línea no detectará el almacenamiento USB.

install usb-storage /bin/true

9. Encienda SELinux

Security-Enhanced Linux (SELinux) es un mecanismo de seguridad de control de acceso obligatorio proporcionado en el kernel. Deshabilitar SELinux significa eliminar el mecanismo de seguridad del sistema. Piénselo dos veces antes de eliminarlo, si su sistema está conectado a Internet y el público tiene acceso a él, piense un poco más en ello.

SELinux proporciona tres modos básicos de funcionamiento y lo son.

  1. Enforcing: This is default mode which enable and enforce the SELinux security policy on the machine.
  2. Permissive: In this mode, SELinux will not enforce the security policy on the system, only warn and log actions. This mode is very useful in term of troubleshooting SELinux related issues.
  3. Disabled: SELinux is turned off.

Puede ver el estado actual del modo SELinux desde la línea de comandos usando los comandos "system-config-selinux", "getenforce" o "sestatus".

# sestatus

Si está deshabilitado, habilite SELinux usando el siguiente comando.

# setenforce enforcing

También se puede administrar desde el archivo "/ etc/selinux/config", donde puede habilitarlo o deshabilitarlo.

10. Eliminar escritorios KDE / GNOME

No es necesario ejecutar escritorios X Window como KDE o GNOME en su servidor LAMP dedicado. Puede eliminarlos o deshabilitarlos para aumentar la seguridad del servidor y el rendimiento. Para deshabilitarlo, abra el archivo "/ etc/inittab" y establezca el nivel de ejecución en 3. Si desea eliminarlo por completo del sistema, utilice el siguiente comando.

# yum groupremove "X Window System"

11. Apague IPv6

Si no está utilizando un protocolo IPv6, debe deshabilitarlo porque la mayoría de las aplicaciones o políticas no requieren el protocolo IPv6 y actualmente no lo requieren en el servidor. Vaya al archivo de configuración de red y agregue las siguientes líneas para deshabilitarlo.

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no

12. Restringir a los usuarios para que utilicen contraseñas antiguas

Esto es muy útil si desea no permitir que los usuarios usen las mismas contraseñas antiguas. El archivo de contraseña anterior se encuentra en/etc/security/opasswd. Esto se puede lograr utilizando el módulo PAM.

Abra el archivo "/etc/pam.d/system-auth" en RHEL/CentOS/Fedora.

# vi /etc/pam.d/system-auth

Abra el archivo "/etc/pam.d/common-password" en Ubuntu/Debian/Linux Mint.

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

Agregue la siguiente línea a la sección "auth".

auth        sufficient    pam_unix.so likeauth nullok

Agregue la siguiente línea a la sección "contraseña" para no permitir que un usuario vuelva a utilizar las últimas 5 contraseñas.

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

El servidor solo recuerda las últimas 5 contraseñas. Si intentó utilizar alguna de las últimas 5 contraseñas antiguas, obtendrá un error como.

Password has been already used. Choose another.

13. Cómo comprobar la caducidad de la contraseña del usuario

En Linux, las contraseñas de los usuarios se almacenan en un archivo "/ etc/shadow" en formato cifrado. Para verificar la caducidad de la contraseña del usuario, debe usar el comando "chage". Muestra información sobre los detalles de la caducidad de la contraseña junto con la fecha del último cambio de contraseña. El sistema utiliza estos detalles para decidir cuándo un usuario debe cambiar su contraseña.

Para ver la información de antigüedad de cualquier usuario existente, como la fecha y hora de vencimiento, use el siguiente comando.

#chage -l username

Para cambiar la antigüedad de la contraseña de cualquier usuario, use el siguiente comando.

#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
  1. -M Set maximum number of days
  2. -m Set minimum number of days
  3. -W Set the number of days of warning

14. Bloquear y desbloquear la cuenta manualmente

Las funciones de bloqueo y desbloqueo son muy útiles, en lugar de eliminar una cuenta del sistema, puede bloquearla durante una semana o un mes. Para bloquear a un usuario específico, puede utilizar el siguiente comando.

# passwd -l accountName

Nota: El usuario bloqueado todavía está disponible solo para usuarios root. El bloqueo se realiza reemplazando la contraseña cifrada con una cadena (!). Si alguien intenta acceder al sistema usando esta cuenta, obtendrá un error similar al siguiente.

# su - accountName
This account is currently not available.

Para desbloquear o habilitar el acceso a una cuenta bloqueada, use el comando como. Esto eliminará la cadena (!) Con la contraseña cifrada.

# passwd -u accountName

15. Hacer cumplir contraseñas más estrictas

Varios usuarios usan contraseñas suaves o débiles y su contraseña puede ser pirateada con un diccionario o ataques de fuerza bruta. El módulo "pam_cracklib" está disponible en la pila de módulos PAM (Módulos de autenticación conectables) que obligará al usuario a establecer contraseñas seguras. Abra el siguiente archivo con un editor.

Leer también:

# vi /etc/pam.d/system-auth

Y agregue una línea usando parámetros de crédito como (lcredit, ucredit, dcredit y/u ocredit respectivamente en minúsculas, mayúsculas, dígitos y otros)

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

16. Habilite Iptables (firewall)

Se recomienda encarecidamente habilitar el firewall de Linux para proteger el acceso no autorizado a sus servidores. Aplicar reglas en iptables para filtrar paquetes entrantes, salientes y reenviados. Podemos especificar la dirección de origen y destino para permitir y denegar en un número de puerto udp/tcp específico.

  1. Basic IPTables Guide and Tips

17. Deshabilitar Ctrl + Alt + Delete en Inittab

En la mayoría de las distribuciones de Linux, presionar "CTRL-ALT-DELETE" hará que su sistema reinicie el proceso. Por lo tanto, no es una buena idea tener esta opción habilitada al menos en los servidores de producción, si alguien lo hace por error.

Esto se define en el archivo "/ etc/inittab". Si observa de cerca en ese archivo, verá una línea similar a la siguiente. Por defecto, la línea no está comentada. Tenemos que comentarlo. Esta señalización de secuencia de teclas en particular apagará un sistema.

# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

18. Comprobación de cuentas de cheques para contraseñas vacías

Cualquier cuenta que tenga una contraseña vacía significa que está abierta para acceso no autorizado a cualquier persona en la web y es parte de la seguridad dentro de un servidor Linux. Por lo tanto, debe asegurarse de que todas las cuentas tengan contraseñas seguras y que nadie tenga acceso autorizado. Las cuentas de contraseña vacías son riesgos de seguridad y pueden piratearse fácilmente. Para verificar si hay cuentas con contraseña vacía, use el siguiente comando.

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

19. Mostrar banner SSH antes de iniciar sesión

Siempre es mejor tener un banner legal o banners de seguridad con algunas advertencias de seguridad antes de la autenticación SSH. Para configurar dichos banners, lea el siguiente artículo.

  1. Display SSH Warning Message to Users

20. Supervisar las actividades del usuario

Si está tratando con muchos usuarios, entonces es importante recopilar la información de las actividades y procesos de cada usuario consumidos por ellos y analizarlos en un momento posterior o en caso de algún tipo de rendimiento, problemas de seguridad. Pero, ¿cómo podemos monitorear y recopilar información sobre las actividades de los usuarios?

Hay dos herramientas útiles llamadas "psacct" y "acct" que se utilizan para monitorear las actividades y procesos de los usuarios en un sistema. Estas herramientas se ejecutan en un segundo plano del sistema y rastrea continuamente la actividad de cada usuario en un sistema y los recursos consumidos por servicios como Apache, MySQL, SSH, FTP, etc. Para obtener más información sobre la instalación, configuración y uso, visite la siguiente URL.

  1. Monitor User Activity with psacct or acct Commands

21. Revise los registros con regularidad

Mueva los registros en el servidor de registros dedicado, esto puede evitar que los intrusos modifiquen fácilmente los registros locales. A continuación se muestran el nombre de los archivos de registro predeterminados de Common Linux y su uso:

  1. /var/log/message – Where whole system logs or current activity logs are available.
  2. /var/log/auth.log – Authentication logs.
  3. /var/log/kern.log – Kernel logs.
  4. /var/log/cron.log – Crond logs (cron job).
  5. /var/log/maillog – Mail server logs.
  6. /var/log/boot.log – System boot log.
  7. /var/log/mysqld.log – MySQL database server log file.
  8. /var/log/secure – Authentication log.
  9. /var/log/utmp or /var/log/wtmp : Login records file.
  10. /var/log/yum.log: Yum log files.

22. Copia de seguridad de archivos importante

En un sistema de producción, es necesario realizar una copia de seguridad de los archivos importantes y mantenerlos en una bóveda de seguridad, un sitio remoto o fuera del sitio para la recuperación de desastres.

23. Vinculación NIC

Hay dos tipos de modos en la vinculación NIC, es necesario mencionarlos en la interfaz de vinculación.

  1. mode=0 – Round Robin
  2. mode=1 – Active and Backup

NIC Bonding nos ayuda a evitar un solo punto de falla. En la vinculación NIC, unimos dos o más tarjetas Ethernet de red y hacemos una sola interfaz virtual donde podemos asignar una dirección IP para hablar con otros servidores. Nuestra red estará disponible en caso de que una tarjeta NIC no funcione o no esté disponible por cualquier motivo.

24. Mantenga / boot como de solo lectura

El kernel de Linux y sus archivos relacionados están en el directorio/boot, que por defecto es lectura-escritura. Cambiarlo a solo lectura reduce el riesgo de modificaciones no autorizadas de archivos de arranque críticos. Para hacer esto, abra el archivo “/ etc/fstab”.

# vi /etc/fstab

Agregue la siguiente línea en la parte inferior, guárdela y ciérrela.

LABEL=/boot     /boot     ext2     defaults,ro     1 2

Tenga en cuenta que debe restablecer el cambio a lectura-escritura si necesita actualizar el kernel en el futuro.

25. Ignorar ICMP o solicitud de difusión

Agregue la siguiente línea en el archivo “/etc/sysctl.conf” para ignorar la solicitud de ping o transmisión.

Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1

Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1

Cargue nuevas configuraciones o cambios, ejecutando el siguiente comando

#sysctl -p

Si se ha perdido algún consejo importante de seguridad o refuerzo en la lista anterior, o si tiene algún otro consejo que deba incluirse en la lista. Deje sus comentarios en nuestro cuadro de comentarios. TecMint siempre está interesado en recibir comentarios, sugerencias y discusiones para mejorar.