Rkhunter es uno de esos pequeños programas que todos deberíamos instalar en nuestro servidor. No cuesta anda y aporta muchas mejoras a la seguridad de tu servidor. Es un programa específicamente pensado para mejorar la seguridad y buscar Backdoors y Rootkits en tu sistema de manera automática. Te voy a contar cómo instalarlo en Rocky Linux 9, ya que la mayoría de los tutoriales online que he encontrado solo hablan de Ubuntu o CentOS, tiene algunas diferencias en su uso que hay que tener en cuenta.
- Rkhunter junto con Rclone, Logwatch o Lynis son de los programas que siempre instalo en mis servidores. Si instalas también Maldet y ClamAV, tu sistema será más seguro.
Instalamos Rkhunter en Rocky Linux
Pues es muy sencillo, porque está en el repositorio de EPEL. Instalamos primero este repositorio en Rocky:
dnf install epel-release
Luego ya podemos pasar a la instalación de este programa:
dnf install rkhunter
- ¡Ojo! Para que te lleguen los correos de avisos del programa, debes tener configurado algo como Postfix en tu servidor.
Cómo configuramos Rkhunter
No es demasiado complicado tampoco. Tenemos que ir a su archivo de configuración en /etc/rkhunter.conf:
#Editamos el archivo de configuración
vi /etc/rkhunter.conf
¿Cosas importantes a configurar en ese archivo? Pues por defecto y sin cambiar nada funciona bastante bien, peor no está de más asegurarnos de unas cuantas cosas (y hay que añadir tu email para que te lleguen los informes).
Por defecto, el instalador ya se ha encargado de configurar las opciones más importantes. Te pongo unas cuantas:
- MAIL-ON-WARNING: para que te lleguen correos en caso de que encuentre algún problema. Si no hay avisos, no hay correo.
- LOGFILE=/var/log/rkhunter/rkhunter.log: donde está el log del programa para que puedas consultar si todo funciona bien.
- ALLOW_SSH_ROOT_USER: la configuración en este apartado debe coincidir con tu configuración en SSH. En caso contrario te saldrá un warning. Yo lo tengo en no porque he configurado en la configuración de SSH que el usuario root no pueda acceder a mi sistema, la opción más segura. Te puede interesar: Cómo quitamos el acceso root en Rocky Linux 9.
- ALLOW_SSH_PROT_V1: la configuración en este apartado debe coincidir con tu configuración en SSH. En caso contrario te saldrá un warning. Yo lo tengo en 0 porque no permito el uso de SSH-1.
- ENABLE_TESTS=ALL y DISABLE_TESTS=suspscan hidden_ports deleted_files packet_cap_apps apps ipc_shared_mem: configurados por defecto para evitar falsos positivos del programa en Rocky Linux.
- PKGMGR=RPM: Porque estamos en Rocky Linux y es su gestor de paquetes.
- EXISTWHITELIST, SCRIPTWHITELIST, RTKT_FILE_WHITELIST, ALLOWDEVFILE, ALLOWHIDDENFILE y ALLOWHIDDENDIR vienen configuradas por defecto con las rutas adecuadas para evitar falsos positivos en Rocky.
# If this option is set to '1', it specifies that the mirrors file
# ('mirrors.dat'), which is used when the '--update' and '--versioncheck'
# options are used, is to be rotated. Rotating the entries in the file allows
# a basic form of load-balancing between the mirror sites whenever the above
# options are used.
ROTATE_MIRRORS=1
# If this option is set to '1', it specifies that when the '--update' option is
# used, then the mirrors file is to be checked for updates as well. If the
# current mirrors file contains any local mirrors, these will be prepended to
# the updated file. If this option is set to '0', the mirrors file can only be
# updated manually. This may be useful if only using local mirrors.
#
# The default value is '1'.
#
UPDATE_MIRRORS=1
# The MIRRORS_MODE option tells rkhunter which mirrors are to be used when
# the '--update' or '--versioncheck' command-line options are given.
# Possible values are:
# 0 - use any mirror
# 1 - only use local mirrors
# 2 - only use remote mirrors
#
# Local and remote mirrors can be defined in the mirrors file by using the
# 'local=' and 'remote=' keywords respectively.
#
# The default value is '0'.
#
MIRRORS_MODE=0
# Email a message to this address if a warning is found when the system is
# being checked. Multiple addresses may be specified simply be separating
# them with a space. To disable the option, simply set it to the null string
# or comment it out.
#
# The option may be specified more than once.
#
# The default value is the null string.
#
# Also see the MAIL_CMD option.
#
[email protected]
# This option specifies the mail command to use if MAIL-ON-WARNING is set.
#
# NOTE: Double quotes are not required around the command, but are required
# around the subject line if it contains spaces.
#
# The default is to use the 'mail' command, with a subject line
# of '[rkhunter] Warnings found for ${HOST_NAME}'.
#
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"
#
# This option specifies the log file pathname. The file will be created if it
# does not initially exist. If the option is unset, then the program will
# display a message each time it is run saying that the default value is being
# used.
#
# The default value is '/var/log/rkhunter.log'.
#
LOGFILE=/var/log/rkhunter/rkhunter.log
# Set this option to '1' if the log file is to be appended to whenever rkhunter
# is run. A value of '0' will cause a new log file to be created whenever the
# program is run.
#
# The default value is '0'.
#
#APPEND_LOG=0
APPEND_LOG=1
# The following option is checked against the SSH configuration file
# 'PermitRootLogin' option. A warning will be displayed if they do not match.
# However, if a value has not been set in the SSH configuration file, then a
# value here of 'unset' can be used to avoid warning messages.
#
# The default value is 'no'.
#
#ALLOW_SSH_ROOT_USER=no
ALLOW_SSH_ROOT_USER=no
# Set this option to '1' to allow the use of the SSH-1 protocol, but note
# that theoretically it is weaker, and therefore less secure, than the
# SSH-2 protocol. Do not modify this option unless you have good reasons
# to use the SSH-1 protocol (for instance for AFS token passing or Kerberos4
# authentication). If the 'Protocol' option has not been set in the SSH
# configuration file, then a value of '2' may be set here in order to
# suppress a warning message. A value of '0' indicates that the use of
# SSH-1 is not allowed.
#
# The default value is '0'.
#
#ALLOW_SSH_PROT_V1=0
ALLOW_SSH_PROT_V1=0
# The default values are to enable all tests and to disable none. However, if
# either of the options below are specified, then they will override the
# program defaults.
#
ENABLE_TESTS=ALL
#DISABLE_TESTS=suspscan hidden_ports hidden_procs deleted_files packet_cap_apps apps
DISABLE_TESTS=suspscan hidden_ports deleted_files packet_cap_apps apps ipc_shared_mem
# The PKGMGR option tells rkhunter to use the specified package manager to
# obtain the file property information. This is used when updating the file
# properties file ('rkhunter.dat'), and when running the file properties check.
# For RedHat/RPM-based systems, 'RPM' can be used to get information from the
# RPM database. For Debian-based systems 'DPKG' can be used, for *BSD systems
# 'BSD' can be used, or for *BSD systems with the 'pkg' command 'BSDng' can be
# used, and for Solaris systems 'SOLARIS' can be used. No value, or a value of
# 'NONE', indicates that no package manager is to be used.
#
# The default value is 'NONE'.
#
# Also see the PKGMGR_NO_VRFY and USE_SUNSUM options.
#
#PKGMGR=NONE
PKGMGR=RPM
Lo más importante en el archivo anterior es que pongas tu dirección de e-mail en el campo correspondiente para que te lleguen avisos en casos de problemas en el sistema. También que configures los mismos parámetros en este archivo y en el archivo de configuración de SSH para que no haya warnings todos los días.
Cron diario de Rkhunter
Se instala directamente y sin que tú hagas nada en /etc/cron.daily:
#!/usr/bin/sh
# 01-rkhunter A shell script to update and run rkhunter via CRON
XITVAL=0
# Get a secure tempfile
TMPFILE1=`/bin/mktemp -p /var/lib/rkhunter rkhcronlog.XXXXXXXXXX` || exit 1
if [ ! -e /var/lock/subsys/rkhunter ]; then
# Try to keep the SysInit boot scan from colliding with us (highly unlikely)
/bin/touch /var/lock/subsys/rkhunter
# Source system configuration parameters.
if [ -e /etc/sysconfig/rkhunter ] ; then
. /etc/sysconfig/rkhunter
else
MAILTO=root@localhost
fi
# If a diagnostic mode scan was requested, setup the parameters
if [ "$DIAG_SCAN" = "yes" ]; then
RKHUNTER_FLAGS="--checkall --skip-keypress --nocolors --quiet --appendlog --display-logfile"
else
RKHUNTER_FLAGS="--cronjob --nocolors --report-warnings-only"
fi
# Set a few critical parameters
RKHUNTER=/usr/bin/rkhunter
LOGFILE=/var/log/rkhunter/rkhunter.log
# Run RootKit Hunter if available
if [ -x $RKHUNTER ]; then
/bin/echo -e "\n--------------------- Start Rootkit Hunter Update ---------------------" \
> $TMPFILE1
/bin/nice -n 10 $RKHUNTER --update --nocolors 2>&1 >> $TMPFILE1
/bin/echo -e "\n---------------------- Start Rootkit Hunter Scan ----------------------" \
>> $TMPFILE1
/bin/nice -n 10 $RKHUNTER $RKHUNTER_FLAGS 2>&1 >> $TMPFILE1
XITVAL=$?
/bin/echo -e "\n----------------------- End Rootkit Hunter Scan -----------------------" \
>> $TMPFILE1
if [ $XITVAL != 0 ]; then
/bin/cat $TMPFILE1 | /bin/mail -s "rkhunter Daily Run on $(hostname)" $MAILTO
fi
/bin/cat $TMPFILE1 >> $LOGFILE
fi
# Delete the gating lockfile
/bin/rm -f /var/lock/subsys/rkhunter
fi
# Delete the secure tempfile
/bin/rm -f $TMPFILE1
exit $XITVAL
Por lo que se va a ejecutar todos los días de manera automática. Va a actualizar el programa, sus firmas y a correr Rkhunter en tu servidor.
Si te fijas en el archivo, el mail con los avisos lo va a enviar a root@localhost (puede que lo tengas ya configurado con algún Alias y te llegara bien), pero si quieres asegurarte, tienes que configurar el mail en /etc/sysconfig/rkhunter:
# System configuration file for Rootkit Hunter which
# stores RPM system specifics for cron run, etc.
#
# MAILTO= <email address to send scan report>
# DIAG_SCAN= no - perform normal report scan
# yes - perform detailed report scan
# (includes application check)
MAILTO=[email protected]
DIAG_SCAN=no
El e-mail solo te va a llegar si hay algún aviso. Si todo está bien, solo se guarda la salida en el log de Rkhunter.
Comprobamos que todo está correcto y funciona (si hay algún error saldrá en pantalla). Los dos comandos hacen lo mismo:
rkhunter --config-check
rkhunter -C
Comandos útiles
Puede que también quieras ejecutar tú mismo los chequeos, actualizaciones y demás. Puedes hacerlo con estos comandos:
#Actualizamos firmas del programa
rkhunter --update
#Actualizamos la base de datos contra la que rkhunter compara sus valores. Importante hacerlo despues de actualizaciones del SO.
rkhunter --propupd
#Hacemos un chequeo del sistema completo (--sk: Esta opción omite la confirmación de pruebas específicas. No necesitas darle a yes cada cierto tiempo)
rkhunter --check --sk
Referencias: https://docs.rockylinux.org/es/guides/web/apache_hardened_webserver/rkhunter/
Conclusión
No es tan complicado poner en marcha Rkhunter en Rocky Linux 9, pero tiene unas cuantas diferencias respecto a sus configuraciones en otros sistemas como Ubuntu. Por ejemplo, en este sistema, tenemos otro archivo de configuración en /etc/default/rkhunter, que no está presente en Rocky. Allí es donde configuran variables como CRON_DAILY_RUN o APT_AUTOGEN.
Te puede interesar: Mejorando la seguridad y rendimiento del Kernel en Rocky Linux 9
¿Dudas? ¿Consultas? Deja un comentario.