Si has terminado de instalar tu servidor Rocky Linux, a lo mejor es el momento de pasar a hacer un poco de ‘hardening’. Básicamente, es el proceso por el cual intentamos que el servidor tenga los menos fallos de seguridad posibles y seguir unas cuantas recomendaciones para evitar que alguien mal intencionado visite tu servidor.
¿No es seguro Rocky Linux recién instalado? Sí, está basado en RHEL, y es una de las distribuciones que más tienen en cuenta la seguridad de sus usuarios, peor nunca está de más en cerrar algunas puertas que no necesitan estar abiertas. Y como no podemos revistar todo por nuestra cuenta, ahí es donde entra este magnífico programa, Lynis, uno de los mejor valorados en linuxsecurity.expert.
¿Qué es Lynis? Lynis es una herramienta de auditoría de seguridad Open Source totalmente gratuita y que está disponible en las repo de Rocky Linux 9. ¿Objetivo? Evaluar sistemas que ejecutan Linux y proporcionar sugerencias para instalar, configurar o corregir cualquier medida de seguridad. Y lo bueno que tiene es que tiene menos falsos positivos que otras herramientas como OpenSCAP, por ejemplo. ¿Cómo funciona? Debes ejecutar la app en tu sistema y en unos minutos tienes listo el informe y sus sugerencias. Si usas su plan de pago, te va a ayudar un poco más a solucionar los problemas, pero no es necesario que te des de alta. Puedes hacerlo tú mismo.
¿Y no es mejor OpenSCAP que hasta te ofrece remediar los problemas mediantes scripts automáticos? No. Porque esos scripts, si no analizas bien lo que van a hacer a tu sistema, se lo pueden cargar. De verdad. También vas a tener que ir problema a problema y analizar bien la solución para ver si se ajusta a tu sistema. No puedes ir a lo loco y aplicar los remedios propuestos. Y lo peor, es que da muchos falsos positivos, algo que no suele pasar con Lynis.
Vamos a instalar Lynis
Muy sencillo. Directamente, desde los repositorios de Rocky Linux 9, que es el sistema donde lo he probado yo.
sudo dnf install lynis
Y ya lo tienes en tu sistema. Ahora solo tienes que correr tu primer informe y ver que tal se porta tu sistema. En mi caso, creo recordar que empecé con unos 72 puntos y lo he subido a unos 87 puntos. A mi entender, cualquier valor entre 80 y 90 es un buen resultado en Lynis. Tampoco hay que volverse loco ejecutando todas las recomendaciones, que nos podemos cargar el sistema.
Ejecutamos nuestra primera auditoría de seguridad
El comando vuelve a ser muy sencillo. Vamos a chequear todo el sistema:
sudo lynis audit system
Pero aquí tienes todo el listado de opciones:
Usage: lynis command [options]
Command:
audit
audit system : Perform local security scan
audit system remote <host> : Remote security scan
audit dockerfile <file> : Analyze Dockerfile
show
show : Show all commands
show version : Show Lynis version
show help : Show help
update
update info : Show update details
Options:
Alternative system audit modes
--forensics : Perform forensics on a running or mounted system
--pentest : Non-privileged, show points of interest for pentesting
Layout options
--no-colors : Don't use colors in output
--quiet (-q) : No output
--reverse-colors : Optimize color display for light backgrounds
--reverse-colours : Optimize colour display for light backgrounds
Misc options
--debug : Debug logging to screen
--no-log : Don't create a log file
--profile <profile> : Scan the system with the given profile file
--view-manpage (--man) : View man page
--verbose : Show more details on screen
--version (-V) : Display version number and quit
--wait : Wait between a set of tests
--slow-warning <seconds> : Threshold for slow test warning in seconds (default 10)
Enterprise options
--plugindir <path> : Define path of available plugins
--upload : Upload data to central node
More options available. Run '/bin/lynis show options', or use the man page.
En apenas unos minutos, tienes el listado de comprobaciones que ha realizado. todo se ve de manera muy visual. Está separado por secciones. El resultado puede ser OK, FOUND, NOT FOUND, DIFFERENT, ENABLED, DISABLED, NONE, YES, NO, WEAK, NOT ENABLED, FILES FOUND, ACTIVE, RUNNING, AUTO… hay muchos resultados al lado de cada prueba, pero lo importante es si ves ese resultado en verde, amarillo, rojo. Sí está en verde, todo correcto. Si está en amarillo, probablemente te va a dar alguna recomendación para solucionarlo. Si está en rojo, deberías revisarlo.
Y si te vas al final del informe que ha salido en pantalla, te vas a encontrar lo importante, si tienes algún Warning que debas corregir:
Si ves Great, no warnings, las cosas han empezado bien. Pero, aun así, te va a dar unas cuantas recomendaciones después que puedes ir revisando. Ahora te digo cómo.
Si bajas un poco más al final del informe, verás tu puntuación y otros datos importante, como donde puedes encontrar el archivo del informe, normalmente en /var/log/lynis-report.dat.
¿Qué puedes hacer ahora? Puedes visualizar ese informe con:
cat /var/log/lynis-report.dat
Donde vas a poder más en detalle las cosas que ha revisado y sus posibles soluciones. Pero esto no ayuda mucho. Mejor hacer otra cosa. Podemos emplear el siguiente comando para ir comprobando una a una todas las recomendaciones y ver que nos aconseja el programa. Ya te adelanto que vas a tener que hacer uso de algún buscador para buscar las soluciones. O puedes intentar usar ChatGPT para entender un poco el problema.
Solucionamos algunos problemas del servidor con los consejos de Lynis
Una de las sus recomendaciones me dice: Check what deleted files are still in use and why. [LOGG-2190] https://cisofy.com/lynis/controls/LOGG-2190/. En la página web puedes leer con más detalle el problema. Pero puede usar este comando en la terminal también:
sudo lynis show details LOGG-2190
Y te puede dar algo como esto:
2024-08-05 14:15:19 Performing test ID LOGG-2190 (Checking for deleted files in use)
2024-08-05 14:15:19 Test: checking deleted files that are still in use
2024-08-05 14:15:20 Result: found one or more files which are deleted, but still in us
2024-08-05 14:15:20 Found deleted file: /var/tmp/#unnumeromuylargo (mariadbd)
2024-08-05 14:15:20 Suggestion: Check what deleted files are still in use and why. [test:LOGG-2190] [details:-] [solution:-]
2024-08-05 14:15:20 ====
Te dice que ha encontrado en tu sistema y una posible solución, borrar esos archivos. Como puedes ver son archivos temporales que al final el sistema va a terminar borrando. No hay que hacer nada.
Este es el proceso que deberías seguir analizando paso a paso cada punto. Lo que sí tienes que tener en cuenta es que Lynis va otorgando a algunos apartados más puntos que otros. Yo me centraría en:
- Asegurar SSH: aseguras los parámetros de su archivo de configuración y activas las claves SSH. Creas los banners de SSH (ojo, que tienen que cumplir con unos requisitos mínimos para que Lynis los reconozca como válidos).
- Asegurar el Kernel y sus parámetros. Ten cuidado con esta recomendación: kernel.modules_disabled (exp: 1), ya que puedes evitar cargar módulos imprescindibles al reiniciar el sistema y evitar que se ponga en marcha el servidor. Revisalo bien.
- Chequear que todas las carpetas y archivos tienen los permisos correctos
- Tener instalado RKhunter, AIDE y OSSEC (o Wazuh).
- Tener instalado un Firewall, por ejemplo CSF, LFD.
- Activar Auditd para auditar el sistema
- Desactivas protocolos de red que no se usen, o USB y firewire.
- Tener actualizado el sistema y todos sus paquetes con DNF y sus actualizaciones automáticas.
- comprobar los logs, logrotate e instalar logwatch.
Y me preocuparía menos de las secciones:
- Boot and services > Running ‘systemd-analyze security’: los programas que dice que son inseguros, no lo son. Están actualizados a su última versión, pero sí es cierto que se puede mejorar los permisos del servicio, políticas de control de acceso o directivas de seguridad… A costa de que muchos de ellos dejen de funcionar bien en tu sistema. Es complicado saber qué cambios debes hacer, sobre todo en un servidor en producción. Lo importante es que esos paquetes, estén actualizados a su última versión.
- File systems > Checking mount points. Esto solo lo deberías de tener en cuenta si tienes que pasar algún control de seguridad oficial. Ahora mismo, la mayoría de la gente monta su sistema Linux en un servidor con una partición donde se mete todo y otra partición SWAP. No se separa /home de /tmp o /var. Menuda tarea imaginarse cuanto debe ocupar cada partición.
- También tendría cuidado si quieres cambiar los valores de umask en varias partes del sistema. Programas como WordPress pueden dejar de funcionar si lo haces más restrictivo, pasando de 022 a 027.
- Software: firewalls > Checking for unused rules: claro que puede haber reglas sin usar. A lo mejor todavía nadie ha intentado entrar al servidor de esa manera.
- Logging and files > Checking remote logging: es posible que no necesites mandar tus logs a otro servidor, aunque que te recomiendo que tengas copias de seguridad semanales de todos ellos.
- Software: System tooling > Automation tooling: es posible que no necesites usar herramientas como Ansible.
- Puedes revisar Harden compilers like restricting access to root user only [HRDN-7222] y analiza tu situación. Pueden dejar de funcionar una cuantas cosas. Suelen ser gcc o as.
¿Algunos problemas que he resuelto?
STRG-1840 – USB storage drivers y STRG-1846 – Firewire storage drivers: En un servidor no vamos a necesitarlos:
#Creamos archivo
sudo vi /etc/modprobe.d/quitamos-alm.conf
#Ponemos lo siguiente en ese archivo
# Deshabilitar almacenamiento USB
install usb-storage /bin/true
# Deshabilitar almacenamiento FireWire
install firewire-core /bin/true
#Guardamos con ESC y luego :wq y ENTER
Hay que reiniciar el sistema.
Quitamos protocolos de comunicación no necesarios como rds, sctp, dccp o tipc:
#Creamos archivo
sudo vi /etc/modprobe.d/quitamos-comu.conf
#Ponemos lo siguiente en ese archivo
install rds /bin/true
install sctp /bin/true
install dccp /bin/true
install tipc /bin/true
#Guardamos con ESC y luego :wq y ENTER
Hay que reiniciar el sistema.
Si has terminado de instalar y probar todo tu sistema, a lo mejor puedes deshabilitar las Core Dumps, que ofrecen mucha información:
#Editamos el archivo:
sudo /etc/security/limits.conf
#Ponemos:
* hard core 0
* soft core 0
#Guardamos con ESC y luego :wq y ENTER
Enable process accounting [ACCT-9622]: nunca está de más saber que hacen tus usuarios en el sistema:
sudo dnf install psacct
sudo systemctl enable psacct.service
sudo systemctl start psacct.service
Conclusión
Para terminar, ten en cuenta este comando:
sudo lynis audit system --tests HRDN-7222
Con el que vas a probar de forma individual, solo uno de los test. Por si quieres comprobar si lo has corregido bien o mal sin tener que revisar todo el sistema.
Ten en cuenta, que la seguridad de un servidor es un proceso siempre vivo. Que corrijas todos los problemas que te indica Lynis, no significa que no tengas que hacer nada más. La seguridad en un servidor se suele hacer por capas. Cuantas más tengas activas mejor.
Te puede interesar: Cómo poner en marcha un servidor Linux VPS en Linode (Akamai)
Referencias:
- https://elatov.github.io/2017/06/install-lynis-and-fix-some-suggestions/#harden-compilers-like-restricting-access-to-root-user-only-hrdn-7222
- https://opensource.com/article/20/8/linux-lynis-security
- https://fearby.com/article/i-thought-my-website-was-hacked-here-is-how-i-hardened-my-linux-servers-security-with-lynis-enterprise/