Hardening de Servidores Linux: las prácticas esenciales para una gestión eficaz

Hardening de Servidores Linux: las prácticas esenciales para una gestión eficaz

Lorena Fernández

Si estás empezando en el mundo de la administración Linux, os recomendamos leer esta completa guía que hemos realizado en RedesZone. La seguridad de los servidores es uno de los pilares fundamentales para garantizar un funcionamiento correcto y que, además, destaque por su disponibilidad y muy buen rendimiento. Los consejos que compartiremos a continuación, forman parte de lo que se denomina Hardening de Servidores Linux.

Mejores prácticas para el hardening de servidores Linux

Un resumen de las prácticas que se pueden considerar como esenciales para una gestión mucho más segura de los servidores. Todas ellas, se pueden llevar a la práctica con rapidez y no necesitan demasiados pasos extra de configuración o instalación.

Evita utilizar servicios como FTP o Telnet

Los servidores Linux admiten servicios y protocolos como FTP, Telnet o RSH entre otros muchos que no son seguros, y existen riesgos de que un sniffer de paquetes sea capaz de capturar todo el tráfico de datos, incluyendo la información de autenticación porque se realiza sin ningún tipo de cifrado. Por supuesto, cualquier archivo o comando que nosotros transfiramos o ejecutemos, se podrá ver sin ningún problema. Sin embargo, un sniffer de paquetes no funciona por sí solo, sino más bien, se vale de cualquier usuario que se encuentre dentro de una determinada red. Una solución típica que se suele utilizar son protocolos seguros como SSH para ejecutar comandos de manera remota, o usar SFTP (SSH FTP) para transferir archivos de forma segura, e incluso FTPES (FTP con TLS) para hacer esto mismo. Si vas a utilizar un servidor SSH, os recomendamos leer nuestro tutorial para configurar el servidor OpenSSH con la máxima seguridad.

Debemos vigilar que en nuestro servidor u ordenador con Linux no tengamos ninguno de estos servidores instalados, siempre y cuando no los estemos utilizando para una determinada tarea. Por ejemplo, en sistemas operativos Linux basados en Debian o Ubuntu, puedes usar el siguiente comando para desinstalar todos estos servicios:

sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server

Como vemos un poco más arriba, con un solo comando podemos borrar prácticamente todos los servidores con protocolos y servicios que pueden representar un gran número de amenazas de seguridad.

Instalar la menor cantidad de software posible

Cuanto menos software y/o servicios tengamos instalados en nuestro servidor, las posibilidades de que haya una vulnerabilidad en el software que haga que un cibercriminal tome el control de nuestro equipo disminuye drásticamente. En sistemas operativos Linux como Debian o Ubuntu, puedes sacar un listado completo de los paquetes instalados, para posteriormente desinstalar los que no sean necesarios.

Puedes utilizar al paquete de apt-get/dkpg para borrar cualquier servicio o aplicación que no sea estrictamente necesario para tu servidor Linux:

dpkg --list
dpkg --info packageName
apt-get remove packageName

Mantener actualizado al kernel y el software de Linux

Una de las razones de más peso para mantener actualizado todo el software de nuestro equipo, así como los paquetes fundamentales del sistema operativo, es la seguridad. Manteniendo nuestro servidor con las actualizaciones más recientes, garantizamos la disponibilidad de los parches de seguridad para protegernos de las principales amenazas. De nuevo, podemos valernos del gestor de paquetes apt-get o dpkg:

apt-get update && apt-get upgrade

Configurar Password Aging para los usuarios Linux

Hay un comando que te permite cambiar el número de días entre cambios de contraseñas y la fecha del último cambio de contraseña. Este comando es el chage. Básicamente, lo que se logra con este comando ese determinar cuándo un usuario debería cambiar su contraseña. Es decir, cuánto tiempo tiene de vigencia determinada contraseña establecida por el usuario en cuestión:

Este comando nos permite deshabilitar el Password Aging:

chage -M 99999 userName

Si necesitas obtener información respecto a la expiración de contraseña de un usuario determinado, escribe lo siguiente:

chage -l userName

El siguiente comando, te permite cambiar varios atributos relacionados a la gestión del cambio de las contraseñas:

chage -M 60 -m 7 -W 7 userName

Hagamos un pequeño desglose de este comando y sus parámetros de ejemplo:

  • -M: se refiere a la máxima cantidad de días en que esa contraseña es válida.
  • -m: se refiere a la mínima cantidad de días que requieren que pasen entre eventos de cambios de contraseña.
  • -W: la cantidad de días en que se notifica al usuario con anticipación respecto a la necesidad de cambiar la contraseña
  • nombreUsuario: el nombre del usuario Linux que estamos gestionando

Bloqueo de usuarios después de varios intentos de acceso fallidos

El comando faillog te permite desplegar el historial completo de los inicios de sesión fallidos. Además, con unos cuantos parámetros podrás limitar la cantidad de inicios fallidos que podrá tener el usuario. He aquí unos casos de uso:

Para desplegar el historial de los inicios de sesión fallidos:

faillog

Para desbloquear un usuario bloqueado por intentos fallidos:

faillog -r -u nombreUsuario

Bloquear un usuario determinado:

passwd -l nombreUsuario

Desbloquear un usuario determinado:

passwd -u nombreUsuario

Deshabilitar servicios innecesarios en segundo plano

Además de aumentar la seguridad, se garantiza la disponibilidad de recursos para los servicios que realmente lo necesitan. A continuación, te mostramos el comando que despliega todos los servicios que empiezan a correr desde el inicio de sesión en el nivel 3 de ejecución:

chkconfig --list | grep '3:on'

Si necesitas deshabilitar algún servicio determinado, escribe el siguiente comando:
service serviceName stop
chkconfig serviceName off

  • La primera línea (stop) sirve para detener los servicios
  • La segunda línea (off) sirve para deshabilitar los servicios
  • serviceName hace referencia al servicio en cuestión

Identifica todos los puertos abiertos

Utiliza el siguiente comando para que se despliegue el listado de todos los puertos que están abiertos, además de los programas asociados:

netstat -tulpn

O bien:

ss -tulpn

Separar las particiones de disco

Si apartamos los archivos relacionados al sistema operativos de aquellos archivos que son de los usuarios, añadimos mayor nivel de seguridad en general ya que podremos realizar copias de seguridad de la partición entera de manera mucho más fácil. Si por ejemplo, queremos únicamente guardar todas las configuraciones del usuario, bastaría con hacer un backup de /home. Para que tengas en cuenta, éstos son los archivos de sistema que deberían estar en particiones de disco separadas:

  • /usr
  • /home
  • /var and /var/tmp
  • /tmp

Utilizar un servicio de autenticación centralizado

Las ventajas de implementar autenticación centralizada implican un control más sencillo de todas las cuentas Linux/UNIX asociadas al servidor, además de los propios datos de autenticación. También te permiten mantener los datos de autenticación (auth data) sincronizados entre servidores.

Una sugerencia es la implementación de OpenLDAP, la cual tiene toda la documentación necesaria respecto a la instalación e implementación. Es totalmente abierto y por supuesto, está disponible para su descarga gratuita.

De no contar con autenticación centralizada, se pierde tiempo controlando los distintos métodos de autenticación, lo que puede implicar la aparición de credenciales desactualizadas y cuentas de usuario que deberían haberse borrado hace tiempo.

Utilización de un firewall IDS/IPS (Sistemas de Detección/Prevención de Intrusiones)

Tener en nuestro equipo un firewall es algo fundamental para controlar en detalle el tráfico entrante y saliente, Linux por defecto incorpora iptables, aunque en las últimas versiones de Linux tenemos disponible nftables que es la evolución del popular iptables. Gracias a este firewall, podremos controlar en detalle todo el tráfico que va hacia el servidor y que sale desde el servidor.

Un sistema de detección de intrusiones nos ayuda a detectar actividad maliciosa o sospechosa como los ataques DDoS, los escaneos de puertos o intentos de crackeo a los ordenadores para monitorear el tráfico de red que generan. Un pase a producción de sistemas que sea exitoso y seguro necesita de una revisión de integridad de software y esto es posible mediante los sistemas IDS.

En RedesZone recomendamos a Snorter, el cual es una herramienta de apoyo para facilitar la instalación y gestión de Snort. Éste es un sistema de detección de intrusiones, que tiene como adición un sistema de prevención de intrusiones (IPS). Esto último agrega una capa mayor de protección a los servidores ante las constantes amenazas.

Fail2ban o denyhost también las puedes considerar como opciones válidas y prácticas para implementar un sistema de tipo IDS. Ahora bien, para instalar Fail2ban escribe los siguientes comandos:

sudo apt-get install fail2ban

Edita los archivos de configuración de acuerdo a lo que necesitas:

sudo vi /etc/fail2ban/jail.conf

Una vez que hayas terminado, reinicias el servicio:

sudo systemctl restart fail2ban.service

Deshabilitar dispositivos USB/firewire/thunderbolt

Este es el comando que te permitirá deshabilitar dispositivos USB en tu servidor Linux:

echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf

El mismo método se puede aplicar para la inhabilitación de los dispositivos thunderbolt:

echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf

Así también, los dispositivos firewire:

echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf

Utiliza VPN para conectarte al servidor o al entorno de administración

Hoy en día utilizar servidores VPN es fundamental, si tenemos varios servidores dedicados o VPS en una misma red de administración, podremos hacer uso de un servidor VPN para acceder a toda la plataforma de manera segura. Dos softwares muy interesantes son tanto OpenVPN como WireGuard, os recomendamos visitar nuestros completos tutoriales para configurar los servidores VPN con la máxima seguridad.

Con esta medida de seguridad, se prevendrá la posibilidad de que cualquier usuario quiera copiar archivos de parte del servidor Linux a un dispositivo USB, firewire o thunderbolt. ¿Te gustarían más tutoriales cómo este? Cuéntanos tus sugerencias en los comentarios.