Zabbix nelle versioni più recenti ha introdotto alcune novità in tema di sicurezza. In particolare la possibilità di criptare le comunicazioni tra il server da un lato e i proxy e/o gli agenti dall’altro e la possibilità di salvare le password su di un vault esterno (per non salvarle in chiaro). Qua ci occuperemo del primo aspetto, mentre il secondo sarà trattato in un prossimo articolo.
Capita sovente che il server Zabbix e il device monitorato si trovino in due luoghi diversi e si scambino i dati attraverso Internet. Se nei primi tempi in cui si parlava di monitoraggio questo non era un problema, con il passare del tempo si è rivelato sempre più un aspetto critico. L’aumento della mole di dati scambiati e la possibilità che al suo interno si trovino dati interessanti per un eventuale attaccante hanno reso critico questo aspetto.
Dato che spesso non si può ricorrere a una connessione criptata di tipo VPN, occorre rendere sicuro lo scambio di dati tra il server Zabbix e i proxy/agenti.
A questo scopo Zabbix ha introdotto da qualche release la possibilità di cifrare attraverso una Pre Shared Key o un certificato di tipo RSA questo scambio di informazioni.
Vediamo come procedere. Diciamo innanzitutto che non è necessario per questo scopo ricorrere a certificati emessi da autorità di certificazione pubbliche, dato che lo scambio avviene all’interno di un ambiente chiuso e confinato (Zabbix e i suoi componenti sparsi). Per evitare problemi con l’accesso ai certificati, gli stessi saranno generati sul server Zabbix utilizzando l’utente Zabbix e posizionati nella sua HOME. Di default l’utente zabbix ha la shell settata su /sbin/nologin e non ha la sua HOME, per cui occorrerà provvedere a queste necessità.
Da root editiamo il file /etc/passwd e nella riga dov’è definito l’utente Zabbix sostituiamo /sbin/nologin con /bin/bash. Verifichiamo inoltre il valore della HOME (se la vostra versione di Zabbix non è troppo vecchia dovreste trovare questo valore impostato a /var/lib/zabbix che è il valore corretto). Salvate e chiudete il file.
Creiamo la HOME di zabbix:
mkdir -p /var/lib/zabbix
poi assegniamole i diritti corretti:
chown -R zabbix:zabbix /var/lib/zabbix
Ora possiamo impersonare l’utente zabbix e procedere con la creazione dei certificati:
su - zabbix
Per prima cosa provvediamo a creare la nostra Certification Authority in una directory appositamente creata:
$ mkdir zabbix_ca $ chmod 700 zabbix_ca $ cd zabbix_ca
Generiamo la chiave privata della CA:
$ openssl genrsa -aes256 -out zabbix_ca.key 4096
Viene chiesta una password. Inserirne una e annotarla
Ora generiamo il certificato della CA:
$ openssl req -x509 -new -key zabbix_ca.key -sha256 -days 3560 -out zabbix_ca.crt
(inserire la password creata la punto precedente quando richiesto e valorizzare i valori richiesti).
Creata la CA passiamo a creare il certificato per lo Zabbix Server:
$ openssl genrsa -out zabbix_server.key 2048 $ openssl req -new -key zabbix_server.key -out zabbix_server.csr
Anche in questo caso rispondere alle domande, poi generare il certificato, inserendo al password quando richiesto:
$ openssl x509 -req -in zabbix_server.csr -CA zabbix_ca.crt -CAkey zabbix_ca.key -CAcreateserial -out zabbix_server.crt -days 1460 -sha256
Ripetiamo la procedura per il certificato dell’agente:
$ openssl genrsa -out zabbix_agent.key 2048 $ openssl req -new -key zabbix_agent.key -out zabbix_agent.csr
Come sempre rispondiamo alla domanda e generiamo il certificato, inserendo al password quando richiesto:
$ openssl x509 -req -in zabbix_agent.csr -CA zabbix_ca.crt -CAkey zabbix_ca.key -CAcreateserial -out zabbix_agent.crt -days 1460 -sha256
Se avete anche uno o più proxy ripetete quanto fatto per l’agente cambiando adeguatamente i nomi.
Ora che abbiamo i certificati occorre configurare i componenti di Zabbix in modo da usarli, iniziando dall’agente. Anche in questo caso metteremo i certificati nella HOME dell’utente zabbix, che procederemo a creare come già visto in precedenza (qua non serve modificare il file /etc/passwd, possiamo fare tutto con l’utente root):
mkdir -p /var/lib/zabbix
Creiamo una sottodirectory per i certificati:
mkdir -p /var/lib/zabbix/zabbix_agent_certs
Dal server zabbix copiamo (nel modo che preferite) in questa directory i files zabbix_ca.crt, zabbix_ca.key, zabbix_agent.crt. Sistemiamo i diritti:
chown -R zabbix:zabbix /var/lib/zabbix
Ora editiamo il file /etc/zabbix/zabbix/agentd.conf inserendo questi valori:
TLSAccept=cert TLSConnect=cert TLSCAFile=/var/lib/zabbix/zabbix_agent_certs/zabbix_ca.crt TLSCertFile=/var/lib/zabbix/zabbix_agent_certs/zabbix_agent.crt TLSKeyFile=/var/lib/zabbix/zabbix_agent_certs/zabbix_agent.key
Infine riavviamo l’agente
systemctl restart zabbix-agent
Nel caso stiate configurando un proxy la procedura è esattamente la stessa, con solo i nomi cambiati.
Se doveste riscontrare degli errori potete ignorarli: è solo perché il server non è ancora configurato. Procediamo a farlo, editando il file /etc/zabbix/zabbix_server.conf inserendo le seguenti righe:
TLSCAFile=/var/lib/zabbix/zabbix_server_certs/zabbix_ca.crt TLSCertFile=/var/lib/zabbix/zabbix_server_certs/zabbix_server.crt TLSKeyFile=/var/lib/zabbix/zabbix_server_certs/zabbix_server.key
Infine riavviamo anche il server zabbix:
systemctl restart zabbix-server
Da ultimo occorre andare nell’interfaccia grafica di zabbix e impostare correttamente la connessione criptata.
Controllate i log ed eventualmente riavviate ancora una volta l’agente o il proxy. Se tutto è corretto nei log non dovrete trovare scritto nulla (come se la criptazione non ci fosse) e nella GUI trovare un bollino verde che conferma l’attivazione della criptazione.