Tips de “Hardering” de seguridad para Servidores Linux (Parte II)

Linux-SecureEsta es la segunda parte de los “Tips de Hardering de seguridad para Servidores Linux” que había iniciado ya hace un tiempo largo.

En este segundo post vamos a explicar mas consejos y trucos para asegurar un sistema Linux. Espero que los consejos y trucos debajo descritos ayuden a asegurar su sistema Linux.

11. Deshabilitar IPv6

Si no estamos usando el protocolo IPv6, entonces debemos deshabilitarlo, porque la mayoría de las aplicaciones o políticas no requieren IPv6, y actualmente no se utiliza en servidores. Para desactivarlo, debemos ir al archivo de configuración de red y agregar las siguientes lineas:

12. Restringir a los usuarios de utilizar contraseñas anteriores

Esto es muy útil si desea restringir que los usuarios utilicen las mismas contraseñas antiguas. El archivo de contraseñas antiguas se encuentra en /etc/security/opasswd. Esto se puede lograr utilizando el modulo PAM.

Abrir el archivo ‘/etc/pam.d/system-auth‘ en RHEL/CentOS/Fedora.

Abrir el archivo ‘/etc/pam.d/common-password‘ en Ubuntu/Debian/Linux Mint.

Agregar la siguiente linea a la sección ‘auth

Agregar la siguiente linea a la sección ‘password‘ para restringir a los usuarios reutilizar las ultimas 5 contraseñas.

El servidor recordara solos los últimos 5 passwords. Si un usuario trata de utilizar cualquiera de las ultimas 5 contraseñas antiguas, saldrá el siguiente error:

13. Comprobar la caducidad de las contraseñas de usuarios

En Linux, las contraseñas de usuario se almacenan en el archivo ‘etc/shadow‘ en formato encriptado. Para comprobar la caducidad de las mismas, es necesario utilizar el comando ‘chage‘. Este comando muestra los detalles de la caducidad de las contraseñas junto con la fecha del ultimo cambio. Estos datos son utilizados por el sistema para decidir cuando un usuario debe cambiarla.

Para ver la información sobre la vigencia de la contraseña de cualquier usuario del sistema, como la fecha y hora de vencimiento, utilice el siguiente comando:

Para cambiar el tiempo de caducidad de cualquier usuario, utilice el siguiente comando:

14. Bloqueo y Desbloqueo de cuentas de usuario manual.

El bloqueo y desbloqueo de cuentas son características muy útiles, en lugar de eliminar una cuenta del sistema podemos bloquearla por una semana o un mes (por ejemplo, un usuario que se toma vacaciones). Para bloquear a un usuario especifico, se utiliza el siguiente comando:

Nota: El usuario bloqueo continuara disponible solo para el usuario root. El bloqueo se realiza mediante la sustitución de la contraseña cifrada por el string (!). Si alguien intenta acceder al sistema utilizando esta cuenta, recibirá un error similar al siguiente:

Para desbloquear o permitir acceso a una cuenta que fue bloqueada, utilice el siguiente comando (Esto eliminara el string (!) por la contraseña cifrada):

15. Forzar el uso de contraseñas mas seguras

Muchos usuarios utilizan contraseñas débiles, y estas pueden ser hackeadas por medio de ataques basados en diccionario o fuerza bruta. El modulo ‘pam_clicklib‘ esta disponible dentro de la pila de módulos PAM (Pluggable Authentication Modules) y obligara a los usuarios a establecer contraseñas mas seguras. Debemos abrir el siguiente archivo con algún editor:

Y agregue la siguiente linea usando los siguientes parámetros (credit, ucredit, dcredit y/o ocredit que son minúsculas, mayúsculas, números y otros caracteres especiales respectivamente.)

16. Habilitar IPTables (Firewall)

Es casi obligatorio activar el firewall de Linux para evitar el acceso no autorizado a los servidores. Aplicar reglas en IPTables para filtros entrantes, salientes y reenvío de paquetes. Podemos especificar la dirección de origen y de destino para permitir o denegar el numero de puerto udp/tcp especifico

En el futuro realizare un post explicando detalladamente como utilizar IPTables, por ahora les dejo esta guía (en Ingles) de uso de IPTables

17. Deshabilitar Ctrl+Alt+Delete en Inittab

En la mayoría de las distribuciones de Linux, al pulsar “ALT+CTRL+DEL” se activa el proceso de reinicio del sistema. Por lo tanto, no es buena idea tener esta opción activada, al menos en los servidores de producción, si alguien por error hace esto.

Esto se define en el archivo ‘etc/inittab‘, si nos fijamos bien en este archivo, se vera una linea similar a la siguiente. De forma predefinida, la linea no esta comentada. Tenemos que comentarla para desactivar la opción. En este ejemplo en particular, la secuencia de letras apagara el sistema:

18. Comprobar cuentas de usuario con contraseñas vacías

Cualquier cuenta sin contraseña significa una puerta abierta para un acceso no autorizado para cualquier persona en la red (LAN o WAN) y es un problema de seguridad dentro de un servidor Linux. Por lo tanto, debemos asegurarnos de que todas las cuentas tienen contraseñas seguras y nadie tenga acceso autorizado. Las cuentas sin contraseñas son un gran riesgo de seguridad y pueden ser fácilmente hackeables. Para comprobar si hay cuentas sin contraseña, utilizamos el siguiente comando:

19. Mostrar un Banner antes del login en SSH

Siempre es buena idea poner un banner legal o de seguridad con algunas advertencias antes de la autenticación en SSH. Para configurar este tipo de banners debemos hacer lo siguiente:

Podemos reformar cualquiera de los siguientes archivos, según nuestro interés

issue.net — Mostrara el banner antes de ingresar el password
motd — Mostrara el banner después de ingresar el password

Si queremos que el banner se muestre antes de ingresar el password

Aquí configuramos para que muestre el banner

agregamos la siguiente linea al archivo ‘sshd_config

Reiniciamos el servicio sshd para reflejar los cambios

Si queremos que el banner se muestre después de ingresar el password creamos el banner en el archivo

20. Revisar Logs regularmente

Una idea interesante es mover los logs a un servidor dedicado, esto evitara que un intruso pueda modificar fácilmente los logs. A continuación se muestran los logs comunes en Linux y su uso:

  • /var/log/message – Donde están disponibles los logs del sistema entero y de la actividad actual.
  • /var/log/auth.log – Logs de Autenticación
  • /var/log/kern.log – Logs del Kernel
  • /var/log/cron.log – Logs del demonio cron (cron jobs)
  • /var/log/maillog – Logs del servidor de Mail
  • /var/log/boot.log – Logs del booteo del sistema
  • /var/log/mysqld.log – Logs del servidor de DB MySQL
  • /var/log/secure – Logs de Autenticación
  • /var/log/utmp or /var/log/wtmp – Logs de registro de acceso
  • /var/log/yum.log – Log de YUM

21. Realizar Backup de los archivos importantes

En un sistema de producción, es necesario tener copias de seguridad de archivos importantes, y guardarlos en un lugar seguro, en un sitio remoto o fuera de las instalaciones en caso de recuperación de desastres.

22. Mantener la partición /boot como solo-lectura

El Kernel de Linux y los archivos relacionados se encuentran en el directorio/partición /boot, que esta configurada por defecto como lectura/escritura. Si lo cambiamos a solo-lectura reducimos el riesgo de modificación no autorizada de archivos de arranque críticos. Para ellos, abra el archivo ‘/etc/fstab’

Agregamos la siguiente linea en la parte inferior, guardamos y cerramos

Nota: Hay que tener en cuenta que necesitamos restablecer los cambios y volver a lectura-escritura si en el futuro necesitamos actualizar el kernel.

23. Ignorar ICMP (ping) o Solicitudes de Broadcast

Agregamos la siguiente linea en el archivo ‘/etc/sysctl.conf‘ para ignorar las solicitudes de ping o broadcast

Para levantar los nuevos ajustes/cambios ejecutamos el siguiente comando

Si creen que me olvide de algún consejo de seguridad o hardering de linux siéntanse libre de colaborar y lo incluiré en el futuro en alguna publicación.