~/docs/elk_install.ods

Premessa

Per chi mi segue su twitter sa quante volte io abbia scritto che su questo blog non avrei mai pubblicato alcun tutorial. I motivi sono semplici: in rete, con una buona ricerca su Google, si possono trovare fior fiore di documentazione ben scritta su qualsiasi argomento quindi ho sempre trovato inutile dover aggiungere ulteriore documentazione a quanto già presente.

Tuttavia, nel corso di questo ultimo periodo, mi sono reso conto che trovare documentazione puntuale su ELK è abbastanza difficile – specialmente in lingua italiana – se non si vuole affogare nella bellissima ma prolissa documentazione ufficiale (che, per inciso è il punto di riferimento che bisogna tenere sempre in considerazione quando si vuole affrontare questo tipo di implementazione).

Cosa voglio ottenere

Sebbene lo stack ELK sia di una flessibilità più unica che rara, nel mio specifico caso, avevo bisogno più di un log collector che di un SIEM. Lavorando, fra le varie mansioni, come network architect per me era indispensabile avere una piattaforma dove aggregare tutti i log dei firewall per poi eseguire a posteriori delle analisi puntuali sulle tipologie di traffico processato. Inoltre avevo la necessità di avere un strumento per analizzare come l’utenza usa i servizi aziendali ed identificare potenziali policy fallaci (troppo o troppo poco restrittive).

Ultima cosa prima di mettere le mani nella marmellata: questa guida non vuole in alcuna maniera sostituire le altre presenti in rete. Piuttosto lo scopo è quello di documentare le operazioni da me eseguite oltre che come documentazione / appunti personali da rileggere in caso di necessità).

Architettura

Sebbene vorrei in futuro scrivere un post più puntuale sull’architettura da me confezionata, in questa prima fase, mi limiterò ad elencare i tasselli logici che compongono il mio stack. Nel dettaglio questo è composto da:

  • nr 1 VM dedicata ad elasticsearch
  • nr 1 VM dedicata a filebeat
  • nr 1 VM dedicata a kibana e grafana
Nota importante

Io ho scelto come sistema operativo Alma Linux 9.x quindi questa “guida” farà riferimento a questa distribuzione.

Da molto tempo a questa parte (cioè tutte le distribuzioni di casa RedHat attualmente supportate) i pacchetti ufficiali per RHEL e Fedora sono firmati con SHA-256.

Il problema è con i pacchetti di terze parti: SHA-1 è l’algoritmo hash predefinito per l’utility rpmsign su RHEL 7. Inoltre, l’algoritmo hash predefinito in OBS signd è ancora SHA-1, quindi i fornitori di pacchetti di terze parti potrebbero ancora utilizzare inconsciamente le firme SHA-1.

Manco a dirlo, il pacchetto di elasticsearch è proprio firmato in SHA-1 quindi, per poterlo installare, bisogna temporaneamente abilitare SHA-1. Per farlo esistono svariati metodi, io ho usato:

# update-crypto-policies --set LEGACY

successivamente ho installato il pacchetto elastic ed infine ho riportato la situazione come era precedentemente con

# update-crypto-policies --set DEFAULT

Elasticsearch

Per l’installazione ho sempre fatto riferimento alla guida ufficiale.

Per prima cosa si importa la chiave GPG

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Poi si crea il file /etc/yum.repos.d/elasticsearch.repo e lo si compila con il seguente contenuto

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Segue l’installazione

# dnf install --enablerepo=elasticsearch elasticsearch

Come si può vedere stiamo installando la versione 8.x di Elasticsearch la quale, di default, ha la sicurezza abilitata per impostazione predefinita. La password per il superutente integrato “elastic” viene visualizzata sulla console. Nei passaggi successivi andremo a cambiarla, ma prima dobbiamo aver avviato il servizio Elasticsearch.

# /bin/systemctl daemon-reload
# /bin/systemctl enable elasticsearch.service
# systemctl start elasticsearch.service

Ora possiamo cambiare la password dell’utente “elastic”

/usr/share/elasticsearch/bin/elasticsearch-reset-password -i -u elastic

Dove -i indica la modalità interattiva e il -u specifica l’utente al quale si vuole cambiare la password.

Ora, come di consueto, si va a verificare se il nodo elastic è effettivamente funzionante.

# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

Come si nota, a differenza delle versioni precedenti, questa volta è indispensabile passare alla curl la CA e l’utente con il quale ci si vuole autenticare.

La configurazione del nodo è descritta nel file /etc/elasticsearch/elasticsearch.yml dove sono andato a modificare unicamente i seguenti parametri

node.name: nodo1
network.host: 192.168.250.100 
http.port: 9200

Infine ho aperto le porte sul firewall

# firewall-cmd --add-port=9200/tcp --permanent
# firewall-cmd --add-port=9300/tcp --permanent
# firewall-cmd --reload

La porta 9200 è quella di default usata da Elasticsearch per interrogare il DB, la 9300 verrà utilizzata da metricbeat (che vedremo in un altro articolo più avanti) per monitorare lo stato di salute del cluster.

Ora, prima di passare all’installazione di kibana è indispensabile creare un ulteriore utente sul nodo Elastic

# /usr/share/elasticsearch/bin/elasticsearch-reset-password -i -u kibana_system

[IMPORTANTE] È bene copiarsi il file della CA (/etc/elasticsearch/certs/http_ca.crt) dalla macchina Elastic a quella Kibana (/etc/kibana/certs/) in quanto lo useremo successivamente.

Riavviamo ancora una volta i servizi Elastic e per il momento lasciamo tutto così com’è.

Kibana

L’installazione di Kibana segue la falsa riga di quella di Elastic quindi, per prima cosa, si importa la chiave GPG

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

poi si crea il file /etc/yum.repos.d/kibana.repo

[kibana-8.x]
name=Kibana repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

poi si passa all’installazione

# sudo dnf install kibana

ed infine si abilitano i servizi al boot e si avvia il processo

# /bin/systemctl daemon-reload
# /bin/systemctl enable kibana.service
# systemctl start kibana.service

Terminata l’installazione si passa alla configurazione del servizio andando ad editare il file /etc/kibana/kibana.yml

server.port: 5601
server.host: "192.168.250.120"
server.publicBaseUrl: "http://192.168.250.120:5601"
server.name: "kibana"

elasticsearch.hosts: ["https://192.168.25.100:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "<la password che avete generato sulla VM di elastic>"

elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/certs/http_ca.crt"]

Infine andiamo ad aprire le porte sul firewall della macchina con

# firewall-cmd --add-port=5601/tcp --permanent
# firewall-cmd --reload

Terminate tutte le operazioni fin ora descritte, se tutto è andato bene, potete aprire un browser e puntare all’indirizzo del vostro server kibana alla porta 5601.

Img. 1 – Pagina di login

Prossimi passi

Nei prossimi articoli andremo a:

  • installare e configurare filebeat per l’ingestion dei log del firewall Fortigate
  • installare e configurare metricbeat per monitorare lo stato di salute di elastic
  • aumentare il livello di sicurezza andando a riscrivere l’architettura di rete e come segmentare i vari componenti dello stack
  • installare e configurare un reverse proxy per accedere a kibana (magari che faccia SSL offloading)
  • creare dashboard con grafana andando ad interrogare Elastic

EOF

1 commento su “~/docs/elk_install.ods”

Rispondi