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.