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.
