Durante il mio percorso professionale sono venuto a contatto con Zabbix, un software open-source per il monitoraggio dei dispositivi di rete, di computer e server, ma anche di servizi attivi e siti internet. A poco a poco ho iniziato ad interessarmi sempre più a questo strumento, ho seguito diversi webinar ufficiali, creato template ed eseguito svariate installazioni (l’ultima poche settimane fa). Nelle realtà aziendali è ormai fondamentale avere sotto controllo in tempo reale l’operatività dei propri sistemi, per poter prevenire piuttosto che curare.
=== PRIMI STEP ===
Se siete arrivati a questo articolo non necessariamente conoscete Zabbix, quindi vi rimando subito al sito del progetto: https://www.zabbix.com. A questo link potrete scaricare il software, documentarvi su come funziona, interagire con la community.
Partendo “terra terra”. Zabbix è composto da tre elementi fondamentali: il server (database + frontend), i proxy server, gli agent. Inutile dire che gli agent fanno da collettori di informazioni sugli endpoint e sparano i dati (se configurati in modalità attiva) al relativo proxy o direttamente al server. Un po’ come Graylog o altri tool di log management, in effetti, ma in questo caso non ci limitiamo ai soli eventi di sistema. In questo articolo ci focalizzeremo su server e proxy server, che potete scaricare dalla pagina download, e su come rendere sicure le vostre istanze in produzione.
Consiglio n. 0, consideriamola una premessa. Zabbix usa un bel po’ di risorse, quindi dovrete dimensionare il server sul quale farlo girare. Un proxy, il cui compito è solo prendere gli input e rigirarli in blocco al server, non avrà bisogno di prestazioni particolari (gira tranquillamente su un Raspberry Pi). Tuttavia avrete modo di notare che il server esegue un database che in breve tempo partirà da zero e tenderà a crescere esponenzialmente con l’aggiunta dei nuovi host da controllare, spesso saturando la macchina ospitante. Consiglio sempre di usare questo sito internet con il quale, in pochi step, è possibile stimare quanto spazio andrà ad occupare il db di Zabbix. Il mio ultimo deploy controlla circa 150 dispositivi facendo check ogni minuto su una decina abbondante di items, gira tutto tranquillamente su un Atom con 4Gb di RAM e 2Tb di disco fisso.
=== INSTALLAZIONE ===
Una volta scelto il server sul quale far girare l’istanza, installate una distro Linux affidabile (personalmente mi alterno tra CentOS e Ubuntu, ma sono gusti personali) e configurate una piattaforma web server. Alla classica LAMP preferisco sempre sostituire Apache con il più performante Nginx. Non usate le “Zabbix Appliance” già preconfezionate, meglio partire da zero; bene invece se sceglierete di usare i container Docker, se siete pratici, che consentono un sandboxing ed una più facile gestione delle varie componenti. A configurazione completata, prima ancora di proseguire con l’installazione di Zabbix come da istruzioni nella pagina download, un paio di considerazioni di sicurezza informatica:
FIREWALL
Ove possibile procuratevi un firewall hardware dal vostro fornitore, alla meno peggio andrà bene anche un UFW di Ubuntu o un FirewallD di CentOS.
Blindate tutto chiudendo tutte le porte TCP e UDP tranne lo stretto necessario (la porta SSH, le porte HTTP e HTTPS del server web, le porte 10050 e 10051 usate da Zabbix per connettersi agli agent). Se sceglierete di installare anche un piccolo server FTP, comodo per trasferire files verso la vostra istanza Zabbix, aprite la porta 21 solo quanto vi è strettamente necessaria.
USATE LET’S ENCRYPT
Inutile specificare come l’utilizzo del protocollo HTTPS renda sicuramente più sicuro il vostro server. Potete acquistare un certificato specifico per il vostro dominio oppure, come il sottoscritto, installare CertBot e lasciare che il sistema automaticamente ogni 3 mesi generi e rinnovi un certificato gratuito Let’s Encrypt.
Sintetizzare il processo in un post non sarebbe agevole, qui una rapida guida.
ANTIVIRUS E AGGIORNAMENTI
Potrà sembrare scontato, ma non lo è. Onde evitare di dover effettuare manutenzione manuale quotidianamente o ancor peggio di dover fare manutenzione straordinaria, pianificate l’installazione di aggiornamenti automatici tramite crontab.
Sempre tramite crontab, installate e configurate ClamAV per l’aggiornamento delle definizioni e la scansione periodica alla ricerca di virus e potenziali minacce. Qui un tutorial.
L’ACCESSO SSH
In quanto amministratori di sistema responsabili, userete solo l’accesso SSH per gestire il vostro nuovo server. Stando al rapporto del 31 maggio u.s. di INsecurity la porta SSH di default (22) è aperta su più di 20 milioni di server sparsi per il globo, basta una vulnerabilità non patchata o un file /etc/ssh/sshd_config mal configurato per ritrovarsi come membri di una botnet. Quindi:
- cambiate la porta di default del vostro demone SSH;
- create ed utilizzate un utente non-root con i permessi di sudoers, in modo da evitare accidentali rischi di sicurezza;
- consentite solo a quel singolo utente di connettersi tramite l’utilizzo di una whitelist (AllowUsers <username>);
- modificate il file di configurazione in modo tale da disconnettere le sessioni inattive (i parametri specifici sono ClientAliveInterval 300 e ClientAliveCountMax 0);
- preferite l’autenticazione basata su chiavi pubbliche/private GPG all’autenticazione con password, o in alternativa rinforzate la sicurezza delle credenziali di testo con altri metodi (l’accoppiata fail2ban e token OTP Google Authenticator, per esempio);
- disabilitate X11Forwarding, non userete nessuna interfaccia grafica;
- eseguite un audit finale, per esempio eseguendo questo script Python (segue screenshot).
Trovate ulteriori consigli in questo ottimo post su Medium.
=== TUNING ===
Oltre ai consigli generali forniti finora, c’è da tenere a mente le specifiche caratteristiche di Zabbix per eseguite tweaks ed ottimizzazioni mirate.
IL FILE DI CONFIGURAZIONE
Il primo step per migliorare la sicurezza e le prestazioni del sistema è modificare il file di configurazione zabbix_server.conf. Qui la documentazione completa. Particolarmente importanti:
- i parametri relativi al servizio Housekeeper, un processo (particolarmente oneroso) che periodicamente rimuove dati obsoleti ed informazioni rimosse manualmente dall’utente;
- tutti i parametri StartQualcosa (es. StartHTTPPollers o StartPingers), che servono a definire il numero di processi predisposti a determinate funzioni (es. nella mia installazione Zabbix esegue più di un centinaio di ping al secondo, pertanto il parametro StartPingers andrà aumentato in modo da non sovraccaricare un singolo processo di tutte le richieste simultaneamente);
- i parametri relativi alla cache ed ai logs, che chiaramente occuperanno risorse.
IL DATABASE
E’ possibile scegliere tra MySQL e PostgreSQL, ma parliamo di architetture di database veloci in entrambi i casi. In linea generale la regola per Zabbix è che usare InnoDB è meglio rispetto a MyISAM: migliora le prestazioni di circa un 1.5x, purtroppo con un conseguente aumento del carico di lavoro della CPU. L’SSD è un game-changer, visti i processi di lettura e scrittura, ed un necessario must-have se avete qualche centinaio di host.
Senza che io vi stia ad elencare in questa pagina tutti i parametri da ritoccare, vi rimando a questo articolo specifico di Zabbix. Vi consiglio inoltre caldamente di usare altri script esterni come mysqltuner e tuning-primer.
Un’altra pratica caldamente consigliata è quella di non avere un unico database gigante, ma col tempo di partizionare le tabelle. Ha particolarmente senso per le tabelle history_* e trends*, migliora significativamente le prestazioni. Prima o poi sarà un passaggio necessario, l’housekeeper tenderà ad impiegare tempi eterni per pulire il database. Vi rimando alla guida per MySQL ed a quella per PostgreSQL.
I TEMPLATE
Quando in Zabbix scegliete di monitorare un host, oltre al metodo da usare per recuperare i dati (SNMP, trapper, agent, etc.), dovrete assegnare un apposito template cucito su misura per il dispositivo. Può sembrare difficile da capire di primo impatto, ma è un concetto ovvio: monitorare uno switch Cisco è sicuramente diverso dal monitorare un sito internet, hanno variabili diverse da analizzare.
Se per un principiante può essere sensato usare i template già pronti di Zabbix Share, per un utente avanzato è fondamentale crearsi in autonomia i propri template in modo da evitare l’utilizzo di items inutili. Il tipo degli elementi, la frequenza dei check, il numero dei trigger che fanno scattare le notifiche e la complessità delle funzioni possono influenzare negativamente la propria istanza, soprattutto su grandi numeri:
- le espressioni min(), max() e avg() utilizzate nei template utilizzano più risorse delle espressioni last() e nodata(), ove possibile è sempre bene utilizzare queste ultime;
- i tipi di dati numerici sono molto più facilmente processabili e digeribili da Zabbix, rispetto a testi e stringhe che sarebbe meglio evitare;
- settate con un minimo di buonsenso gli storici dei dati che vi interessano, non ha senso tenere cronologie di un anno per informazioni che dopo un paio di settimane sono già obsolete ed inutili a fini aziendali.
L’IMPORTANZA DEI PROXY
Zabbix può operare in modalità polling e quindi andarsi a raccogliere i dati da un host (es. SNMP, agent passivi, ping e chiamate HTTP) oppure in modalità trapping (es. agent attivi). Inutile dire che per alleggerire il carico di lavoro del server sarebbe bene usare quest’ultima modalità, e quindi fare in modo che siano i dispositivi a trasmettere dati al nostro server.
L’utilizzo di uno o più proxy è funzionale, in tal senso. Il lavoro sporco di collezionare dati dagli agent sarà fatto dal proxy, convertendo di fatto il lavoro del server da attivo a passivo. C’è inoltre da considerare che i proxy hanno anche funzione di caching, quindi qualora il server non dovesse essere disponibile continueranno a processare dati per poi ritrasmetterli quando possibile.
LA DISTRIBUZIONE DEL CARICO
Non dovrebbe rendersi necessario se non in installazioni particolarmente significative in termini di host da monitorare. E’ bene sapere che Zabbix si può scomporre nelle sue componenti (server, front-end web e database) in modo da ripartirli su server diversi. Questo consente di distribuire il carico di risorse, ma soprattutto di adeguarlo a strutture aziendali già esistenti.
=== CONCLUSIONI ===
Se siete giunti fino alla fine del post, al di là del lato prettamente tecnico, forse avete intuito le potenzialità di Zabbix e l’importanza di monitorare la propria rete aziendale. Resto a vostra disposizione per qualsiasi dubbio o domanda in merito alle possibili applicazioni del software.
Se non vi siete limitati a leggere, ma avete spostato il tab del browser sul secondo monitor testando “passo passo” i vari consigli che ho qui riportato, avete reso involontariamente felice un amministratore di sistema. Lasciatemi un commento e raccontatemi la vostra esperienza con Zabbix!
IT Manager, System Administrator, Sociologo, Politico a tempo perso. Vicentino, classe 1991.
Questo è il mio blog personale, nel quale cerco di proporre analisi e ragionamenti di attualità nei temi in cui sono più preparato. Scopri di più nel mio curriculum vitae, o mettiti in contatto con me!