Todos los sistemas, aplicaciones y software generan información que se almacena en archivos llamados registros. Estos registros deben ser monitoreados constantemente para asegurar el correcto funcionamiento del sistema en cuestión y prevenir errores o riesgos de seguridad. Suelen estar dispersos en varios servidores y, a medida que aumenta el volumen de datos, su gestión se vuelve cada vez más compleja.
Graylog es un sistema de administración de registros de nivel empresarial gratuito y de código abierto que comprende Elasticsearch, MongoDB y un servidor Graylog. Consiste en el servidor principal, que recibe datos de sus clientes instalados en diferentes servidores, así como una interfaz web, que se utiliza para ver los datos recopilados por el servidor. Graylog es una herramienta similar a Splunk y LogStash.
En este tutorial, aprendemos cómo instalar Graylog 4 en Ubuntu 20.04 . También protegeremos el servidor Graylog con un certificado SSL usando Let's Encrypt.
Requisitos:
- Máquina Ubuntu 20.04 o posterior
- Hardware:4 núcleos de CPU, 8 GB de RAM, disco duro SSD con alto IOPS para almacenamiento de registro de Elasticsearch
- Búsqueda elástica
- MongoDB
- Oracle Java SE 8 (OpenJDK 8 o superior)
Paso 1:Instale MongoDB en Ubuntu 20.04
Graylog usa MongoDB para almacenar los datos de configuración, como transmisiones, alertas, usuarios, configuraciones, etc. Solo se almacenan los metadatos y no almacena los datos de registros. Primero instalemos MongoDB en Ubuntu 20.04.
Primero, instale todos los paquetes de requisitos previos:
$ 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 fuentes, 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
Salida:
● 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 de paquete 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 actualice 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 está escuchando 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
Salida:
● 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 cortafuegos.
$ 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 "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
Editar el archivo de configuración
Ahora necesitamos establecer el password_secret
y el valor 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 = "[email protected]"
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://admin
y la contraseña es la utilizada 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 cortafuegos
$ 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): [email protected]
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 utilizando el nombre de dominio con HTTPS.
Después de iniciar sesión, puede ver su página de inicio
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.