Checkmk
to checkmk.com

Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introduzione

linux

A partire dalla versione Checkmk 2.1.0, il nuovo agente Checkmk con l'Agent Controller supporta la modalità pull registrata, criptata TLS e compressa. A tal fine, tuttavia, l'Agent Controller deve essere avviato come processo in background(demone) dal sistema init dell'host su cui deve essere installato. Attualmente, solo systemd sulla piattaforma x86_64 è supportato a questo proposito e per l'installazione è necessario il gestore degli pacchetti deb o rpm.

Se tutti i seguenti requisiti sono soddisfatti...

  • Linux utilizza systemd dalla versione 219 o successiva come sistema di init.

  • L'architettura del processore è x86_64

  • I pacchetti sono gestiti come deb oppure rpm

... puoi scoprire come installare, configurare ed estendere l'agente con l'Agent Controller nell'articolo Monitoraggio di Linux.

Mentre la maggior parte dei server e dei desktop Linux soddisfa questi requisiti, i sistemi aggiornati da anni, le macchine virtuali più vecchie con istanze i686, i container distroless o i sistemi Linux embedded non sono elementi marginali, ma componenti normali di molti sistemi per i quali è necessario il monitoraggio. Grazie alla struttura modulare di Checkmk, puoi ancora includere questi host Linux nel monitoraggio.

Poiché il trasporto criptato dei dati dell'agente tramite Agent Controller è fuori questione, in questo articolo spieghiamo come effettuare il trasporto non criptato tramite un superserver internet o la configurazione di SSH come tunnel criptato.

Anche la modalità push dipende dall'Agent Controller e quindi non è disponibile nella modalità legacy. Se vuoi includere nel monitoraggio un host che non può essere raggiunto dal server Checkmk in modalità legacy, dovrai trovare un'altra soluzione. Puoi usare programmi datasource per connetterti dall'host monitorato e usare questo per trasmettere l'output dell'agente al server Checkmk.

I problemi per i quali la modalità agente non ha importanza sono riportati nell'articolo sull'agente Linux con Agent Controller:

2. Installazione

A seconda della gestione dei pacchetti, ci sono tre opzioni di installazione tra cui scegliere: pacchetti DEB o RPM per Debian, Ubuntu, Red Hat Enterprise Linux (RHEL), SLES (e loro derivati), un archivio TGZ per tutte le altre distribuzioni (edizioni commerciali) o anche uno shell script (Checkmk Raw) per tutte le altre distribuzioni.

2.1. Installazione dai pacchetti

Una descrizione esaustiva dell'installazione dai pacchetti deb o rpm è contenuta nell'articolo sul Monitoraggio di Linux, quindi in questa sede ci limiteremo a illustrare la procedura in modo sintetico.

In Checkmk Raw, puoi trovare i pacchetti Linux dell'agente tramite Setup > Agents > Linux. Nelle edizioni commerciali, per prima cosa accedi all'Agent bakery nel menu Setup tramite Agents > Windows, Linux, Solaris, AIX, dove troverai i pacchetti baked. Da lì, la voce di menu Related > Linux, Solaris, AIX files ti porterà all'elenco dei file dell'agente.

Puoi scaricare questi file tramite il browser o utilizzare wget o curl per scaricarli direttamente nell'host nel monitoraggio:

root@linux# wget http://mycmkserver/mysite/check_mk/agents/check-mk-agent-2.3.0p31-1.noarch.rpm

Su RHEL, SLES e distribuzioni correlate, il pacchetto RPM viene installato come root con il comando rpm -U:

root@linux# rpm -U check-mk-agent-2.3.0p31-1.noarch.rpm

A proposito, l'opzione -U sta per "aggiornamento" ma può anche eseguire correttamente un'installazione iniziale.

L'installazione del pacchetto DEB su Debian, Ubuntu o distribuzioni correlate avviene come root con il comando dpkg -i:

root@linux# dpkg -i check-mk-agent_2.3.0p31-1_all.deb
(Reading database ... 739920 files and directories currently installed.)
Preparing to unpack .../check-mk-agent_2.3.0p31-1_all.deb ...
Unpacking check-mk-agent (2.3.0p31-1) ...
Setting up check-mk-agent (2.3.0p31-1) ...

2.2. Installazione dall'archivio TGZ

Per un'installazione comoda e indipendente dalla distribuzione, è necessario l'agente Linux nel formato dell'archivio TGZ ("Tarball"), che puoi scaricare dalle edizioni commerciali nel menu di configurazione tramite Agents > Windows, Linux, Solaris, AIX. L'archivio TGZ contiene la struttura completa delle directory dell'agente Linux da scompattare nella directory principale dell'host monitorato.

agent linux legacy agents

Il parametro -C ("cambia directory") è essenziale durante la decompressione per assicurarsi che tutti i percorsi dei file siano corretti. Utilizziamo anche --no-overwrite-dir per non modificare i permessi delle directory già esistenti:

root@linux# tar -C / --no-overwrite-dir -xvf /tmp/check-mk-agent_2.3.0p31.tar.gz

Se hai fatto tutto correttamente, lo script agente dovrebbe essere eseguibile come comando e produrre il tipico output. | head tronca tutto ciò che segue l'undicesima riga di output:

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.3.0p31
AgentOS: linux
Hostname: mycmkserver
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>

Se qui viene stampato un numero di versione inferiore a 2.2.0, probabilmente hai ancora una versione precedente dello script agente installato come /usr/local/bin/check_mk_agent. Sposta questo vecchio script o rinominalo, ad esempio aggiungendo .bak al nome del file.

2.3. Installazione manuale dello script agente

L'installazione manuale dello script agente è raramente necessaria, ma non è nemmeno molto difficile. In questo tipo di installazione, all'inizio viene installato solo lo script agente, ma non viene ancora eseguita la configurazione dell'accesso. A questo scopo è necessario il box Agents dalla pagina dei file agente. Lì troverai il file check_mk_agent.linux:

List of agent scripts for download

Carica questo file sul file system di destinazione e copialo in una directory eseguibile per root./usr/local/bin/ è una buona scelta, poiché si trova nel percorso di ricerca ed è destinato alle estensioni personalizzate. In alternativa, puoi utilizzare /usr/bin o una sottodirectory di /opt. Noi utilizziamo /usr/bin in modo che tutti i test corrispondano agli altri metodi di installazione. Puoi anche eseguire l'installazione direttamente con wget se disponibile:

root@linux# cd /usr/bin
root@linux# wget http://mycmkserver/mysite/check_mk/agents/check_mk_agent.linux
root@linux# mv check_mk_agent.linux check_mk_agent
root@linux# chmod 755 check_mk_agent

Non dimenticare gli ultimi due comandi: questi rimuoveranno l'estensione .linux e renderanno il file eseguibile. Ora l'agente dovrebbe essere eseguibile come comando e produrre il suo output tipico. | head tronca tutto ciò che segue la decima riga di output:

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.3.0p31
AgentOS: linux
Hostname: mycmkserver
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>

Se vuoi configurare o estendere l'agente, dovrai creare tu stesso le directory necessarie. La posizione delle tre directory obbligatorie è codificata nell'agente in variabili che iniziano con MK_ e sono fornite ai plug-in dell'agente tramite l'ambiente di sistema:

root@linux# grep 'export MK_' check_mk_agent
export MK_LIBDIR="/usr/lib/check_mk_agent"
export MK_CONFDIR="/etc/check_mk"
export MK_VARDIR="/var/lib/check_mk_agent"

Devi creare queste tre directory (con i permessi predefiniti di 755 e root come proprietario):

root@linux# mkdir /usr/lib/check_mk_agent /etc/check_mk /var/lib/check_mk_agent

Se vuoi utilizzare percorsi diversi, modifica semplicemente /usr/bin/check_mk_agent.

3. Controllare lo stato dopo l'installazione

Dopo l'installazione, controlla se un servizio è già impostato per ascoltare sulla porta TCP 6556. In particolare, quando l'installazione avviene tramite il gestore di pacchetti, viene utilizzato un programma xinetd o systemd (in modalità superserver) per fornire l'output dell'agente in chiaro sulla porta TCP 6556.

Utilizziamo il comando ss. Se questo comando non è disponibile (su distribuzioni più vecchie), uno dei programmi netstat, sockstat o lsof è disponibile come alternativa.

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))

Se non c'è output, la porta 6556 non è ancora aperta. Se viene stampata una riga, allora la porta 6556 è aperta. In questo caso siamo interessati al nome del programma tra parentesi, in questo caso xinetd. Ricorda il nome di questo programma, perché ti servirà nei processi successivi, indipendentemente dal metodo di accesso selezionato.

Se dopo l'installazione da un pacchetto DEB o RPM il nome del programma cmk-agent-ctl viene stampato qui, puoi rallegrarti: il tuo Linux (in particolare la versione di systemd utilizzata) è abbastanza aggiornato da poter utilizzare l'Agent Controller, come descritto nell'articolo Monitoraggio di Linux, e puoi procedere alla registrazione dell'agente.

4. Selezione del metodo di accesso

A questo punto devi prendere una decisione:

  • Vuoi consentire una connessione facile da configurare e non criptata?

  • Oppure la maggiore sicurezza offerta dalla crittografia vale un certo sforzo in più?

Gli aspetti rilevanti sono le informazioni a cui un potenziale aggressore ha accesso e l'entità del suo sforzo. Ad esempio, la tabella dei processi che viene sempre trasmessa può già fornire indizi preziosi, mentre l'elenco degli aggiornamenti software non ancora effettuati rende possibili attacchi mirati.

Di regola, quindi, consigliamo di trasferire i dati in modo criptato tramite un tunnel SSH.

Important

Quando si chiama lo script agente direttamente in una shell, possono essere disponibili altre variabili d'ambiente rispetto a quando si chiama tramite (x)inetd, Agent Controller o in una sessione SSH senza un terminale di controllo. In caso di problemi con l'uno o l'altro metodo di esecuzione, potrebbe essere necessario garantire la presenza di alcune variabili d'ambiente. Il metodo da utilizzare a questo scopo dipende troppo da ogni singolo caso per poter fare delle raccomandazioni in questo momento.

5. Non criptato: Impostazione di (x)inetd

Se decidi che il trasferimento di dati in chiaro è un rischio accettabile, il passo successivo è quello di configurare un superserver internet.Se il test con ss ha mostrato che xinetd, inetd o systemd sono già in ascolto sulla porta TCP 6556, passa al test di connessione.

In caso contrario, usa il comando ps per verificare se inetd è già attivo:

root@linux# ps ax | grep inetd
 1913 ?        Ss     0:00 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6

Puoi identificare dal processo in esecuzione se si tratta del più moderno xinetd o di uno degli altri superserver internet (GNU-Inetutils, OpenBSD-Inetd, Busybox-Inetd). Se non c'è nessun processo attivo, installa un xinetd tramite la gestione dei pacchetti della tua distribuzione. Se è attivo un inetd "classico", di solito ha senso configurarlo e usarlo invece di passare a xinetd.

5.1. Configurare xinetd

Per configurare un xinetd esistente che utilizza la directory /etc/xinetd.d/ per la configurazione, sia l'archivio TGZ che i pacchetti DEB e RPM sono dotati di uno script che automatizza i due passaggi necessari: prima installa la configurazione e poi fa in modo che xinetd rilegga le impostazioni modificate. Devi chiamare lo script con i percorsi completi dei file:

root@linux# /var/lib/cmk-agent/scripts/super-server/1_xinetd/setup deploy
root@linux# /var/lib/cmk-agent/scripts/super-server/1_xinetd/setup trigger

Se installi lo script agente manualmente, crea il file di configurazione /etc/xinetd.d/check-mk-agent con l'editor. Il contenuto è sufficiente:

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/local/bin/check_mk_agent
        # only_from    = 10.118.14.5 10.118.14.37
        disable        = no
}

Qui abbiamo aggiunto una riga (commentata) che limita l'accesso a due server Checkmk. Ulteriori opzioni di configurazione possono essere visualizzate consultando il file ~/share/check_mk/agents/scripts/super-server/1_xinetd/check-mk-agent sul tuo server Checkmk.

Se il tuo xinetd utilizza il vecchio schema di configurazione con un solo grande /etc/xinetd.conf, trasferisci la configurazione di esempio da /etc/check_mk/xinetd-service-template.cfg a /etc/xinetd.conf.

Una volta completata la configurazione di xinetd, riavvialo:

root@linux# service xinetd restart

Ora sei pronto per il test di connessione.

5.2. Configurazione di un altro inetd

Per prima cosa, controlla se il tuo /etc/services contiene già una voce per la porta 6556:

root@linux# grep 6556/ /etc/services

Se così non fosse, Checkmk deve essere registrato come servizio. Per farlo, aggiungi la seguente riga. La notazione è identica a quella della tabella IANA con un solo trattino:

/etc/servizi
checkmk-agent        6556/tcp   #Checkmk monitoring agent

Il formato del file di configurazione di /etc/inetd.conf varia da una variante all'altra. Fai riferimento ai commenti nel file di configurazione e alla pagina del manuale (man 5 inetd.conf) per trovare il formato adatto al tuo inetd. Segue la configurazione corrispondente a openbsd-inetd con due righe per il supporto IPv4 e IPv6. Anche in questo caso, è importante notare la notazione corretta:

/etc/inetd.conf
checkmk-agent stream tcp  nowait root /usr/bin/check_mk_agent
checkmk-agent stream tcp6 nowait root /usr/bin/check_mk_agent

Dopo aver modificato il file di configurazione, riavvia inetd, ad es. con:

root@linux# /etc/init.d/inetd restart

A seconda del sistema di init utilizzato e del superserver installato, questo comando potrebbe essere diverso.

5.3. Test di connessione

Per prima cosa verifica se xinetd o inetd possono essere (ri)avviati:

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))

Ora puoi connetterti con telnet o nc (netcat) sulla porta TCP 6556 - prima dall'host stesso, poi dal server Checkmk:

OMD[mysite]:~$ nc 12.34.56.78 6556
<<<check_mk>>>
Version: 2.3.0p31
AgentOS: linux
Hostname: myhost123
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local

Se ricevi una notifica di connessione negata anche se (x)inetd è attivo, controlla le impostazioni del firewall.

6. Crittografato: Utilizzo di un tunnel SSH

La configurazione del tunnel SSH si esegue con i seguenti passaggi:

  1. Crea una coppia di chiavi SSH specifica per questo scopo.

  2. Sui sistemi di destinazione, autorizza l'accesso all'agente utilizzando questa chiave.

  3. Configura il server Checkmk per utilizzare SSH invece della connessione TCP sulla porta 6556.

  4. Se disponibile: Disabilita l'accesso tramite (x)inetd.

Ecco la procedura completa, passo dopo passo, con tutti i dettagli necessari:

6.1. Creare una coppia di chiavi SSH

SSH funziona con l'autenticazione a chiave pubblica. Per farlo, devi prima generare una coppia di chiavi abbinate, di cui una pubblica e una privata. Quando selezioni l'algoritmo puoi scegliere tra rsa, ecdsa o ed25519. Nell'esempio che segue, utilizza il comando ssh-keygen -t ed25519 come utente dell'istanza:

OMD[mysite]:~$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/omd/sites/mysite/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /omd/sites/mysite/.ssh/id_ed25519.
Your public key has been saved in /omd/sites/mysite/.ssh/id_ed25519.pub.
The key fingerprint is:
cc:87:34:d2:ed:87:ed:f7:1b:ec:58:1f:7c:23:00:e2 mysite@mycmkserver
The key's randomart image is:
+--[ED25519  256--+
|                 |
|       . .       |
|      ..+..      |
|      .=.+.o     |
|       ES +.o    |
|         . o. o  |
|            ...B.|
|             .=.*|
|             . o+|
+-----------------+

Lascia il nome del file vuoto per utilizzare il nome del file suggerito. Naturalmente puoi specificare un percorso diverso, ad esempio se vuoi lavorare con chiavi separate per singoli host.

Importante: Non specificare una passphrase: criptare il file con la chiave segreta non servirebbe a nulla, dopotutto non vuoi certo dover inserire la passphrase ogni volta che avvii il server Checkmk...

Il risultato sono due file nella directory .ssh:

OMD[mysite]:~$ ll .ssh
total 8
-rw------- 1 mysite mysite 1679 Feb 20 14:18 id_ed25519
-rw-r--r-- 1 mysite mysite  398 Feb 20 14:18 id_ed25519.pub

La chiave privata si chiama id_ed25519 ed è leggibile solo dall'utente dell'istanza (-rw-------) - e questo è un bene! La chiave pubblica id_ed25519.pub ha un aspetto simile a questo:

OMD[mysite]:~$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver

6.2. Consentire l'accesso via SSH

Il passo successivo deve essere eseguito su (ciascuno) degli host Linux monitorati tramite SSH. Accedi come root e crea la sottodirectory .ssh nella sua directory home (/root), se non esiste già. Con il seguente comando i privilegi di accesso saranno impostati correttamente a 700:

root@linux# mkdir -m 700 /root/.ssh

Ora apri il file authorized_keys con un editor di testo (basato su console) di tua scelta. Se questo file non esiste già, l'editor lo creerà automaticamente:

root@linux# vim /root/.ssh/authorized_keys

Copia il contenuto delle chiavi pubbliche in questo file, ad esempio con il mouse e copia e incolla. Sii preciso: ogni spazio conta. Assicurati anche che non ci siano mai due spazi in una riga. E: Se il file esiste già, è sufficiente aggiungere una nuova riga in basso.

6.3. Limitare l'accesso all'esecuzione dell'agente

La chiave SSH deve essere utilizzata esclusivamente per l'esecuzione dell'agente. SSH offre qualcosa di simile con il nome di restrizione del comando. Per farlo, inserisci il testo command="/usr/bin/check_mk_agent" all'inizio della riga che hai appena creato, separato dal resto da un singolo spazio. Avrà un aspetto simile a questo:

/root/.ssh/authorized_keys
command="/usr/bin/check_mk_agent" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver

Salva il file e controlla i permessi: solo il proprietario può avere i permessi di scrittura su questo file.

root@linux# chmod 600 /root/.ssh/authorized_keys
root@linux# ll /root/.ssh/authorized_keys
-rw------- 1 root root 1304 Feb 20 14:36 authorized_keys

Successivamente, verifica l'accesso all'agente con il comando ssh:

OMD[mysite]:~$ ssh root@myhost23
The authenticity of host 'myhost23 (10.11.12.13)' can't be established.
ECDSA key fingerprint is SHA256:lWgVK+LtsMgjHUbdsA1FK12PdmVQGqaEY4TE8TEps3w.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
<<<check_mk>>>
Version: 2.3.0p31
AgentOS: linux
Hostname: myhost123
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>

La prima volta dovrai confermare l'impronta digitale della chiave digitando yes. Tutti gli altri accessi possono essere effettuati senza l'interazione dell'utente, compreso il polling automatico dello script dell'agente Checkmk ogni minuto.

Se non funziona, controlla:

  • Il server SSH è installato sul sistema di destinazione?

  • I file e le directory specificate hanno i permessi corretti?

  • Hai digitato correttamente la sintassi di authorized_keys?

  • Hai inserito la chiave pubblica corretta?

  • Hai effettuato il log in come utente corretto (root@…​)?

  • Hai ricordato l'indirizzo command="…​"?

Con sistemi di destinazione molto vecchi, è anche possibile che le chiavi con le curve ellittiche (ed25519 e ecdsa) siano sconosciute. In questo caso, genera una chiave RSA aggiuntiva e inseriscila anche in authorized_keys. SSH utilizzerà quindi automaticamente la chiave più forte conosciuta per la connessione.

6.4. Cambiare l'accesso da Checkmk a SSH

Il sistema di destinazione è stato preparato. Ora manca solo la configurazione di Checkmk stesso, che si effettua tramite il set di regole Setup > Agents > Other integrations> Custom integrations > Individual program call instead of agent access. Crea qui una regola per gli host interessati e inserisci ssh -T root@$HOSTNAME$ o ssh -C -T root@$HOSTNAME$ (per una compressione aggiuntiva dei dati dell'agente) come comando:

rule for calling the agent via SSH.
La chiamata dell'agente tramite SSH viene eseguita tramite la regola

Puoi eseguire il test di connessione nella GUI alla voce Setup > Hosts > Properties of host > Test connection to host con il pulsante Run tests. Se il test fallisce con un timeout o un accesso negato, controlla se hai utilizzato il nome host con la stessa ortografia utilizzata per il test da linea di comando: OpenSSH distingue tra nome host breve, FQDN e indirizzo IP. In alternativa, puoi accedere all'host utilizzando il suo indirizzo IP: in questo caso devi utilizzare la macro $HOSTADDRESS$ che viene sostituita dall'indirizzo IP cache (di Checkmk) dell'host.

Dopo aver salvato ed eseguito l'Attivazione delle modifiche, l'host viene aggiunto al monitoraggio. Nel monitoraggio il servizio Check-MK Agent viene ora visualizzato con la nota "Trasporto via SSH". Per ulteriori diagnosi è possibile utilizzare i comandi cmk -D e cmk -d, spiegati nell'articolo sulla linea di comando.

6.5. Chiavi SSH multiple

Puoi anche lavorare con più di una chiave SSH. Posiziona le chiavi in una qualsiasi directory. Nella regola Individual program call instead of agent access devi poi specificare il percorso della rispettiva chiave privata con l'opzione -i. È meglio utilizzare $OMD_ROOT in sostituzione del percorso della directory del sito (/omd/sites/mysite). Il comando completo potrebbe essere ssh -i $OMD_ROOT/.ssh/my_key -T root@$HOSTADDRESS$ e quindi la configurazione sarebbe eseguibile anche in un sito con un nome diverso:

Rule to invoke the agent with multiple SSH keys.
Per utilizzare più chiavi SSH, il comando di cui sopra deve essere esteso.

Questo ti permette di utilizzare chiavi SSH diverse per diversi gruppi di host utilizzando più regole diverse.

6.6. Disabilitare l'accesso alla porta 6556

Per evitare di fornire a potenziali aggressori dati in chiaro nonostante i tunnel SSH, devi disabilitare qualsiasi accesso alla porta 6556 che potrebbe essere ancora disponibile nel port monitoring dell'host. Se il comando ss -tulpn | grep 6556 di cui sopra non ha trovato alcun processo in ascolto sulla porta TCP 6556, hai finito di configurare il tunnel SSH. Se viene emessa una riga, il processo che è stato trovato deve essere disabilitato in modo permanente.

xinetd

Per chiudere la porta fornita da xinetd, disabilita il servizio xinetd di Checkmk impostando il valore di disabled su yes. Non cancellare l'intero file di configurazione, altrimenti potrebbe ricomparire in alcune costellazioni durante gli aggiornamenti dell'agente!

La disattivazione avviene nel file /etc/xinetd.d/check-mk-agent (nei sistemi con installazioni dell'agente più vecchie, il file potrebbe chiamarsi /etc/xinetd.d/check_mk):

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/bin/check_mk_agent
        disable        = yes
}

Quindi riavvia xinetd:

root@linux# /etc/init.d/xinetd restart

oppure

root@linux# service xinetd restart

Ora verifica che l'accesso attraverso la porta 6556 non sia più possibile.

inetd

Se è inetd a controllare l'accesso alla porta 6556, modifica il file di configurazione /etc/inetd.conf. Cerca la riga corrispondente:

root@linux# grep -n check.*mk /etc/inetd.conf

Commenta questa riga con l'hash # e poi riavvia il processo.

root@linux# /etc/init.d/inetd restart

Quindi, utilizzando telnet o nc verifica se l'accesso è ancora possibile.

systemd

Se la ricerca ha mostrato che systemd ha la porta TCP 6556 aperta, ora devi determinare il nome esatto della configurazione che fornisce il socket:

root@linux# systemctl list-units | grep 'check.*mk.*socket'
  check-mk-agent.socket		loaded active listening CheckMK Agent Socket

Ora puoi prima arrestare il servizio e poi disabilitarlo:

root@linux# systemctl stop check-mk-agent.socket
root@linux# systemctl disable check-mk-agent.socket
Removed /etc/systemd/system/sockets.target.wants/check-mk-agent.socket.

Ora l'accesso alla porta 6556 non dovrebbe essere possibile.

6.7. Verifica del successo

In ogni caso, non dimenticare di effettuare un test finale: ora non dovrebbe essere più possibile connettersi alla porta 6556:

OMD[mysite]:~$ telnet myhost123 6556
Trying 10.118.15.23...
telnet: Unable to connect to remote host: Connection refused

7. Ulteriori opzioni di sicurezza

Descriviamo le opzioni di sicurezza qui presentate principalmente per motivi di compatibilità con le installazioni esistenti. In molti casi, la trasmissione dell'output dell'agente tramite SSH soddisferà i requisiti di restrizione dell'accesso e di sicurezza delle intercettazioni. Tuttavia, in singoli casi può avere senso utilizzare i meccanismi di protezione presentati di seguito o utilizzarli quando non è possibile utilizzare il tunnel SSH.

Lo script dell'agente Checkmk può crittografare i propri dati senza bisogno di strumenti aggiuntivi. Questa crittografia simmetrica integrata non sostituisce il controllo degli accessi. Tuttavia, poiché un aggressore non può inviare alcun comando e non può fare nulla con i dati di output crittografati, l'obiettivo della sicurezza delle intercettazioni è di solito sufficientemente raggiunto.

Naturalmente, la crittografia necessita di una configurazione adeguata sia sull'agente che sul server Checkmk, che può essere creata manualmente in Checkmk Raw o con l'Agent bakery nelle edizioni commerciali.

Nota: poiché la crittografia simmetrica utilizza la stessa chiave sia per la crittografia che per la decrittografia, un pacchetto di aggiornamenti creato dall'agent bakery che include la chiave di crittografia potrebbe essere intercettato da un malintenzionato che potrebbe decifrare il contenuto delle comunicazioni.

7.1. Implementazione della crittografia integrata

Attivare la crittografia

Il primo passo da fare è andare nel menu Setup e creare una regola nel set di regole Setup > Agents > Access to agents > Checkmk agent > Symmetric encryption (Linux, Windows). Questa regola deve essere applicata a tutti gli host per i quali si desidera utilizzare la crittografia. Gli host SNMP ignorano questa impostazione, quindi non è necessario escluderli esplicitamente.

Rule to enable built-in encryption.
La crittografia integrata viene attivata da una regola

Con l'opzione Configure shared secret and apply symmetric encryption, specifichi che l'agente invia i dati in forma criptata. La crittografia funziona con una password condivisa(segreto condiviso) che specifichi qui e che deve essere archiviata in chiaro sia sul server Checkmk che sull'agente. Se lo desideri, seleziona il simbolo per far sì che Checkmk generi una password casuale per te e tieni questa password pronta per il secondo passo, la configurazione dell'agente.

Configurazione dell'agente

Sull'host dell'agente, crea il file /etc/check_mk/encryption.cfg con il seguente contenuto:

/etc/check_mk/encryption.cfg
ENCRYPTED=yes
PASSPHRASE='MyPassword'

Naturalmente puoi specificare la tua password all'indirizzo PASSPHRASE e devi assolutamente proteggere il file .cfg dall'accesso in lettura da parte di altri utenti:

root@linux# chmod 600 /etc/check_mk/encryption.cfg

Configurazione del server Checkmk

Nel terzo e ultimo passo, utilizza la regola Enforce agent data encryption per specificare come il server Checkmk deve gestire i dati non criptati.

Hai a disposizione le seguenti opzioni:

  • Accept all incoming data, including unencrypted: I dati provenienti da agenti con e senza crittografia saranno accettati.

  • Accept all types of encryption: Verranno accettati solo i dati crittografati, sia tramite TLS che tramite crittografia simmetrica, come attivato nel primo passaggio.

  • Accept TLS encrypted connections only: Verranno accettati solo i dati crittografati tramite TLS.

Rule to define which agent data the Checkmk server accepts.
Con questa selezione verranno accettati sia i dati criptati simmetricamente che quelli criptati tramite TLS.

È consigliabile iniziare con Accept all incoming data, including unencrypted. Una volta che pensi che tutti gli agenti siano stati switchati alla crittografia, imposta Accept all types of encryption per trovare tutti gli host che potrebbero ancora inviare dati in chiaro. Gli host che inviano dati non crittografati verranno rilevati e segnalati come "rossi".

Test

Ora puoi eseguire i seguenti test (vedi anche l'articolo su Checkmk da linea di comando):

  • La chiamata a check_mk_agent sul sistema di destinazione deve produrre una stringa di caratteri confusi.

  • L'accesso tramite telnet myhost123 6556 dal server Checkmk deve produrre la stessa accozzaglia di caratteri.

  • Il comando cmk -d myhost123 sul server Checkmk deve visualizzare i dati puliti in chiaro.

7.2. Impostare la crittografia integrata con l'Agent bakery

L'impostazione della crittografia con l'Agent Bakery si svolge in questo modo: con il primo passo, la creazione della regola Symmetric encryption (Linux, Windows), hai quasi finito. Ora devi solo preparare e distribuire i nuovi agenti. Il file /etc/check_mk/encryption.cfg viene creato automaticamente per te e sarà incluso nei pacchetti degli agenti. Rimane solo il terzo passo, cioè la creazione della regola Enforce agent data encryption.

7.3. xinetd: restrizioni IP

Anche se un aggressore non può eseguire alcun comando, i dati di monitoraggio dell'agente potrebbero comunque essergli utili perché contengono, tra le altre cose, un elenco di tutti i processi in esecuzione sul sistema. È quindi meglio che i dati non siano facilmente accessibili a chiunque.

Se condividi l'agente Checkmk tramite xinetd, è molto semplice ed efficace limitare l'accesso a indirizzi IP specifici e, ovviamente, a quelli del server monitoring. Questo può essere ottenuto rapidamente tramite la direttiva only_from nel file di configurazione xinetd. Inserisci indirizzi IP o intervalli di indirizzi (nel modulo 12.34.56.78/29 o 1234::/46) separati da spazi. Sono ammessi anche i nomi di host. In questo caso, il sistema controlla se il nome host determinato dalla risoluzione inversa dell'indirizzo IP dell'host richiedente corrisponde a quello inserito:

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/bin/check_mk_agent
        only_from      = 10.118.14.5 10.118.14.37
        disable        = no
}

Nelle edizioni commerciali, gli utenti di Agent bakery possono configurare gli indirizzi IP consentiti tramite il set di regole Allowed agent access via IP address (Linux, Windows). Questo set di regole è disponibile all'indirizzo Setup > Agents > Windows, Linux, Solaris, AIX > Agent rules > Generic Options.

Naturalmente, un utente malintenzionato può facilmente falsificare il proprio indirizzo IP e connettersi all'agente Checkmk, ma è molto probabile che non riceva alcuna risposta, perché la risposta viene inviata al server di monitoraggio legittimo. Oppure l'utente malintenzionato riceve effettivamente una risposta, ma il server Checkmk non riceve alcun dato e segnala rapidamente un errore.

8. Messaggi di errore comuni quando si utilizza SSH

Se vuoi recuperare l'agente Checkmk tramite SSH, può succedere che il recupero fallisca e che il servizio Check_MK sul tuo host passi allo stato CRIT. Questi messaggi di errore iniziano spesso con Agent exited with code 255.

Le informazioni su come risolvere questi errori sono disponibili nella Knowledge Base di Checkmk.

In questa pagina