Un po' di informatica...

… non guasta mai.

Per lavoro e per passione l’informatica è compagna delle mie giornate.

In questa sezione non seguirò un filone particolare, ma pubblicherò svariati articoli che spero possano essere utili, oltre a quelli che troverete nelle altre pagine.

 

L’installazione di default non ha il certificato SSL.

Se si desidera collegarvisi in HTTPS questi sono i passaggi che ho seguito e che “hanno dato buoni frutti”.

Creiamo un file che chiameremo ad esempio openssl-graylog.cnf:

vi  openssl-graylog.cnf

dentro vi incolliamo:

[req]

distinguished_name = req_distinguished_name

x509_extensions = v3_req

prompt = no

# Details about the issuer of the certificate

[req_distinguished_name]

C = IT (modificare)

ST = Liguria (modificare)

L = Genova (modificare)

O = Tech2 (modificare)

OU = Sicurezza Informatica (modificare)

CN = nome del server

[v3_req]

keyUsage = keyEncipherment, digitalSignature

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

# IP addresses and DNS names the certificate should include

# Use IP.### for IP addresses and DNS.### for DNS names,

# with "###" being a consecutive number.

[alt_names]

IP.1 = indirizzo IP del server

DNS.1 = nome del server

Lanciamo i seguenti comandi, se volessimo far durare di più il certificato, modifichiamo il numero di giorni:

openssl req -x509 -days 365 -nodes -newkey rsa:2048 -config openssl-graylog.cnf -keyout pkcs5-plain.pem -out cert.pem

openssl pkcs8 -in pkcs5-plain.pem -topk8 -nocrypt -out pkcs8-plain.pem

openssl pkcs8 -in pkcs5-plain.pem -topk8 -out pkcs8-encrypted.pem -passout pass:secret

Creiamo successivamente una cartella, ad esempio /etc/ssl/certs/graylog:

mkdir /etc/ssl/certs/graylog

e vi copiamo dentro i file .pem che sono stati generati

cp *.pem /etc/ssl/certs/graylog

Poi

cd /etc/ssl/certs/graylog

chown graylog:graylog *.*

chmod 400 *.*

E poi  modifichiamo la configurazione di Graylog:

vi /etc/graylog/server/server.conf

#### HTTP publish URI

http_publish_uri = https://nomedelserver:9000/

#### External Graylog URI

http_external_uri = https://nomedelserver:9000/

# HTTPS settings

################

http_enable_tls = true

# The X.509 certificate chain file in PEM format to use for securing the HTTP interface.

http_tls_cert_file = /etc/ssl/certs/graylog/cert.pem

# The PKCS#8 private key file in PEM format to use for securing the HTTP interface.

http_tls_key_file = /etc/ssl/certs/graylog/pkcs8-encrypted.pem

# The password to unlock the private key used for securing the HTTP interface.

http_tls_key_password = secret

Salviamo ed usciamo.

Lanciamo ora il seguente comando:

find / -name cacerts

Nel mio caso il file si trovava del seguente percorso:

/usr/share/elasticsearch/jdk/lib/security/

Facciamo una copia di sicurezza del file:

cp  /usr/share/elasticsearch/jdk/lib/security/cacerts /usr/share/elasticsearch/jdk/lib/security/cacertsbk

Quindi lanciamo:

keytool -import -keystore /usr/share/elasticsearch/jdk/lib/security/cacerts -storepass secret -file /etc/ssl/certs/graylog/cert.pem

e diamo yes

poi editiamo  il file jvm.options:

vi /etc/elasticsearch/jvm.options

aggiungiamo -Djavax.net.ssl.trustStore=/usr/share/elasticsearch/jdk/lib/security/cacerts

salviamo ed usciamo.

Riavviamo la nostra macchina ed aspettiamo qualche minuto.

Dovremmo raggiungerla in https.

Se dà connessione negata o altri errori da web, consultare i file di log sotto /var/log/elasticsearch o graylog-server.

Se il browser dà comunque errore di certificato non valido, dobbiamo importarlo nella nostra macchina come autorità di certificazione radice attendibile.

Pulire la cache di Chrome e riprovare.

Ho installato Wazuh 4.7 con il tool automatico e recentemente sono passata alla 4.8 (consiglio di seguire le istruzioni della "casa madre" per fare questo update, sono le uniche che nel mio caso hanno funzionato).

Avendo necessità di interfacciarlo con altri programmi come Grafana e CopilotSOCFortress che sto testando, ho dovuto apportare delle modifiche alla configurazione nativa dei certificati.

Le istruzioni che indicherò di seguito saranno oggetto di una mia successiva revisione, in quanto non vorrei aver saltato qualche passaggio nella trascrizione.

Scarichiamo il file wget wazuh-certs-tool.sh https://packages.wazuh.com/4.8/wazuh-certs-tool.sh e creiamo un file config.yml, inserendo il seguente testo:
nodes:
# Wazuh indexer nodes
indexer:
- name: wazuh-indexer
ip: ip del server

# Wazuh server nodes
server:
- name: wazuh-server
ip: ip del server

# Wazuh dashboard nodes
dashboard:
- name: wazuh-dashboard
ip: ip del server

Salviamo ed usciamo.

Lanciamo bash wazuh-certs-tool.sh -A
Dentro la cartella wazuh-certificates verranno creati i certificati che ci occorrono:

-rwxr--r-- 1 root root 1704 Jul 26 08:35 admin-key.pem*
-rwxr--r-- 1 root root 1119 Jul 26 08:35 admin.pem*
-rwxr--r-- 1 root root 1704 Jul 26 08:35 root-ca.key*
-rwxr--r-- 1 root root 1204 Jul 26 08:35 root-ca.pem*
-rwxr--r-- 1 root root 1704 Jul 26 08:35 wazuh-dashboard-key.pem*
-rwxr--r-- 1 root root 1289 Jul 26 08:35 wazuh-dashboard.pem*
-rwxr--r-- 1 root root 1704 Jul 26 08:35 wazuh-indexer-key.pem*
-rwxr--r-- 1 root root 1285 Jul 26 08:35 wazuh-indexer.pem*
-rwxr--r-- 1 root root 1708 Jul 26 08:35 wazuh-server-key.pem*
-rwxr--r-- 1 root root 1285 Jul 26 08:35 wazuh-server.pem*

Copiamo i file root-ca.pem, wazuh-server-key.pem, wazuh-server.pem in /etc/filebeat/certs
Copiamo i file root-ca.pem, wazuh-indexer.pem, wazuh-indexer-key.pem in /etc/wazuh-indexer/certs/
Copiamo i file root-ca.pem, wazuh-dashboard-key.pem, wazuh-dashboard.pem in /etc/wazuh-dashboard/certs/

Editiamo il file filebeat.yml che si trova sotto /etc/filebeat:

# Wazuh - Filebeat configuration file
output.elasticsearch.hosts:
- ip del server:9200
# - <elasticsearch_ip_node_2>:9200
# - <elasticsearch_ip_node_3>:9200

output.elasticsearch:
protocol: https
username: ${username}
password: ${password}
ssl.certificate_authorities:
- /etc/filebeat/certs/root-ca.pem
ssl.certificate: "/etc/filebeat/certs/wazuh-server.pem"
ssl.key: "/etc/filebeat/certs/wazuh-server-key.pem"

Salviamo ed usciamo.

Editiamo il file opensearch.yml che si trova sotto /etc/wazuh-indexer:

network.host: "ip del server"
node.name: "node-1"
cluster.initial_master_nodes:
- "node-1"
cluster.name: "wazuh-cluster"

node.max_local_storage_nodes: "3"
path.data: /var/lib/wazuh-indexer
path.logs: /var/log/wazuh-indexer

plugins.security.ssl.http.pemcert_filepath: /etc/wazuh-indexer/certs/wazuh-indexer.pem
plugins.security.ssl.http.pemkey_filepath: /etc/wazuh-indexer/certs/wazuh-indexer-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.transport.pemcert_filepath: /etc/wazuh-indexer/certs/wazuh-indexer.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/wazuh-indexer/certs/wazuh-indexer-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.http.enabled: true

Salviamo ed usciamo.

Editiamo il file opensearch_dashboard.yml che si trova sotto /etc/wazuh-dashboard:

server.host: 0.0.0.0
opensearch.hosts: https://ip del server:9200
server.port: 443
opensearch.ssl.verificationMode: certificate
# opensearch.username: kibanaserver
# opensearch.password: kibanaserver
opensearch.requestHeadersAllowlist: ["securitytenant","Authorization"]
opensearch_security.multitenancy.enabled: false
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
server.ssl.enabled: true
server.ssl.key: "/etc/wazuh-dashboard/certs/wazuh-dashboard-key.pem"
server.ssl.certificate: "/etc/wazuh-dashboard/certs/wazuh-dashboard.pem"
opensearch.ssl.certificateAuthorities: ["/etc/wazuh-dashboard/certs/root-ca.pem"]

Salviamo ed usciamo.

Riavviamo la macchina; a macchina riavviata lanciamo il comando:

filebeat test output

Nel mondo ideale dovrebbe restituire valori tipo questi:

elasticsearch: https://ip del server:9200...

  parse url... OK

  connection...

    parse host... OK

    dns lookup... OK

    addresses: ip del server

    dial up... OK

  TLS...

    security: server's certificate chain verification is enabled

    handshake... OK

    TLS version: TLSv1.2

    dial up... OK

  talk to server... OK

  version: 7.10.2

Se non dà errori attendere qualche minuto e provare a collegarsi all'interfaccia web, altrimenti verificare i relativi log sotto /var/log/filebeat

Prendo come esempio due applicativi come Zabbix e Graylog, che possiedono un loro database destinato a diventare “importante” nel tempo.

In genere non dedico una unità “a parte”, ma ci possono essere casi in cui viene richiesta una configurazione simile.

Ecco i passaggi che ho effettuato, nel seguente scenario ho già preparato il disco dedicato (che nel mio caso di chiama vdb1).

Prima di tutto creo le relative cartelle sotto /mnt:

mkdir /mnt/datazabbix

mkdir /mnt/datagraylog

Poi lancio il comando mount:

mount /dev/vdb1 /mnt/datagraylog

mount /dev/vdb1 /mnt/datazabbix

 

Edito il file /etc/fstab:

vi /etc/fstab

/dev/vdb1       /mnt/datazabbix         ext4    defaults     0   0

/dev/vdb1       /mnt/datagraylog       ext4    defaults     0   0

 

Salvo ed esco. Eseguo un reboot della macchina.

Fermo i servizi di Zabbix Server, MariaDB, MongoDB, Graylog ed Elasticsearch (quelli presenti).

Per Zabbix lancio i comandi:

chown -R zabbix:zabbix /mnt/datazabbix

chown -R mysql:mysql /mnt/datazabbix

Edito il file server.cnf che si trova sotto /etc/my.cnf.d/ e modifico il puntamento:

vi server.cnf

datadir=/mnt/datazabbix

Copio il contenuto del precedente percorso del database nel nuovo:

cp -R -p /mnt/mysql/* /mnt/datazabbix

Riavvio la macchina.

Infine lancio il comando zabbix_server -R config_cache_reload

Per Elasticsearch i passaggi sono i seguenti:

Editare il file elasticsearch.yml sotto /etc/elasticsearch e modificare la riga path.data:

path.data: /mnt/datagraylog

Poi lancio:

chown -R elasticsearch:elasticsearch /mnt/datagraylog

Ed infine copio il contenuto del vecchio percorso nel nuovo:

cp -R -p /var/lib/elasticsearch/* /mnt/datagraylog

Riavvio la macchina.

Adoro Zabbix. Di default si raggiunge in http ed in rete ho trovato diverse istruzioni su come fare per raggiungerlo invece in https senza utilizzare certbot; anche qui scrivo i passaggi che nel mio caso hanno funzionato, utilizzo Ubuntu, per chi ha Rocky/CentOS i passaggi nella seconda metà sono diversi.

Eseguire a2enmod ssl

Creare un file chiamato zabbix.cnf ed inserire le seguenti informazioni:

[req]

distinguished_name = req_distinguished_name

x509_extensions = v3_req

prompt = no

# Details about the issuer of the certificate

[req_distinguished_name]

C = IT (modificare)

ST = Liguria (modificare)

L = Genova (modificare)

O = Tech2 (modificare)

OU = Sicurezza Informatica (modificare)

CN = nome del server

[v3_req]

keyUsage = keyEncipherment, digitalSignature

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

# IP addresses and DNS names the certificate should include

# Use IP.### for IP addresses and DNS.### for DNS names,

# with "###" being a consecutive number.

[alt_names]

IP.1 = indirizzo IP del server

DNS.1 = nome del server

Lanciamo il seguente comando, se volessimo far durare di più il certificato, modifichiamo il numero di giorni:

openssl req -x509 -days 365 -nodes -newkey rsa:2048 -config zabbix.cnf -keyout pkcs5-plain.pem -out cert.pem

Creiamo una cartella chiamata ssl e vi copiamo all’interno i due file appena creati.

mkdir ssl

cp *.pem /home/sara/ssl (ad esempio)

Poi eseguiamo i seguenti passaggi:

cd ssl

chown zabbix:zabbix *.*

chmod 400 *.*

Lanciamo quindi il comando:

vi /etc/apache2/sites-available/000-default.conf

In fondo al file aggiungiamo una configurazione tipo questa:

<VirtualHost *:443>

ServerName nome del server

SSLEngine on

SSLCertificateFile /home/sara/ssl/cert.pem

SSLCertificateKeyFile /home/sara/ssl/pkcs5-plain.pem

DocumentRoot /usr/share/zabbix

<Directory "/usr/share/zabbix">

Options FollowSymLinks

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

Riavviamo la macchina.

Se il browser dà comunque errore di certificato non valido, dobbiamo importarlo nella nostra macchina come autorità di certificazione radice attendibile.

Pulire la cache di Chrome e riprovare.

Se dà connessione negata o altri errori da web, consultare i file di log sotto /var/log.

Quando vesto i panni di insegnante di Excel, questa è una delle mie funzioni preferite. Alla fine anche questa è informatica!

Abbiamo una tabella con varie voci e rispettivi valori, dove le voci vanno da A11 a A17 ed i valori da B11 a B17:

gatti meticci

44

cani bassotti

3

topini bianchi

10

gatti soriani

3

gatti persiani

5

cani segugi

8

pesci rossi

7

Utilizzando SOMMA.SE e il simbolo asterisco * possiamo sapere quanti sono ad esempio in totale i cani, indipendentemente dalla loro razza.

La formula è la seguente:

=SOMMA.SE(A11:A17;"cani*";B11:B17)

Ovviamente Excel ci viene incontro con una specie di wizard per costruire la nostra formula, è sufficiente cliccare sul piccolo simbolo della funzione (fx) sopra le celle.

Creare una VM ed installarvi Graylog.

Clonarla e creare così altre due macchine Graylog. Modificare l’ip ed il nome macchina delle due nuove VM create.

Aprire /etc/graylog/server/node-id e modificare il node-id (basta cambiare l’ultimo numero)

Cominciamo con le repliche Mongod

Andare su  /etc/hosts di ogni macchina

127.0.0.1 localhost

127.0.1.1 nodograylog1  (questo valore ovviamente cambia per ogni macchina)

192.168.1.55 nodograylog1.replset.member

192.168.1.58 nodograylog2.replset.member

192.168.1.59 nodograylog3.replset.member

Andare su /etc/mongod.conf di ogni macchina

Modificare/aggiungere le seguenti voci

bindIp: 127.0.0.1, nodograylog1.replset.member  (questo valore ovviamente cambia per ogni macchina)

replication:

replSetName: "rs0"

Riavviare il servizio mongod systemctl restart mongod

Lanciare mongosh sulla macchina principale (nodograylog1) e lanciare i seguenti comandi

use graylog

db.movie.insert({"name":"tutorials point"})

db.createUser( { user: "graylog", pwd: scegliunapassword, roles: [ { role: "readWrite", db: "database" }] })

rs.initiate(

{_id: "rs0", members: [ { _id: 0, host: " nodograylog1.replset.member" },

{ _id: 1, host: " nodograylog2.replset.member" },

{ _id: 2, host: " nodograylog3replset.member" },

]

})

Lanciare il comando rs.conf(), dovrebbe venire riportata la nuova configurazione.

exit

Riavviare il servizio mongod systemctl restart mongod

Editare /etc/elasticsearch/elasticsearch.yml ed aggiungere/modificare i seguenti valori come nell’esempio per ogni macchina

cluster.name: elastic-cluster

node.name: 192.168.1.55 (questo valore ovviamente cambia per ogni macchina)

network.host: 192.168.1.55 (questo valore ovviamente cambia per ogni macchina)

http.port: 9200

discovery.seed_hosts: ["192.168.1.55", "192.168.1.58", "192.168.1.59"]

Riavviare il servizio elasticsearch systemctl restart elasticsearch

Una volta eseguite queste operazioni lanciare su uno dei tre nodi il seguente comando

curl -XGET 'http://192.168.1.55:9200/_cluster/health?pretty' 

e verificare che il numero di nodi sia 3

Editare /etc/graylog-server/server/server.conf

Il primo nodo, a differenza degli altri due, deve avere la seguente “definizione”

is_leader = true

Questi i parametri da editare per ogni macchina

http_bind_address = 192.168.1.55:9000 (questo valore ovviamente cambia per ogni macchina)

elasticsearch_hosts = http://192.168.1.55:9200,http://admin:passwordigraylog@192.168.1.58:9200,http://admin:passwordigraylog@192.168.1.59:9200

elasticsearch_discovery_enabled = true

mongodb_uri = mongodb://graylog: scegliunapassword@nodograylog1.replset.member:27017, nodograylog1.replset.member:27017, nodograylog2.replset.member:27017/graylog?replicaSet=rs0

A questo punto riavviare anche graylog server systemctl restart graylog-server

Accedere all’interfaccia web di graylog

Nelle configurazioni dei sidecar indicare sempre due indirizzi, es.:

hosts: ["192.168.1.59:5044", "192.168.1.55:5044"]

Fare la stessa cosa quando si imposta l’indirizzo del syslog server in altri tipi di apparati, indicandone due

I log non vengono visualizzati duplicati

Se uno dei tre nodi smette di funzionare, gli altri due continuano ad operare.

informatica

BUON NATALE

E FELICE ANNO NUOVO

Last but not least

Ringrazio Tech2 Srl per l’hosting.

 

Per chi è appassionato di informatica (ma non solo) consiglio un “giro” su questo sito, ricco di articoli tecnici.

Per qualsiasi informazione scrivete a info@nascio.it

Nascio