Cómo instalar el servidor Graylog en Ubuntu 20.04 | Ubuntu 21.10

Cómo instalar el servidor Graylog en Ubuntu 20.04 | Ubuntu 21.10

 

All systems, applications, and software generate information that is stored in files called logs. These logs must be constantly monitored to ensure the proper functioning of the system in question and prevent errors or security risks. They are often scattered over several servers and, as the volume of data increases, their management becomes more and more complex.

Graylog is a free and open-source enterprise-grade log management system that comprises Elasticsearch, MongoDB, and a Graylog server. It consists of the main server, which receives data from its clients installed on different servers, as well as a web interface, which is used to view the data collected by the server. Graylog is a similar tool like Splunk and LogStash.

In this tutorial, we learn how to install Graylog 4 on Ubuntu 20.04. We will also secure the Graylog server with an SSL certificate using Let’s Encrypt.

Requirements:

  • Ubuntu 20.04 machine or later
  • Hardware – 4 CPU Cores, 8 GB RAM, SSD Hard Disk with High IOPS for Elasticsearch Log Storage
  • Elasticsearch
  • MongoDB
  • Oracle Java SE 8 (OpenJDK 8 or above)

Step1: Install MongoDB on Ubuntu 20.04

Graylog uses MongoDB to store the configuration data such as streams, alerts, users, settings, etc. Only the metadata is stored and doesn’t store the logs data. Let’s first install MongoDB on Ubuntu 20.04.

First, install all the prerequisites packages:

$ sudo apt update
$ sudo apt install apt-transport-https openjdk-11-jre-headless uuid-runtime pwgen dirmngr gnupg wget

Ahora importe la clave GPG pública:

$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

Para crear un archivo de lista de origen, escriba:

$ sudo touch /etc/apt/sources.list.d/mongodb-org-5.0.list

Ahora, agregue la fuente del repositorio para Ubuntu 20.04:

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

Ahora, actualice el índice apt:

$ sudo apt update 

Para instalar MongoDB en Ubuntu, escriba:

$ sudo apt install mongodb-org

El servicio MongoDB no se iniciará automáticamente una vez que se complete el proceso de instalación. Para iniciar el servicio y habilitar el servicio, escriba:

$ sudo systemctl enable --now mongod.service

Verifique el estado del servicio MongoDB:

$ sudo systemctl status mongod.service

Producción:

● mongod.service - MongoDB Database Server
      Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
      Active: active (running) since Sun 2021-08-22 04:47:46 UTC; 3s ago
        Docs: https://docs.mongodb.org/manual
    Main PID: 17965 (mongod)
      Memory: 66.1M
      CGroup: /system.slice/mongod.service
              └─17965 /usr/bin/mongod --config /etc/mongod.conf
 Aug 22 04:47:46 li175-223 systemd[1]: Started MongoDB Database Server.

Como muestra el resultado, MongoDB se inició y el servicio está en funcionamiento.

Puede verificar la versión de MongoDB que está instalada

$ sudo mongod --version
db version v5.0.2
 Build Info: {
     "version": "5.0.2",
     "gitVersion": "6d9ec525e78465dcecadcff99cce953d380fedc8",
     "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
     "modules": [],
     "allocator": "tcmalloc",
     "environment": {
         "distmod": "ubuntu2004",
         "distarch": "x86_64",
         "target_arch": "x86_64"
     }
 }

El resultado muestra que hemos instalado MongoDB versión 5.0.2 .

Paso 2: Instale Elasticsearch en Ubuntu 20.04

Graylog almacena todos los datos de registro en Elasticsearch. Consulte el sitio web oficial de Graylog para conocer la versión compatible de elasticseach.

Elasticseach necesita Java, viene con la versión incluida de Java de OpenJDK

Importa la clave GPG del repositorio:

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

A continuación, agregue el repositorio de Elasticsearch:

# echo "deb https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Ahora actualiza el repositorio

$ sudo apt update

Finalmente, instale la versión de código abierto de elasticsearch escribiendo:

$ sudo apt install elasticsearch-oss

Modifique el archivo de configuración de elasticsearch para establecer cierta información como el nombre del clúster, la dirección IP en la que escucha elasticsearch y el número de puerto

$ sudo vi /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog-server
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
action.auto_create_index: false

El directorio y los archivos de configuración principales de Elasticsearch son:

Los datos se almacenan en el directorio /var/lib/elasticsearch.
Archivos de configuración: directorio /etc/elasticsearch
Opciones de inicio de Java: archivo /etc/default/elasticsearch

Elasticsearch viene con una versión integrada de OpenJDK. Para usar su propia versión de Java, configure la variable de entorno ES_JAVA_HOME.

Puede habilitar e iniciar el servicio Elasticsearch usando un comando:

$ sudo systemctl enable --now elasticsearch.service

Ahora verifique que el servicio se esté ejecutando correctamente con el siguiente comando:

$ sudo systemctl status elasticsearch.service

Producción:

● elasticsearch.service - Elasticsearch
      Loaded: loaded (/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
      Active: active (running) since Sun 2021-08-22 12:38:24 UTC; 11min ago
        Docs: http://www.elastic.co
    Main PID: 19502 (java)
       Tasks: 41 (limit: 1071)
      Memory: 833.2M
      CGroup: /system.slice/elasticsearch.service
              ├─19502 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negat>
              └─19565 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
 Aug 22 12:38:24 li663-124 systemd[1]: Started Elasticsearch.

Presione q para salir, volver al símbolo del sistema.

Elasticsearch por defecto funciona en el puerto 9200, debe abrirlo en el firewall.

$ sudo ufw allow 9200

Puedes comprobar si está funcionando.

$ sudo curl -XGET 'http://localhost:9200'
"name" : "Ubuntunode",
   "cluster_name" : "graylog-server",
   "cluster_uuid" : "sz3jP3rKTPWZlasWwD-rBg",
   "version" : {
     "number" : "7.10.2",
     "build_flavor" : "oss",
     "build_type" : "deb",
     "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
     "build_date" : "2021-01-13T00:42:12.435326Z",
     "build_snapshot" : false,
     "lucene_version" : "8.7.0",
     "minimum_wire_compatibility_version" : "6.8.0",
     "minimum_index_compatibility_version" : "6.0.0-beta1"
   },
   "tagline" : "You Know, for Search"
 }

Con la salida del comando, puede ver la línea que "number": "7.10.2"muestra la versión de elasticsearch.

Paso 3: Instale Graylog en Ubuntu 20.04

Graylog recopila los registros de las distintas entradas y proporciona la salida a la interfaz web que ofrece para administrar los registros.

Primero, necesitaremos descargar el archivo Graylog Repo usando el comando wget:

$ wget https://packages.graylog2.org/repo/packages/graylog-4.1-repository_1-3_all.deb

Para configurar el repositorio de Graylog, escriba:

$ sudo dpkg -i graylog-4.1-repository_1-3_all.deb 

Ahora podemos instalar el servidor Graylog

$ apt update
$ sudo apt install graylog-server

Habilite e inicie el servicio del servidor graylog

$ sudo systemctl enable --now graylog-server.service

Edite el archivo de configuración

Ahora necesitamos establecer el password_secretvalor hast de su root graylog root_password_sha2.

Para establecer un secreto para proteger las contraseñas de los usuarios, puede usar el comando pwgen:

$ pwgen -N 1 -s 96
8KOikhjxetTdcJ7qhtPlgtLgBqCX5y4vL36Ig423pqUQn32QatiecCcYol5UEw3XDzwgWDvcFOmMBJzkBZKC52aEpBrItwke

Ahora, edite el archivo de configuración para establecer la contraseña.

$ sudo vi /etc/graylog/server/server.conf
password_secret = RlTRqWSBENLKeg89iAWlxSaf1zfqLvBW7VX5SH1d2ji3RMKyeXb8bmfOXLl3GaWkxp9oDRfvbjXiEr36AFd6T9CMmnjdG7dn

Ahora debemos definir el valor hash de su cuenta de contraseña raíz de Graylog

$ echo -n GraylogRootPassword | shasum -a 256
4b09467e174a03d5ebd720d514f57783ad1e03b4877fff5e0dc45356340ab215  -

Ahora puedes copiarlo y pegarlo.

sudo vi /etc/graylog/server/server.conf
root_password_sha2 = 4b09467e174a03d5ebd720d514f57783ad1e03b4877fff5e0dc45356340ab215

Puede agregar información adicional como la dirección de correo electrónico raíz de Graylog y la interfaz de red utilizada por la interfaz HTTP de Graylog

root_email = "admin.graylog@websitefortesting.com"
root_timezone = UTC
http_bind_address = 0.0.0.0:9000

Debes abrir los puertos en tu firewall

$ sudo ufw allow 9000

Habilite e inicie el servicio del servidor graylog

$ sudo systemctl enable --now graylog-server.service

Puede encontrar los datos de registro para Graylog /var/log/graylog-server/server.log y útiles para la depuración o cuando el servidor no se inicia.

Puede ver la página de inicio ingresando la IP pública de su servidor y el número de puerto de su navegador, es decir, http://<server-ip>:9000/. El nombre de inicio de sesión raíz predeterminado de graylog es adminy la contraseña es la que se usa para el valor hash

Paso 4: Configuración de Nginx como proxy de terminación SSL (opcional)

Se recomienda asegurar su interfaz web de Graylog con HTTPS. Aquí usará Nginx como proxy inverso y generará un certificado SSL gratuito para el dominio usando Let’s Encrypt.

Primero, necesitaremos instalar Nginx, luego cerbot para el certificado let’s encrypt.

Ahora instalemos Nginx

$ sudo apt install nginx

Ahora permitamos Nginx en el firewall

$ sudo ufw allow 'Nginx Full'

Ahora editemos el contenido de nuestro archivo de configuración de nombre de dominio. No olvide reemplazar el nombre del archivo con su nombre de dominio

$ sudo vim /etc/nginx/sites-available/websitefortesting.com.conf
server {
         listen 80;
         server_name websitefortesting.com;
         add_header Strict-Transport-Security max-age=2592000;
         rewrite ^ https://$server_name$request_uri? permanent;
         access_log /var/log/nginx/websitefortesting.com.access.log combined;     
         error_log  /var/log/nginx/websitefortesting.com.error.log;
 }

Ahora vamos a activarlo

$ sudo ln -s /etc/nginx/sites-available/websitefortesting.com.conf /etc/nginx/sites-enabled/websitefortesting.com.conf

Luego verifique si la configuración está bien

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ahora necesitamos instalar cerbot con el paquete necesario para nginx

$ sudo apt install certbot python3-certbot-nginx

Ahora necesitamos ejecutar cerbot para Nginx

$ sudo certbot --nginx
 Saving debug log to /var/log/letsencrypt/letsencrypt.log
 Plugins selected: Authenticator nginx, Installer nginx
 Enter email address (used for urgent renewal and security notices) (Enter 'c' to
 cancel): francois@websitefortesting.com
 
 Please read the Terms of Service at
 https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
 agree in order to register with the ACME server at
 https://acme-v02.api.letsencrypt.org/directory
 
 (A)gree/(C)ancel: A
 
 Would you be willing to share your email address with the Electronic Frontier
 Foundation, a founding partner of the Let's Encrypt project and the non-profit
 organization that develops Certbot? We'd like to send you email about our work
 encrypting the web, EFF news, campaigns, and ways to support digital freedom.
 
 (Y)es/(N)o: N
 Which names would you like to activate HTTPS for?
 
 1: websitefortesting.com
 
 Select the appropriate numbers separated by commas and/or spaces, or leave input
 blank to select all options shown (Enter 'c' to cancel): 1
 Obtaining a new certificate
 Performing the following challenges:
 http-01 challenge for websitefortesting.com
Waiting for verification…
 Cleaning up challenges
 Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/websitefortesting.com.conf
 Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
 
 1: No redirect - Make no further changes to the webserver configuration.
 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
 new sites, or if you're confident your site works on HTTPS. You can undo this
 change by editing your web server's configuration.
 
 Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
 Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/websitefortesting.com.conf
 
 Congratulations! You have successfully enabled https://websitefortesting.com
 You should test your configuration at:
 https://www.ssllabs.com/ssltest/analyze.html?d=websitefortesting.com
 
 IMPORTANT NOTES:
 Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/websitefortesting.com/fullchain.pem
 Your key file has been saved at:
 /etc/letsencrypt/live/websitefortesting.com/privkey.pem
 Your cert will expire on 2021-11-18. To obtain a new or tweaked
 version of this certificate in the future, simply run certbot again
 with the "certonly" option. To non-interactively renew all of
 your certificates, run "certbot renew"
 If you like Certbot, please consider supporting our work by:
 Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 Donating to EFF:                    https://eff.org/donate-le 

Desde la salida, puede ver la ubicación de los certificados SSL y la clave privada. Puede usar esta información para configurar SSL para Nginx.

$ sudo vi /etc/nginx/sites-available/websitefortesting.com.conf
server {
         listen 80;
         server_name websitefortesting.com;
         add_header Strict-Transport-Security max-age=2592000;
         rewrite ^ https://$server_name$request_uri? permanent;
         access_log /var/log/nginx/websitefortesting.com.access.log combined;
         error_log  /var/log/nginx/websitefortesting.com.error.log;
 }
 server {
         listen 443 ssl; # managed by Certbot
         server_name websitefortesting.com;
         ssl_certificate /etc/letsencrypt/live/websitefortesting.com/fullchain.pem; # managed by Certbot
         ssl_certificate_key /etc/letsencrypt/live/websitefortesting.com/privkey.pem; # managed by Certbot
         include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
         ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
     location / {             proxy_set_header Host $http_host;             proxy_set_header X-Forwarded-Host $host; 
proxy_set_header X-Forwarded-Server $host;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;             proxy_pass http://127.0.0.1:9000;   
  }
 }

Ahora vamos a verificar de nuevo con

$ sudo nginx -t

Y reinicie el servicio Nginx

$ sudo systemctl restart nginx.service 

Ahora acceda a su URL de Graylog usando el nombre de dominio con HTTPS.

Cómo instalar el servidor Graylog en Ubuntu 20.04

Después de iniciar sesión, puede ver su página de inicio

Cómo instalar el servidor Graylog en Ubuntu 20.04

Conclusión

En este tutorial, aprendimos cómo instalar el servidor Graylog en Ubuntu 20.04, SSL configurado usando Nginx como proxy inverso.

Si enfrenta algún desafío durante el proceso de configuración, no dude en comentar o hacer cualquier pregunta en la sección de comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

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