GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar osquery para monitorear amenazas de seguridad en Ubuntu

OSQUERY es una herramienta de código abierto desarrollada por Facebook para consultar diversa información relacionada con el estado de sus máquinas, como procesos en ejecución, módulos Kernel cargados, usuarios registrados activos, puertos de escucha activos, etc. Este marco de instrumentación del sistema hace que el sistema operativo sea analítico y de bajo nivel. monitoreo eficiente e intuitivo. OSQUERY expone un sistema operativo como una base de datos relacional virtual de alto rendimiento que le permite escribir consultas SQL para explorar los datos del sistema operativo y consultar los puntos finales (Windows, OS X, Linux y FreeBSD) para identificar, investigar y eliminar varios tipos de amenazas. . OSQUERY es diferente del HIDS/IPS tradicional. Aquí debe averiguar qué datos hay en la tabla para consultas y diseñar consultas basadas en estos datos. Además, tiene una funcionalidad integrada para monitorear la integridad de los archivos, auditar las conexiones y los procesos de la red, e incluso registrar cambios en los dispositivos de hardware en tiempo real. En este artículo, instalaremos OSQUERY en ubuntu 16 y comprobaremos sus usos a través de osqueryi y osqueryd.

1. Instalar OSQUERY

Agregue información del repositorio OSQUERY a la base de datos apt y actualice el sistema.

 # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B

Para usar add-apt-repository, debe instalar las propiedades del software de python.

 # sudo apt-get install software-properties-common python-software-properties

Agregue los datos del repositorio a apt-database

 # sudo add-apt-repository "deb [arch=amd64] https://osquery-packages.s3.amazonaws.com/xenial xenial main"

Actualice el sistema e instale OSQUERY

 # sudo apt-get update
 # sudo apt-get install osquery

Puede ejecutar OSQUERY a través del shell interactivo o como un modo daemon. En primer lugar, exploremos cómo usarlo a través de la interfaz de shell de OSQUERY y luego comprobaremos el modo daemon. Para obtener el caparazón de osquery, escriba osqueryi en la terminal para consultar las tablas de osquery disponibles de fábrica.

 # osqueryi
 osquery>

Para enumerar todos los usuarios registrados en el sistema, ejecute la siguiente consulta.

 osquery> select * from logged_in_users ;

Encuentra todas las tablas disponibles para consulta.

 osquery> .tables

Para describir el esquema de una tabla, ejecute el siguiente comando.

 osquery> .schema table-name

Salir del caparazón

 osquery> .exit

También puede ejecutar OSQUERY pasando indicadores de línea de comando. por ejemplo

 # osqueryi --disable_events=false --worker_threads=2  --logger_plugin=filesystem --pidfile=/var/osquery/osquery.pidfile

Para conocer más indicadores de línea de comando disponibles para el shell interactivo de OSQUERY, ejecute el siguiente comando desde la terminal.

 # osqueryi --help

Exploraremos más consultas en una sección separada, pero ahora configuremos OSQUERY.

2. Configurar OSQUERY

Es más fácil ejecutar OSQUERY con un archivo de configuración. En lugar de pasar muchos parámetros de la línea de comandos para ejecutar el shell interactivo de osquery, estos parámetros se pueden escribir en el archivo de configuración de osquery. El shell interactivo de OSQUERY (osqueryi) leerá estos parámetros cuando ejecute osqueryi. OSQUERY no viene con un archivo de configuración. Más bien, hay un archivo de configuración de muestra ( /usr/share/osquery/osquery.example.conf ) que puede copiar. Busca el archivo de configuración en /etc/osquery/osquery.conf . Si el archivo de configuración no está presente, osqueryi se ejecutará con las opciones predeterminadas. Además, el archivo de configuración está disponible para el demonio OSQUERY.

El archivo de configuración de OSQUERY contiene las siguientes tres secciones.

→ Una lista de opciones y configuraciones leídas tanto por osqueryi como por osquery daemon ( osqueryd )
→ Query Schedule:el conjunto de consultas SQL e intervalos.
→ Una lista de paquetes que contiene consultas más específicas/dirigidas. por ejemplo, paquete de Monitoreo de cambios de archivos:categorías y rutas de archivos y directorios monitoreados

2.1 Opciones y configuraciones

La lista completa de opciones y configuraciones se puede encontrar en este wiki. Las opciones y configuraciones que se utilizarán para este artículo se describen a continuación.

complemento_config: Nombre del complemento de configuración. El tipo de recuperación de configuración, el complemento del sistema de archivos predeterminado lee un JSON de configuración del disco.

complemento_logger: Nombre del complemento del registrador. El registrador predeterminado es el sistema de archivos. Esto escribe los distintos tipos de registro como JSON en rutas de archivo específicas. Se pueden usar múltiples complementos de registrador simultáneamente, copiando efectivamente los registros en cada interfaz. Separe los nombres de los complementos con una coma cuando especifique la configuración (--logger_plugin=filesystem,syslog).

ruta_registrador: Ruta de directorio para ERROR/WARN/INFO y registro de resultados.

desactivar_registro: Deshabilite ERROR/ADVERTENCIA/INFO (llamados registros de estado) y registro de resultados de consultas.

schedule_splay_percent: Porcentaje para mostrar los tiempos de configuración. La programación de consultas a menudo incluye varias consultas con el mismo intervalo. A menudo, no es la intención del autor del programa ejecutar estas consultas juntas en ese intervalo. Pero más bien, cada consulta debe ejecutarse aproximadamente en el intervalo. Se aplica una distribución de programación predeterminada del 10 % a cada consulta cuando se carga la configuración.

archivo pid: Ruta de acceso al mutex del archivo pid del daemon. El archivo se utiliza para evitar que se inicien varios procesos de osqueryd.

eventos_caducidad: Tiempo de espera para caducar los resultados de suscripción de publicación de eventos de la tienda de respaldo. Este vencimiento solo se aplica cuando se consultan los resultados. Por ejemplo, si --events_expiry=1, los eventos solo existirán prácticamente para una sola selección del suscriptor. Si no se produce ninguna selección, los eventos se guardarán en la tienda de respaldo de forma indefinida.

ruta_de_la_base_de_datos: Si usa un almacenamiento de respaldo basado en disco, especifique una ruta. osquery mantendrá el estado usando una "tienda de respaldo" usando RocksDB por defecto. Este estado contiene información de eventos de modo que pueda consultarse más tarde de acuerdo con un cronograma. Contiene los resultados de la consulta más reciente para cada consulta dentro de la programación. Este último resultado consultado permite el registro diferencial de consulta.

detallado: Habilite los mensajes informativos detallados.

hilos_trabajadores: Número de subprocesos de despacho de trabajo utilizados para procesar consultas.

habilitar_monitor: Se utiliza para habilitar o deshabilitar el monitor de programación.

desactivar_eventos: Deshabilite las API de suscripción de publicación de eventos del sistema operativo osquery. Esto deshabilitará implícitamente varias tablas que informan según los eventos registrados.

desactivar_auditoría: Se utiliza para deshabilitar la recepción de eventos del subsistema de auditoría del sistema operativo.

auditoría_permiso_config: Permitir que el editor de auditoría cambie la configuración de auditoría

identificador_del_host: Campo utilizado para identificar el host que ejecuta osquery:nombre de host, uuid, efímero, instancia.

habilitar_syslog: Active el publicador de eventos de ingestión de syslog. Esta es una habilitación 'explícita' porque requiere una configuración externa de rsyslog o syslog-ng.

audit_allow_sockets: Esto permite que el editor de auditoría instale reglas relacionadas con sockets.

programa_intervalo_predeterminado: Opcionalmente, establezca el valor de intervalo predeterminado. Esto se usa si programa una consulta que no define un intervalo.

# sudo vi /etc/osquery/osquery.conf
"options": {
    "config_plugin": "filesystem",
    "logger_plugin": "filesystem",
    "logger_path": "/var/log/osquery",
    "disable_logging": "false",
    "log_result_events": "true",
    "schedule_splay_percent": "10",
    "pidfile": "/var/osquery/osquery.pidfile",
    "events_expiry": "3600",
    "database_path": "/var/osquery/osquery.db",
    "verbose": "false",
    "worker_threads": "2",
    "enable_monitor": "true",
    "disable_events": "false",
    "disable_audit": "false",
    "audit_allow_config": "true",
    "host_identifier": "hostname",
    "enable_syslog": "true",
    "audit_allow_sockets": "true",
    "schedule_default_interval": "3600" 
  },
 ...........
 ...........
 ...........

2.2 Calendario de consultas

La sección de programación contiene consultas identificadas por una clave única seguida por el intervalo que especifica la frecuencia de la consulta en segundos. La configuración para la sección de programación que usaremos se ve a continuación:

 ...........
 ...........
{
"schedule": {
    "crontab": {
      "query": "SELECT * FROM crontab;",
      "interval": 300
    },
    "largest_process": {
     "query": "select pid, name, uid, resident_size from processes order by resident_size desc limit 10;",
      "interval": 60
    }, 
 }
...........
...........

La primera consulta mira la tabla crontab cada 300 segundos y la segunda consulta rastrea las extensiones del kernel cargadas cada 10 segundos. Los resultados de la consulta se almacenan en caché en el disco mediante RocksDB. En la primera ejecución de la consulta, todos los resultados se almacenan en RocksDB. En las ejecuciones posteriores, solo se registran en RocksDB las diferencias del conjunto de resultados (cambios).

Otras consultas especiales llamadas decoradores se utilizan para anteponer datos a otras consultas programadas. Los siguientes decoradores agregarán el UUID del host que ejecuta osquery y el nombre de usuario del usuario a cada consulta programada.

..........
..........
"decorators": {
    "load": [
      "SELECT uuid AS host_uuid FROM system_info;",
      "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
    ]
  },
..........
..........

2.3 Paquetes de consultas

La configuración admite conjuntos, llamados paquetes, de consultas que ayudan a definir su programación. Los paquetes se distribuyen con osquería y se etiquetan según amplias categorías de información y visibilidad. Por ejemplo, un paquete de "cumplimiento" incluirá consultas que verifiquen los cambios en las funciones bloqueadas del sistema operativo y la configuración del usuario. Un paquete de "gestión de vulnerabilidades" puede realizar consultas generales de gestión de activos que generan registros de eventos en torno a los cambios de instalación de paquetes y software. El conjunto predeterminado de paquetes ubicado en la carpeta /usr/share/osquery/packs. Agregue estos paquetes al archivo de configuración.

..........
..........
"packs": {
 "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
 "incident-response": "/usr/share/osquery/packs/incident-response.conf",
 "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
 "vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
 }

2.4 Crear un paquete personalizado para monitorear la integridad de los archivos

Los paquetes que hemos agregado en la sección anterior se envían sin caja. Ahora queremos agregar nuestro propio paquete cuya tarea es monitorear la integridad de los archivos para las carpetas configuradas a través de file_paths. Cree un archivo con el nombre fims.conf dentro de /usr/share/osquery/packs/ y agregue la siguiente sección.

# vi /usr/share/osquery/packs/fims.conf

{
  "queries": {
    "file_events": {
      "query": "select * from file_events;",
      "removed": false,
      "interval": 300
    }
  },
  "file_paths": {
    "homes": [
      "/root/.ssh/%%",
      "/home/%/.ssh/%%"
    ],
      "etc": [
      "/etc/%%"
    ],
      "home": [
      "/home/%%"
    ],
      "tmp": [
      "/tmp/%%"
    ]
  }
}

La consulta file_events está programada para recopilar todos los eventos FIM que se han producido en cualquier archivo dentro de las rutas especificadas por file_paths en un intervalo de cinco minutos. En un nivel alto, esto significa que los eventos se almacenan en búfer dentro de osquery y se envían al registrador configurado cada cinco minutos.

Modifique la sección de paquetes en osquery.conf para incluir el archivo anterior.

# sudo vi /etc/osquery/osquery.conf
.................
"packs": {
     "fim": "/usr/share/osquery/packs/fims.conf",
     "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
     "incident-response": "/usr/share/osquery/packs/incident-response.conf",
     "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
     "vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
  }

El archivo de configuración final de OSQUERY tiene este aspecto:

{
  "options": {
    "config_plugin": "filesystem",
    "logger_plugin": "filesystem",
    "logger_path": "/var/log/osquery",
    "disable_logging": "false",
    "log_result_events": "true",
    "schedule_splay_percent": "10",
    "pidfile": "/var/osquery/osquery.pidfile",
    "events_expiry": "3600",
    "database_path": "/var/osquery/osquery.db",
    "verbose": "true",
    "worker_threads": "2",
    "enable_monitor": "true",
    "disable_events": "false",
    "disable_audit": "false",
    "audit_allow_config": "true",
    "host_identifier": "hostname",
    "enable_syslog": "true",
    "syslog_pipe_path": "/var/osquery/syslog_pipe",
    "audit_allow_sockets": "true",
    "schedule_default_interval": "3600" 
  },
"schedule": {

"crontab": {
      "query": "SELECT * FROM crontab;",
      "interval": 300
    },
    "largest_process": {
     "query": "select pid, name, uid, resident_size from processes order by resident_size desc limit 10;",
      "interval": 60
    } 
  },
  "decorators": {
    "load": [
      "SELECT uuid AS host_uuid FROM system_info;",
      "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
    ]
  },
  "packs": {
     "fim": "/usr/share/osquery/packs/fims.conf",
     "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
     "incident-response": "/usr/share/osquery/packs/incident-response.conf",
     "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
     "vuln-management": "/usr/share/osquery/packs/vuln-management.conf",
     "hardware-monitoring": "/usr/share/osquery/packs/hardware-monitoring.conf"
  }
}

Compruebe la validez del archivo de configuración.

# sudo osqueryctl config-check

Ejecute OSQUERY shell interactivo en modo detallado.

# osqueryi --verbose

3. Configure OSQUERY para consumir registros de syslog-ng

En este paso, configuraremos OSQUERY para consumir syslogs. Ubuntu tiene una aplicación rsyslog predeterminada que genera syslogs, pero en este artículo descubriremos cómo configurar syslog-ng para que OSQUERY consuma los registros generados por él. La tabla syslog de OSQUERY consulta los registros reenviados a través de una canalización con nombre desde un demonio syslog-ng configurado correctamente. A medida que syslog se ingiere en osquery, se escribe en el almacén de respaldo (RocksDB) y está disponible para consultas. Por lo tanto, la configuración de syslog-ng creará una canalización con nombre a través de la cual OSQUERY consumirá los registros.

Instalar syslog-ng

 # sudo apt-get install syslog-ng

Cambie el grupo de archivos creado por syslog-ng a syslog. Edite el archivo de configuración principal syslog-ng y cambie el grupo a adm.

# vi /etc/syslog-ng/syslog-ng.conf
 .........................
 .........................
 options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
 owner("root");  group("adm"); perm(0640); stats_freq(0); bad_hostname("^gconfd$"); threaded(yes); }; ......................... .........................

A continuación, cree la configuración syslog-ng para OSQUERY. La siguiente sección muestra cómo configurar syslog-ng para los registros del sistema y reescribe estos registros en formato CSV. Luego se usa una plantilla para formatear el mensaje/registro de modo que los campos de registro se mezclen con la tabla syslog de OSQUERY. Finalmente, los registros se envían a la canalización con nombre para que OSQUERY los consuma. Los permisos para la canalización deben permitir al menos que syslog-ng lea/escriba y que osquery lea.

 # vi /etc/syslog-ng/conf.d/osquery.conf

 source s_osquery {
 system();
 };
 rewrite r_csv_message {
 set("$MESSAGE", value("CSVMESSAGE") );
 subst("\"","\\\"", value("CSVMESSAGE"), flags(global) );
 };
 template t_csv {
 template("\"${ISODATE}\", \"${HOST}\", \"${LEVEL_NUM}\", \"${FACILITY}\", \"${PROGRAM}\", \"${MESSAGE}\"\n");
 template_escape(no);
 };
 destination d_osquery {
 pipe("/var/osquery/syslog_pipe" template(t_csv));
 };
 log {
 source(s_osquery);
 rewrite(r_csv_message);
 destination(d_osquery);
 };

El archivo de configuración de osquery ( /etc/osquery/osquery.conf ) que hemos creado anteriormente necesita un pequeño ajuste para syslog-ng. Cambie logger_plugin a syslog desde el sistema de archivos o conserve ambos.

 "logger_plugin": "syslog" or  "logger_plugin": "filesystem,syslog"

Las siguientes opciones también son necesarias para la ingestión de syslog.

 .................
 .................
 "enable_syslog": "true",
 "syslog_pipe_path": "/var/osquery/syslog_pipe",
 "disable_events": "false",
 .................
 .................

Entonces necesitamos editar solo las opciones de logger_plugin en /etc/osquery/osquery.conf que hemos creado anteriormente y el resto de las tres opciones ya están en el archivo de configuración.

Ahora reinicie syslog-ng y compruebe si la canalización se ha creado con los permisos adecuados.

# sudo systemctl start syslog-ng

# ls -l /var/osquery/syslog_pipe
prw-r----- 1 root adm 0 Apr 27 14:29 /var/osquery/syslog_pipe

Compruebe los registros que fluyen a través de la tubería

 # cat /var/osquery/syslog_pipe
 "2017-04-27T14:42:33+00:00", "ubuntu", "6", "auth", "sshd", "Accepted password for root from 117.227.81.214 port 61849 ssh2"
 "2017-04-27T14:42:33+00:00", "ubuntu", "6", "authpriv", "sshd", "pam_unix(sshd:session): session opened for user root by (uid=0)"
 "2017-04-27T14:42:41+00:00", "ubuntu", "5", "local3", "osqueryi", "severity=0 location=options.cpp:61 message=Verbose logging enabled by config option"
 ...................................
 ...................................

Inicie el shell interactivo de OSQUERY.

# osqueryi
I0427 14:32:07.981422  3730 options.cpp:61] Verbose logging enabled by config option
I0427 14:32:08.085734  3730 syslog.cpp:97] Successfully opened pipe for syslog ingestion: /var/osquery/syslog_pipe
I0427 14:32:08.101172  3730 file_events.cpp:68] Added file event listener to: /etc/**
....................
I0427 14:32:08.101784  3730 audit.cpp:226] Adding audit rule: syscall=59 action=2 filter=''
....................
I0427 14:32:08.278990  3737 events.cpp:749] Starting event publisher run loop: syslog
I0427 14:32:08.279242  3736 events.cpp:749] Starting event publisher run loop: inotify
I0427 14:32:08.279353  3735 events.cpp:749] Starting event publisher run loop: audit

osquery>

Ahora consulta la tabla de syslog.

osqueryi> select * from syslog;

La consulta anterior mostrará los syslogs consumidos por osquery a través de la canalización con nombre /var/osquery/syslog_pipe

4. Detección de amenazas y DFIR a través de OSQUERYi

En esta sección, exploraremos algunos controles de seguridad básicos a través del shell interactivo de osquery.

a) Ejecute la siguiente consulta para encontrar quiénes son los usuarios registrados en el sistema ahora.

osquery> select * from logged_in_users ;

b) Encuentra todos los inicios de sesión anteriores

osquery> select * from last ;

c) Para encontrar las reglas del firewall, ejecute la siguiente consulta. Si la siguiente consulta no produce ningún resultado, significa que el firewall no está configurado.

osquery> select * from iptables ;

d) Para encontrar todos los trabajos programados por crontab, ejecute la siguiente consulta. Con esta consulta, puede averiguar si hay algún malware programado para ejecutarse en un intervalo específico.

osquery> select command, path from crontab ;

e) Busque los archivos habilitados para setuid. De forma predeterminada, pocos archivos están habilitados para setuid en Ubuntu 16, pero aparte de estos, ¿cuáles son los otros archivos que están habilitados para setuid? Esto ayudará a detectar binarios de puerta trasera.

osquery> select * from suid_bin ;

f) Busque la lista de módulos del kernel cargados.

osquery> select name, used_by, status from kernel_modules where status="Live" ;

g) Busque todos los puertos de escucha para comprobar si hay alguna puerta trasera en el sistema. Si hay algún puerto abierto que no ha configurado, es posible que deba examinar el proceso que abrió este puerto.

osquery> select * from listening_ports ;

h) Encuentre la actividad del archivo en el servidor junto con el usuario responsable ejecutando la siguiente consulta.

osquery> select * from  file_events ;

i) Encuentre los 10 procesos más grandes por tamaño de memoria residente.

osquery> select pid, name, uid, resident_size from processes order by resident_size desc limit 10;

j) Encuentra todos los procesos en ejecución.

osquery> select * from processes;

k) Encuentre el número de procesos, el nombre de los 10 procesos más activos.

osquery> select count(pid) as total, name from processes group by name order by total desc limit 10;

l) En general, el malware escuchará los puertos y reenviará el shell inverso al atacante. Ejecute la siguiente consulta y encuentre las diferencias con cualquier estado seguro conocido anterior de su sistema.

osquery> SELECT DISTINCT process.name, listening.port, listening.address, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid;

m) A menudo, el atacante eliminará el archivo binario malicioso después de ejecutarlo en el sistema. Para encontrar dichos procesos, ejecute la siguiente consulta.

osquery>  SELECT name, path, pid FROM processes WHERE on_disk = 0;

n) Ejecute la siguiente consulta para averiguar si hay algún bash shell inverso reenviado al atacante.

osquery> SELECT * FROM processes WHERE cmdline LIKE '/bin/bash -i >& /dev/tcp/%';

5. OSQUERY en modo demonio

Como hemos visto, OSQUERY devolverá resultados del estado del sistema operativo en tiempo real que se pueden consultar en una etapa posterior. Pero no es posible ejecutar consultas todo el tiempo para la detección de amenazas. Aparte de esto, OSQUERY tampoco incluye ningún mecanismo de alerta. La solución es ejecutar OSQUERY como daemon que ejecutará consultas programadas y paquetes incluidos en el archivo de configuración a intervalos regulares y escribirá los resultados en un archivo. Cree sus propios paquetes dentro de /usr/share/osquery/packs e incluya los paquetes para monitorear en el archivo de configuración de OSQUERY. Los resultados de las consultas y paquetes programados se escriben en el archivo /var/log/osquery/osqueryd.results.log. Este archivo de registro se creará solo cuando OSQUERY se inicie como modo daemon y OSQUERYD comience a enviar los resultados. El demonio OSQUERY leerá el mismo archivo de configuración /etc/osquery/osquery.conf. Recuerde revertir el valor de logger_plugin al sistema de archivos en /etc/osquery/osquery.conf si lo cambió anteriormente a 'syslog'.

Para iniciar el daemon, use cualquiera de los siguientes comandos.

# sudo systemctl start osqueryd
       OR
# sudo osqueryctl start

Los resultados deberían estar disponibles en poco tiempo una vez que OSQUERYD ejecute las consultas y los paquetes programados. Use el comando tail para verificar que los resultados se escriben en el archivo /var/log/osquery/osqueryd.results.log

# tail -f  /var/log/osquery/osqueryd.results.log

Ahora puede reenviar los registros de resultados a cualquier aplicación externa como la pila ELK para el análisis de registros y la generación de alertas.

Conclusión

OSQUERY es una herramienta increíble que expone los datos del sistema operativo a la base de datos relacional virtual y le permite consultar los datos del sistema con SQL. osqueryi es útil para ejecutar consultas únicas para encontrar puertas traseras, malware, procesos zombis o descubrir usuarios registrados, etc. mientras que osqueryd se puede usar para ejecutar consultas programadas y paquetes personalizados para almacenar resultados a largo plazo y generación de alertas usando cualquier aplicación externa.


Ubuntu
  1. Cómo agregar un archivo de intercambio en Ubuntu

  2. Cómo configurar HAProxy en Ubuntu 16.04

  3. Cómo configurar el cortafuegos UFW en Ubuntu 18.04

  4. Cómo instalar Bro Network Security Monitor en Ubuntu 16.04 LTS

  5. Cómo monitorear la seguridad del servidor Linux con Osquery

Cómo habilitar actualizaciones de seguridad automáticas desatendidas en Ubuntu

Cómo configurar OpenVPN en Ubuntu Server

Cómo configurar el servidor Git en Ubuntu 20.04

Cómo comprimir archivos PDF en Ubuntu

Cómo eliminar un archivo en Ubuntu

Consejos de Ubuntu:cómo configurar un monitor dual