Cómo instalar y configurar OSSEC (HIDS) en Rocky Linux 9

Publicada:

Si ya has terminado de instalar y configurar tu servidor con Rocky Linux, es posible que ahora te interese implementar OSSEC, un sistema de detección de intrusiones basado en host (HIDS). ¿Por qué? Te va a ayudar a detectar actividades maliciosas y anomalías en tu sistema, dándose una vuelta por tu logs y mandándote un buen correo indicándotelos el problema.

¿Es mejor o pero que Wazuh? Cuestión de gustos. Wazuh es un fork mejorado y con más opciones de OSSEC: buena interfaz gráfica, integración con ELK Stack, análisis más avanzados, interfaz web… ¿A qué coste? Pues que su configuración es algo más complicada que OSSEC, y muchas veces ofrece demasiado (no todo el mundo va a necesitar todas sus funciones). Si buscas una solución intermedia, a lo mejor puedes probar OSSEC+. ¿Quieres algo sencillo y funcional? Quédate con OSSEC. Es la manera más sencilla de hacer un buen «hardening»de tu servidor y de Apache.

Ya te he contado que puedes auditar tu sistema con Lynis, usar logwatch para controlar tus logs, instalar RKhunter para comprobar Rootkits, Maldet y ClamAV para malware y virus (para servidores de correo), instalar un Firewall como CSF o mejorar la seguridad de SSH, Apache o MariaDB o los parámetros del Kernel.

Cómo instalamos OSSEC en Rocky Linux

Tienes dos formas. Instalar directamente los archivos descargados desde GitHub o instalar el repositorio de OSSEC en tu sistema y gestionarlo mediante DNF. Te cuento las dos. Elige solo una. Yo he utilizado la primera en mi sistema Rocky Linux 9 (también vale para todos los sistemas basados en RHEL como Alma Linux).

1.-Instalamos los archivos de OSSEC desde GitHub

Instala primero todo lo que vas a necesitar, incluida la repo EPEL si todavía no la tienes. Comprueba la última versión en Github. Si te falta algún paquete para que OSSEC funcione correctamente, el proceso de instalación te va a dar error y te va a indicar cuál te falta.

#instalamos EPEL
dnf install epel-release

#Instalamos todos los paquetes que necesitamos (puede que ya tengas muchos de ellos instalados)
dnf install gcc make libevent-devel zlib-devel openssl-devel pcre2-devel wget tar inotify-tools -y

#Puede que necesites esto si quieres integrar OSSEC en systemd
dnf install systemd-devel.x86_64

#comprueba la versión en Github por si hubiera una nueva. Descarga el paquete en tu carpeta de usuario. 
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz 

#Descomprimes el paquete
tar xzf 3.7.0.tar.gz

#Accedes al directorio
cd ossec-hids-3.7.0/

#Procedes con la instalación
./install.sh

#Te cuento más cosas en como terminar la instalación de OSSEC con estas instrucciones un poco más abajo

2.-Instalamos los archivos de OSSEC desde su repo

#instalamos EPEL
dnf install epel-release

#Instalamos todos los paquetes que necesitamos (puede que ya tengas muchos de ellos instalados)
dnf install gcc make libevent-devel zlib-devel openssl-devel pcre2-devel wget tar inotify-tools -y

#Puede que necesites esto si quieres integrar OSSEC en systemd
dnf install systemd-devel.x86_64

#Descargamos y activamos el repositorio de Atomicorp (acepta todo lo que te diga)
wget -q -O - https://www.atomicorp.com/installers/atomic | sh

Configuramos la repo de Atomicorp para que solo tenga en cuenta unos cuantos paquetes:

#Editamos repo
vi /etc/yum.repos.d/atomic.repo

#Y añade esta línea debajo de "enabled = 1" en la sección superior: 
includepkgs = ossec* GeoIP* inotify-tools

#Guardamos y salimos con ESC y luego :wq!

#instalamos OSSEC
dnf install ossec-hids-server ossec-hids

Me gusta menos este método, porque estamos metiendo una repo en nuestro sistema. Esto suele ser seguro si sabemos lo que estado haciendo, pero hay que configurar bien includepkgs, para que no haya problema de compatibilidades con otros paquetes de los repositorios oficiales de Rocky Linux. Por eso he elegido el primer método para instalar OSSEC, cuyo único problema es que hay que estar atentos por si aparecen nuevas versiones en GitHub. Por eso, en el siguiente paso te cuento cómo seguir configurando OSSEC desde el primer método.

Terminamos la instalación de OSSEC continuando el método 1

Nos hemos quedado en #Procedes con la instalación con ./install.sh. Al pulsar enter en ese comando, OSSEC nos va a ir preguntando unas cuantas cosas para que nuestro sistema funcione bien. Vamos a verlo. Ene general aceptamos los valores por defecto dando al enter.

#Le damos a ENTER y seguimos en ingles
(en/br/cn/de/el/es/fr/hu/it/jp/nl/pl/ru/sr/tr) [en]:

#Ponemos local para que solo funcione en nuestros servidor. 
1- What kind of installation do you want (server, agent, local, hybrid or help)? local

#Le damos a ENTER y seguimos
2- Setting up the installation environment.
  - Choose where to install the OSSEC HIDS [/var/ossec]:

#Le decimos que yes y ponemos nuestra dirección de email (luego se puede cambiar)
3- Configuring the OSSEC HIDS.
  3.1- Do you want e-mail notification? (y/n) [y]:
  - What's your e-mail address?

Y aquí empieza la única parte complicada de OSSEC. Si tienes un servidor SMTP configurado, lo encontrará y gestionará el envío de email (We found your SMTP server as:). En mi caso, lo tengo configurado con Postfix en el servidor, en localhost. Por eso en el siguiente punto pongo que quiero ponerlo en localhost. Tú, si quieres, puedes dejar ese servicio SMTP que tengas configurado en tu DNS.

  #Lo pongo localhost porque tengo configurado Postfix en mi servidor
- What's your SMTP server ip/host?

Todo esto se traduce en que luego vas a ver algo así en el archivo de configuración de OSSEC en /var/ossec/etc/ossec.conf:

<email_notification>yes</email_notification>
<email_to>[email protected]</email_to>
<smtp_server>localhost</smtp_server>
<email_from>[email protected]</email_from>

¿<email_from>[email protected]</email_from>? Todo se enviará desde el email que tengas configurado en Postfix para root. Puedes configurar un alias. Lo importante es que pongas un email de tu sistema que esté bien configurado en Postfix. Busca línea con myorigin en la configuración /etc/postfix/main.cf:

myorigin = tudominio.com

Lo que te indica que deberías poner una dirección tipo [email protected]. También debes tener cuidado, para que funcione el envío en localhost, que la configuración de Postfix tengas estas líneas (cambia nombre.de.tu.hostname y nombrehost, tudominio.com):

myhostname = nombre.de.tu.hostname
mydestination = $myhostname, localhost.$mydomain, $mydomain, localhost, nombrehost, tudominio.com
mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks, reject
inet_interfaces = localhost

¡Ojo! Tengo configurado Postfix como servidor de correo local para procesos locales del mismo servidor. A lo mejor a ti no te funciona esta configuración.

Luego te va a seguir preguntando que partes de OSSEC quieres activar: syscheck, rootcheck y Active response. La única que NO activo es Active response (te permite ejecutar un comando basado en los eventos recibidos. Por ejemplo, puedes bloquear una dirección IP o desactivar el acceso para un usuario específico). Esto lo tengo configurado en el Firewall CSF, LFD.

Vale, ahora ya está todo configurado, pero antes de activarlo tenemos que ir a su archivo de configuración y cambiar unas cuantas cosas.

  • Si por alguna razón no puede proceder con el fin de la instalación porque te faltara configurar algo en el servidor, te lo va a indicar después de este paso.

¿Cómo se actualiza OSSEC si lo has instalado tú mismo desde GitHub? Solo tienes que volver a seguir los pasos de la instalación e instalar la nueva versión. OSSEC va a reconocer que tienes un sistema activo y procederé en consecuencia para no borrar tu configuración.

Configuramos OSSEC en Rocky Linux 9

Todos los archivos de configuración de OSSEC están en /var/ossec/, incluidos los logs que guarda.

  • El archivo de configuración principal de OSSEC está en /var/ossec/etc
  • Las reglas predefinidas están en el directorio /var/ossec/rules
  • Los comandos utilizados para gestionar OSSEC están en /var/ossec/bin
  • En /var/ossec/logs tienes el archivo /var/ossec/logs/ossec.log, donde se guardan los errores de OSSEC.
  • En /var/ossec/queue/diff/local/ vas a encontrar donde chequea OSSEC para buscar diferencias con tus archivos. Es posible que con el paso del tiempo este directorio pese mucho en tu servidor. Puedes borrarlo cada cierto sin que pase nada (rm -rf /var/ossec/queue/diff/local/) ¡Ojo con el comando rm -rf y donde lo ejecutas! ¡Qué puede borrar todo el servidor si te equivocas de ruta!

¿Cómo puedes comprobar de forma sencilla si tu disco duro del servidor se está llenando? Puedes instalar ncdu en tu sistema y comprobar como se van llenando los directorios de manera muy visual. Puedes usar estos comandos:

du -mxS / | sort -n | tail
du -x / | sort -rn | more
for i in G M K; do du -ah | grep [0-9]$i | sort -nr -k 1; done | head -n 11

Nos vamos al archivo de configuración: /var/ossec/etc/ossec.conf

#Hacemos copia de seguridad del arhcivo
cp /var/ossec/etc/ossec.conf /var/ossec/etc/ossec.conf.back

#Editamos el archivo
 vi /var/ossec/etc/ossec.conf

#Para entrada en el modo de inserción en vi tiene que darle a la i

Vamos a ver los siguientes puntos importantes:

Configuración de email:

<global>
    <email_notification>yes</email_notification>
    <email_to>[email protected]</email_to>
    <smtp_server>localhost</smtp_server>
    <email_from>[email protected]</email_from>
</global>

Configuramos OSSEC para recibir avisos en tiempo real de nuevos archivos y cambios en directorios como /home:

  • Tenemos que añadir la línea: <alert_new_files>yes</alert_new_files>
  • Puedes cambiar <frequency>79200</frequency> a <frequency>100</frequency> para hacer pruebas (temporal)
  • Añades la línea: <directories report_changes=»yes» realtime=»yes» restrict=».htaccess|.php|.js|.py|.sh|.html» check_all=»yes»>/home/nombre_usuario</directories> para controlar en tiempo real el direct /home/nombre_usuario (cambias nombre_usuario por el que se ajuste en tu servidor).
  • En <directories check_all=»yes»>/etc,/usr/bin,/usr/sbin</directories> y <directories check_all=»yes»>/bin,/sbin,/boot</directories> añades report_changes=»yes» realtime=»yes».
  • Es posible que tengas que añadir cosas como <ignore>/home/nombre_usuario/public_html/wp-content/cache/</ignore> si tienes archivos de cache en WordPress que cambian mucho. Adáptalo a tu sistema, plugin, etc.
 <syscheck>
    <!-- Frequency that syscheck is executed - default to every 22 hours -->
    <frequency>79200</frequency>
    
    <alert_new_files>yes</alert_new_files>   

    <!-- Directories to check  (perform all possible verifications) -->
 <directories report_changes="yes" realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
    <directories report_changes="yes" realtime="yes" check_all="yes">/bin,/sbin,/boot</directories>
<directories report_changes="yes" realtime="yes" restrict=".htaccess|.php|.js|.py|.sh|.html" check_all="yes">/home/nombre_usuario</directories>
    <!-- Files/directories to ignore -->
    <ignore>/etc/mtab</ignore>
    <ignore>/etc/mnttab</ignore>
    <ignore>/etc/hosts.deny</ignore>
    <ignore>/etc/mail/statistics</ignore>
    <ignore>/etc/random-seed</ignore>
    <ignore>/etc/adjtime</ignore>
    <ignore>/etc/httpd/logs</ignore>
    <ignore>/etc/utmpx</ignore>
    <ignore>/etc/wtmpx</ignore>
    <ignore>/etc/cups/certs</ignore>
    <ignore>/etc/dumpdates</ignore>
    <ignore>/etc/svc/volatile</ignore>
    <ignore>/etc/webmin/</ignore>
    <ignore>/etc/.git/</ignore>
<ignore>/home/nombre_usuario/public_html/wp-content/cache/</ignore>
  </syscheck>

Guardas los cambios con ESC y :wq!

Ahora tenemos que modificar la regla con id 554, para que nos lleguen avisos por correo al haber cambiado lo anterior.

Esta regla dice lo siguiente:

<rule id="554" level="0">
<category>ossec</category>
<decoded_as>syscheck_new_entry</decoded_as>
<description>File added to the system.</description>
<group>syscheck,</group>
</rule>

Y queremos cambiar el nivel de aviso y que se sobrescriba la regla original (level=»7″ overwrite=»yes»)

#Abrimos nuestro archivo local rules odd epodes añadir nuevas reglas de OSSEC
vi /var/ossec/rules/local_rules.xml

#Para entrada en el modo de inserción en vi tiene que darle a la i

#Ponemos lo siguiente:
<rule id="554" level="7" overwrite="yes">
<category>ossec</category>
<decoded_as>syscheck_new_entry</decoded_as>
<description>File added to the system.</description>
<group>syscheck,</group>
</rule>

Guardamos la regla con ESC y luego :wq!

Ahora ya podemos comprobar su estado y si está parado, podemos iniciar OSSEC para que controle nuestro sistema:

/var/ossec/bin/ossec-control status
/var/ossec/bin/ossec-control start
Status de OSSEC en rocky Linux 9

Te tiene que salir algo así:

ossec-monitord is running...
ossec-logcollector is running...
ossec-syscheckd is running...
ossec-analysisd is running...
ossec-maild is running...
ossec-execd not running...

Te tiene que haber llegado un email diciéndote que se ha iniciado OSSEC.

Configuramos el inicio de OSSEC en systemd para que se ponga en marcha cuando se encienda el servidor

OSSEC no se actualiza desde 2022, y nadie se ha preocupado de que OSSEC se ponga en marcha cuando hacemos un reboot del sistema. Algo que no podemos permitir. Por eso, puedes crear un archivo en systemd de Rocky Linux para que se inicie de forma automática cada vez que reines el servidor.

Configuramos el inicio de OSSEC en systemd para que se ponga en marcha cuando se encienda el servidor
#Creamos el archivo
vi /etc/systemd/system/ossec.service

#Para entrada en el modo de inserción en vi tiene que darle a la i y ponemos lo siguiente
 
 [Unit]
Description=OSSEC HIDS
After=network.target

[Service]
Type=forking
ExecStart=/bin/bash -c '/var/ossec/bin/ossec-control start'
ExecStop=/bin/bash -c '/var/ossec/bin/ossec-control stop'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
 
#Guardamos con ESC y luego :wq!
 
 #Luego ponemos en el terminal para iniciar el servicio al inicio del servidor, para que empiece ya mismo y comprobamos que funciona.
 sudo systemctl daemon-reload
 sudo systemctl enable ossec.service
 sudo systemctl start ossec.service
 sudo systemctl status ossec.service
 
 #Para comprobar problemas en log
 sudo journalctl -u ossec.service

Intente configurarlo con Type=simple, pero no arrancaba, así que lo he puesto con forking.

¿Qué pasa si por alguna razón el proceso de OSSEC falla?

Pues en mi caso, que uso Virtualmin como panel de control, he podido configurar un aviso de fallo de proceso de OSSEC en Webmin > System And Server Status.

Pues en mi caso, que uso Virtualmin como panel de control, he podido configurar un aviso de fallo de proceso en Webmin > System And Server Status. Puedes crear uno nuevo y poner lo siguiente:

  • Command to check for: ossec
  • Fail if process is: not running
  • Number of process that must exist for monitor to consider them running: 1
  • Failures before reporting: 1
  • Also send email for this service to: tu email
  • If monitor goes down, run command: /var/ossec/bin/ossec-control restart

Va a reconocer todos los PIDs de OSSEC y lo va a vigilar para reiniciar OSSEC en caso de fallo. Entiendo que puedes crear un script para controlar los procesos de OSSEC y reiniciarlo en caso de fallo (si no usas Webmin/Virtualmin).

Comandos útiles

vi /var/ossec/etc/ossec.conf #donde configuras OSSEC
vi /var/ossec/rules/local_rules.xml #donde metes tus reglas modificadas
/var/ossec/bin/ossec-control restart #Reinicias OSSEC
/var/ossec/bin/ossec-control status #compruebas su estado
/var/ossec/bin/syscheck_control -u all #reinicia syscheck en todos los agentes y actualiza la bbdd

Conclusión

OSSEC es otro ladrillo más para mejorar la seguridad de tu servidor. Es relativamente sencillo de poner en marcha y vas a estar siempre al tanto de los cambios en tu servidor con unos bonitos emails que te avisan de las cosas que no cuadran.

Puedes ver otras cosas que he hecho ene el servidor en la entrada: Cómo montar un servidor Linux en Linode Akamai.

Referencias:


Descubre más desde algoentremanos.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Foto del autor

Ivan Benito

Apasionado de la lectura y los viajes, experto en tecnología e informática y fan de la privacidad online. Desde el año 2007 me he dedicado al SEO, a escribir y a crear páginas web con WordPress sobre todo tipo de temáticas. Si tienes alguna duda y necesitas ayuda... ¡Pregúntame!

Si tienes preguntas, quieres que hagamos una review de una app, programa o producto, simplemente mándanos un e-mail mediante nuestro formulario de contacto. Te contestaremos en el menor tiempo posible. ¡Muchas gracias y salU2! Algoentremanos realiza reviews de manera profesional y en muchas ocasiones recibimos compensación de las compañías cuyos productos revisamos. Probamos cada producto a fondo y otorgamos altas calificaciones solo a los mejores. La propiedad de Algoentremanos.com es independiente y las opiniones expresadas aquí son solo nuestras. Algunos enlaces del artículo son afiliados: pueden generar un beneficio a algoentremanos.com. Saber más.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.