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 2.1.0 di Checkmk, il nuovo agente Linux con Agent Controller supporta la modalità pull registrata, crittografata con TLS e compressa. Per questo, però, l'Agent Controller deve essere avviato come processo in background (daemon) dal sistema init sull'host su cui deve essere installato. Al momento, a questo proposito è supportato solo systemd sulla piattaforma x86_64, e per la configurazione è necessaria la gestione dei pacchetti per deb o rpm.

Se tutti i seguenti requisiti sono stati soddisfatti…​

  • Il tuo Linux utilizza systemd dalla versione 219 o successive come sistema di init

  • L'architettura del processore è x86_64

  • I pacchetti sono gestiti come deb o rpm

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

Sebbene la maggior parte dei server e dei desktop Linux soddisfi 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 semplicemente elementi marginali, ma componenti normali di molti scenari di sistema per i quali è necessario il monitoraggio. Grazie alla struttura modulare di Checkmk, puoi comunque includere tali host Linux nel monitoraggio.

Tip

L'ultima frase si riferisce specificatamente agli host Linux. Sebbene l'installazione degli agenti per altri sistemi Unix in modalità legacy segua gli stessi principi di base degli host Linux, potrebbero esserci differenze in molti dettagli. Ad esempio, lo script dell'agente per AIX non supporta la crittografia simmetrica e i percorsi standard sono adattati alle convenzioni dei rispettivi sistemi di destinazione.

Poiché in questo caso è fuori discussione l'utilizzo del trasporto crittografato dei dati dell'agente tramite l'Agent Controller, in questo articolo spieghiamo come effettuare il trasporto non crittografato tramite un super-server Internet o la configurazione di SSH come tunnel crittografato.

Anche la modalità push dipende dall’Agent Controller e quindi non è disponibile nella modalità legacy. Se un host che non può essere raggiunto dal server Checkmk deve essere incluso nel monitoraggio in modalità legacy, dovrai trovare un’altra soluzione. Puoi utilizzare programmi di origine dati per connetterti dall’host monitorato e usarli per trasmettere l’output dell’agente al server Checkmk.

I casi in cui la modalità agente non ha importanza sono descritti nell'articolo sull'agente Linux con Agent Controller:

2. Installazione

A seconda del sistema di 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 le loro derivate), un archivio TGZ per tutte le altre distribuzioni (edizioni commerciali) o, allo stesso modo, uno script di shell (Checkmk Community) per qualsiasi altra distribuzione.

2.1. Installazione dai pacchetti

C'è una descrizione completa dell'installazione dai pacchetti deb o rpm nell'articolo Monitoraggio Linux, quindi qui ci limiteremo a spiegare la procedura in breve.

In CRE Checkmk Community, puoi trovare i pacchetti Linux dell'agente tramite Setup > Agents > Linux. Nelle edizioni commerciali, devi prima accedere all'Agent Bakery nel menu Setup tramite Agents > Windows, Linux, Solaris, AIX, dove troverai i pacchetti già pronti. 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 oppure utilizzare wget o curl per scaricarli direttamente nell'host nel monitoraggio:

root@linux# wget http://mycmkserver/mysite/check_mk/agents/check-mk-agent-2.4.0p25-1.noarch.rpm
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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.4.0p25-1.noarch.rpm
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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 si effettua come root con il comando dpkg -i:

root@linux# dpkg -i check-mk-agent_2.4.0p25-1_all.deb
(Reading database ... 739920 files and directories currently installed.)
Preparing to unpack .../check-mk-agent_2.4.0p25-1_all.deb ...
Unpacking check-mk-agent (2.4.0p25-1) ...
Setting up check-mk-agent (2.4.0p25-1) ...
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

2.2. Installazione dall'archivio TGZ

CEE Per un'installazione comoda e indipendente dalla distribuzione, avrai bisogno dell'agente Linux in formato archivio TGZ ("Tarball"), che puoi scaricare dalle edizioni commerciali nel menu Configurazione tramite Agents > Windows, Linux, Solaris, AIX. L'archivio TGZ contiene la struttura completa delle directory dell'agente Linux da decomprimere nella directory root dell'host monitorato.

agent linux legacy agents

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

root@linux# tar -C / --no-overwrite-dir -xvf /tmp/check-mk-agent_2.4.0p25.tar.gz
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p25
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>>>
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se qui viene visualizzato un numero di versione inferiore a 2.2.0, probabilmente hai ancora una versione precedente dello script dell'agente installata 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 dell'agente

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

List of agent scripts for download.

Carica questo file sul sistema di destinazione e copialo in una directory eseguibile per root. /usr/local/bin/è una buona scelta, poiché si trova nel percorso di ricerca ed è destinata alle estensioni personalizzate. In alternativa, puoi usare /usr/bin o una sottodirectory di /opt. Noi usiamo /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:/usr/bin# wget http://mycmkserver/mysite/check_mk/agents/check_mk_agent.linux
root@linux:/usr/bin# mv check_mk_agent.linux check_mk_agent
root@linux:/usr/bin# chmod 755 check_mk_agent
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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. L'| heade tronca tutto ciò che segue la decima riga dell'output:

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p25
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>>>
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se vuoi configurare o estendere l'agente, dovrai creare tu stesso le directory necessarie. La posizione delle tre directory obbligatorie è hard-coded nell'agente in variabili che iniziano con MK_ e viene fornita anche ai plug-in 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"
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

root@linux# mkdir /usr/lib/check_mk_agent /etc/check_mk /var/lib/check_mk_agent
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se vuoi usare percorsi diversi, basta modificare il file /usr/bin/check_mk_agent.

3. Verifica dello stato dopo l'installazione

Dopo l'installazione, controlla se è già stato configurato un servizio in ascolto sulla porta TCP 6556. In particolare, quando si installa tramite il gestore di pacchetti, viene utilizzato un servizio xinetd o systemd (in modalità super-server) già esistente per fornire l'output non crittografato dell'agente sulla porta TCP 6556.

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

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se non viene visualizzato alcun output, la porta 6556 non è ancora aperta. Se è stata stampata una riga, allora la porta 6556 è aperta. In questo caso ci interessa il nome del programma tra parentesi, in questo caso xinetd. Ricordati questo nome del programma, perché ti servirà nel processo successivo, indipendentemente dal metodo di accesso selezionato.

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

4. Scegliere il metodo di accesso

A questo punto devi prendere una decisione:

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

  • Oppure ritieni che la maggiore sicurezza offerta dalla crittografia valga un certo sforzo in più?

Gli aspetti rilevanti in questo caso sono a quali informazioni ha accesso un potenziale aggressore e quanto grande dovrebbe essere il suo sforzo. Ad esempio, la tabella dei processi che viene sempre trasmessa può già fornire indizi preziosi, e un elenco degli aggiornamenti software non ancora effettuati rende possibili attacchi mirati.

Di norma, consigliamo quindi il trasferimento crittografato dei dati tramite un tunnel SSH.

Important

Quando si richiama lo script dell'agente direttamente in una shell, potrebbero essere disponibili variabili d'ambiente diverse rispetto a quando lo si richiama tramite (x)inetd, tramite Agent Controller o in una sessione SSH senza terminale di controllo. In caso di problemi con l'uno o l'altro metodo di esecuzione, potrebbe essere necessario garantire la presenza di determinate variabili d'ambiente. Il metodo utilizzato a tal fine dipende troppo dal singolo caso per poter dare consigli in questa fase.

5. Senza crittografia: configurazione di (x)inetd

Se ritieni che l'uso di un trasferimento dati non crittografato sia un rischio accettabile, il passo successivo è configurare un super-server Internet. Se il test con ss ha mostrato che xinetd, inetd o systemd è già in ascolto sulla porta TCP 6556, passa al test di connessione.

Se così non fosse, usa il comando ps per verificare se un 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Puoi identificare dal processo in esecuzione se si tratta del più moderno xinetd o di uno degli altri super-server Internet (GNU-Inetutils, OpenBSD-Inetd, Busybox-Inetd). Se nessun processo è attivo, installa un xinetd tramite il gestore dei pacchetti della tua distribuzione. Se è attivo un "classico" inetd, di solito ha senso configurarlo e utilizzarlo invece di passare a xinetd.

5.1. Configurazione di xinetd

CEE 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 includono uno script che automatizza i due passaggi necessari: prima installa la configurazione e poi fa in modo che xinetd rilegga le impostazioni modificate. Devi eseguire lo script indicando 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se installi lo script dell'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. Puoi vedere altre opzioni di configurazione guardando 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 unico grande file /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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Ora sei pronto per il test di connessione.

5.2. Configurazione di un altro inetd

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

root@linux# grep 6556/ /etc/services
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se così non fosse, Checkmk deve essere registrato come servizio. Per farlo, aggiungi la seguente riga. La notazione qui è esattamente la stessa di quella memorizzata nella tabella IANA con un unico trattino:

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

Il formato del file di configurazione /etc/inetd.conf varia a seconda delle singole varianti. Consulta i commenti nel file di configurazione e la 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 prestare attenzione alla 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 esempio con:

root@linux# /etc/init.d/inetd restart
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

A seconda del sistema init utilizzato e del super-server installato, questo comando potrebbe variare.

5.3. Test di connessione

Per prima cosa controlla se è possibile (ri)avviare xinetd o inetd:

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Ora puoi collegarti a 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.4.0p25
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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

6. Crittografato: utilizzo di un tunnel SSH

La configurazione del tunnel SSH si effettua seguendo questi passaggi:

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

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

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

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

Ed ecco ora l'intera procedura, passo dopo passo con tutti i dettagli necessari:

6.1. Creazione di 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 qui sotto, utilizzi il comando ssh-keygen -t ed25519 come utente del sito:

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+|
+-----------------+
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

Importante: non specificare una passphrase! Crittografare il file con la chiave segreta non servirebbe a nulla, dopotutto non vorrai 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

La chiave privata si chiama id_ed25519 ed è leggibile solo dall'utente del sito (-rw-------) — ed è una buona cosa! La chiave pubblica id_ed25519.pub ha un aspetto simile a questo:

OMD[mysite]:~$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

6.2. Consentire l'accesso tramite SSH

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

root@linux# mkdir -m 700 /root/.ssh
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

root@linux# vim /root/.ssh/authorized_keys
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Copia il contenuto delle chiavi pubbliche in questo file. Puoi farlo, ad esempio, con il mouse e il copia-incolla. Sii preciso! Ogni spazio conta. Assicurati anche che non ci siano mai due spazi in una riga. E: il tutto deve stare su un'unica riga! Se il file esiste già, aggiungi semplicemente una nuova riga sotto.

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

Quello che segue è molto importante! La chiave SSH dovrebbe essere utilizzata esclusivamente per l'esecuzione dell'agente. SSH offre una funzione simile chiamata "restrizione dei comandi". Per farlo, inserisci il testo command="/usr/bin/check_mk_agent" all'inizio della riga che hai appena creato, separandolo dal resto con un singolo spazio. Il risultato sarà 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Ora prova 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.4.0p25
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>>>
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

La prima volta dovrai confermare l'impronta digitale della chiave inserendo yes. Tutti gli accessi successivi potranno quindi avvenire senza l'intervento dell'utente, compreso il polling automatico dello script dell'agente da parte del server Checkmk ogni minuto.

Se non funziona, controlla:

  • Il server SSH è installato sul sistema di destinazione?

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

  • Hai digitato correttamente la sintassi di authorized_keys?

  • Hai inserito la chiave pubblica corretta?

  • Hai effettuato l'accesso come utente corretto (root@…​)?

  • Ti sei ricordato di 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 nell'authorized_keys. SSH utilizzerà quindi automaticamente la chiave più forte conosciuta per la connessione.

6.4. Modifica dell'accesso da Checkmk a SSH

Il sistema di destinazione è ora pronto. Manca solo la configurazione di Checkmk stesso. Questo si fa 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 all'agente tramite SSH avviene tramite 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 per timeout o accesso negato, controlla se hai usato il nome host con la stessa ortografia utilizzata durante il test da riga di comando — OpenSSH distingue tra nome host abbreviato, 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 dell'host memorizzato nella cache (da Checkmk).

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

6.5. Chiavi SSH multiple

Puoi anche lavorare con più di una chiave SSH. Metti le chiavi in una directory qualsiasi. Nella regola Individual program call instead of agent access devi poi specificare il percorso della rispettiva chiave privata con l'opzione -i. È meglio usare $OMD_ROOT qui al posto del percorso della directory del sito (/omd/sites/mysite). Il comando completo potrebbe quindi essere ssh -i $OMD_ROOT/.ssh/my_key -T root@$HOSTADDRESS$, e così 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, di solito è necessario estendere il comando sopra indicato

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 monitoraggio sull'host. Se il comando ss -tulpn | grep 6556 sopra riportato non ha trovato alcun processo in ascolto sulla porta TCP 6556, hai finito di configurare il tunnel SSH. Se viene visualizzata 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 riapparirebbe in alcune configurazioni durante gli aggiornamenti dell'agente!

La disabilitazione va effettuata nel file /etc/xinetd.d/check-mk-agent (sui sistemi con installazioni dell'agent meno recenti, 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

oppure

root@linux# service xinetd restart
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

inetd

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

root@linux# grep -n check.*mk /etc/inetd.conf
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Commenta questa riga con un cancelletto # e poi riavvia il processo.

root@linux# /etc/init.d/inetd restart
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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.
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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

6.7. Verifica del risultato

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

OMD[mysite]:~$ telnet myhost123 6556
Trying 10.118.15.23...
telnet: Unable to connect to remote host: Connection refused
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

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 soddisfa i requisiti di limitazione dell'accesso e di protezione contro le intercettazioni. Tuttavia, in casi specifici può avere senso utilizzare anche i meccanismi di protezione presentati di seguito o ricorrervi quando non è possibile creare un 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, dato che un malintenzionato non può inviare comandi e non può fare nulla con tali dati di output crittografati, l'obiettivo della sicurezza contro le intercettazioni è solitamente soddisfatto in modo sufficiente.

Naturalmente, la crittografia richiede una configurazione adeguata sia sull'agente che sul server. Questa può essere creata manualmente in Checkmk Community 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 aggiornamento creato con Agent Bakery che include la chiave di crittografia potrebbe, ad esempio, essere intercettato da un malintenzionato che potrebbe quindi decrittografare il contenuto delle comunicazioni.

7.1. Implementazione della crittografia integrata

Attivazione della crittografia

Il primo passo è 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 dovrebbe applicarsi a tutti gli host per i quali vuoi 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 invii i dati in forma crittografata. La crittografia funziona con una password condivisa (shared secret) che specifichi qui e che deve essere memorizzata in chiaro sia sul server Checkmk che sull'agente. Se lo desideri, seleziona l'icona "Symbol for rolling a password." affinché Checkmk generi una password casuale per te, e tieni questa password a portata di mano per il secondo passo, ovvero 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'

Ovviamente qui devi specificare la tua password al posto di 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Configurazione del server Checkmk

Nel terzo e ultimo passaggio, usa la regola Enforce agent data encryption per specificare come il server Checkmk deve gestire i dati non crittografati.

Hai le seguenti opzioni:

  • Accept all incoming data, including unencrypted: Verranno accettati i dati provenienti da agenti sia con che senza crittografia.

  • Accept all types of encryption: Verranno accettati solo i dati crittografati, tramite TLS o 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 saranno accettati sia i dati crittografati simmetricamente che quelli crittografati tramite TLS

Ha senso iniziare con Accept all incoming data, including unencrypted. Una volta che ritieni che tutti gli agenti siano stati convertiti alla crittografia, imposta Accept all types of encryption per individuare eventuali host che potrebbero ancora inviare dati in chiaro. Gli host che inviano dati non crittografati verranno rilevati e contrassegnati in "rosso".

Test

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

  • La chiamata a check_mk_agent sul sistema di destinazione deve restituire una stringa di caratteri confusa.

  • L'accesso tramite telnet myhost123 6556 dal server Checkmk deve restituire la stessa stringa di caratteri confusa.

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

7.2. Configurazione della crittografia integrata con Agent Bakery

CEE La configurazione della crittografia con Agent Bakery funziona così: Con il primo passo, ovvero la creazione della regola "Symmetric encryption (Linux, Windows)", hai quasi finito. Ora devi solo compilare 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, ovvero la creazione della regola "Enforce agent data encryption".

7.3. xinetd: restrizioni IP

Anche se un malintenzionato non può eseguire alcun comando, i dati di monitoraggio dell’agente potrebbero comunque essergli utili, poiché 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'Agent Checkmk tramite xinetd, è molto facile ed efficace limitare l'accesso a indirizzi IP specifici — e naturalmente a quelli del server di monitoraggio. Questo si può ottenere rapidamente tramite la direttiva only_from nel tuo file di configurazione xinetd. Inserisci gli indirizzi IP o gli intervalli di indirizzi (nel formato 12.34.56.78/29 o 1234::/46) separati da spazi. Sono ammessi anche i nomi host. In questo caso, il sistema verifica 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
}

CEE 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.

Ovviamente, un hacker può facilmente falsificare il proprio indirizzo IP e quindi connettersi all’agente. Ma in questo caso è molto probabile che non riceva la risposta, perché questa andrà al server di monitoraggio legittimo. Oppure l’hacker riceve effettivamente una risposta, ma il server Checkmk non riceve alcun dato e segnalerà rapidamente un errore.

8. Messaggi di errore comuni durante l'uso di SSH

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

Puoi trovare informazioni su come risolvere questi errori nella Knowledge Base di Checkmk.


Last modified: Thu, 02 Apr 2026 08:56:24 GMT via commit 82935c426
In questa pagina