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. はじめに

linux

Checkmk バージョン2.1.0 以降、エージェントコントローラーを備えた新しいLinuxエージェントは、登録済み、TLS暗号化、および圧縮されたプルモードに対応しています。 ただし、この機能を利用するには、エージェントコントローラーを、インストールするホストのinitシステムによってバックグラウンドプロセス(ディーモン)として起動する必要があります。 現在、この点に関しては、x86_64プラットフォーム上のsystemd のみがサポートされており、セットアップにはdeb またはrpm パッケージのパッケージ管理が必要です。

以下のすべての要件が満たされている場合…

  • お使いの Linux が、バージョン 219 以降のsystemd を init システムとして使用していること

  • プロセッサアーキテクチャが x86_64 です

  • パッケージは、deb またはrpm

…​エージェントコントローラーを使用してエージェントをインストール、設定、拡張する方法については、「Linux の監視」の記事をご覧ください。

ほとんどの Linux サーバーおよびデスクトップはこれらの要件を満たしていますが、長年にわたってバージョンがアップグレードされたシステム、i686 インスタンスを搭載した古い仮想マシンディストリビューションレスコンテナ組み込み Linuxシステムは、ごく一部のエレメントではなく、監視が必要な多くのシステムランドスケープの通常のコンポーネントです。 Checkmk のモジュール構造により、このような Linux ホストも監視対象に含めることができます。

ここでは、エージェントコントローラーによるエージェントデータの暗号化転送は使用できないため、インターネットのスーパーサーバーによる暗号化されていない転送、またはSSH を暗号化トンネルとして設定する方法について説明します。

プッシュモードもエージェントコントローラーに依存するため、レガシーモードでは使用できません。 Checkmk サーバーから到達できないホストをレガシーモードで監視に含める場合は、別の解決策を見つける必要があります。 データソースプログラムを使用して、監視対象のホストから接続し、これを使用してエージェントの出力を Checkmk サーバーに送信することができます。

エージェントモードが問題にならない問題については、エージェントコントローラーを使用した Linux エージェントに関する記事をご覧ください。

2. インストール

パッケージ管理に応じて、3 つのインストールオプションから選択できます。 Debian、Ubuntu、Red Hat Enterprise Linux (RHEL)、SLES (およびその派生版) 用の DEB または RPM パッケージ、その他のすべてのディストリビューション (商業版) 用の TGZ アーカイブ、またはその他のディストリビューション用のシェルスクリプト (Checkmk Raw) です。

2.1. パッケージからのインストール

deb またはrpm パッケージからのインストールについては、「Linux の監視」の記事で詳しく説明していますので、ここではその手順を簡単に説明します。

Checkmk Raw では、Setup > Agents > Linux からエージェントの Linux パッケージを見つけることができます。 商業版では、まずAgents > Windows, Linux, Solaris, AIX からSetup メニューの「Agent Bakery」にアクセスし、そこでパッケージを見つけることができます。 そこから「Related > Linux, Solaris, AIX files 」メニュー項目を選択すると、エージェントファイルのリストが表示されます。

これらのファイルは、ブラウザからダウンロードするか、wget またはcurl を使用して、監視中のホストに直接ダウンロードすることができます。

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

RHEL、SLES および関連ディストリビューションでは、RPM パッケージはroot としてインストールされており、コマンドrpm -U でインストールできます。

root@linux# rpm -U check-mk-agent-2.4.0p8-1.noarch.rpm

ちなみに、-U オプションは「更新」を意味しますが、初期インストールも正しく実行できます。

Debian、Ubuntu、および関連ディストリビューションでの DEB パッケージのインストールは、root というコマンドで、次のように実行します。dpkg -i

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

2.2. TGZ アーカイブからのインストール

ディストリビューションに依存しない便利なインストールを行うには、TGZ アーカイブ形式(「Tarball」)の Linux エージェントが必要です。これは、Agents > Windows, Linux, Solaris, AIX のセットアップメニューから商業版としてダウンロードできます。 TGZ アーカイブには、監視対象のホストのルートディレクトリに解凍するための、Linux エージェントのディレクトリ構造全体が含まれています。

agent linux legacy agents

解凍する際には、すべてのファイルパスが正しいことを確認するため、-C (「ディレクトリを変更」)パラメータが不可欠です。 また、既存のディレクトリの許可が変更されないように、--no-overwrite-dir も使用します。

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

すべて正しく実行した場合、エージェントスクリプトはコマンドとして実行可能になり、通常の出力が表示されます。| head は、出力の 11 行目以降をすべて切り捨てます。

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p8
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>>>

ここに2.2.0 よりも低いバージョン番号が表示された場合は、/usr/local/bin/check_mk_agent として古いバージョンのエージェントスクリプトがインストールされている可能性があります。 この古いスクリプトを移動するか、ファイル名に.bak を追加して名前を変更してください。

2.3. エージェントスクリプトの手動インストール

エージェントスクリプトを手動でインストールする必要はほとんどありませんが、その手順もそれほど難しくはありません。 このタイプのインストールでは、最初はエージェントスクリプトのみがインストールされ、アクセス設定は実行されません。 この設定を行うには、エージェントファイルページから「Agents 」ボックスが必要です。 このボックスには、「check_mk_agent.linux 」というファイルがあります。

List of agent scripts for download

このファイルをターゲットシステムにロードし、root で実行可能なディレクトリにコピーします。/usr/local/bin/ は、検索パスにあり、カスタム拡張用であるため、適切な選択です。 または、/usr/bin または/opt のサブディレクトリを使用することもできます。 すべてのテストが他のインストール方法と一致するように、/usr/bin を使用しています。wget が利用可能な場合は、 を使用して直接インストールを行うこともできます。

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

最後の 2 つのコマンドは忘れないでください。これらは、.linux 拡張機能を削除し、ファイルを実行可能にするものです。 これで、エージェントはコマンドとして実行可能になり、通常の出力が表示されます。| head は、出力の 10 行目以降をすべて切り捨てます。

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p8
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>>>

エージェントを設定または拡張する場合は、必要なディレクトリを自分で作成する必要があります。 3 つの必須ディレクトリの場所は、MK_ で始まる変数でエージェントにハードコードされており、システム環境を介してプラグインにも提供されています。

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"

これら 3 つのディレクトリ(デフォルトのアクセス許可は 755、所有者はroot )を作成してください。

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

別のパスを使用する場合は、/usr/bin/check_mk_agent を編集してください。

3. インストール後の状態の確認

インストール後、TCP ポート 6556 をリッスンするサービスがすでに設定されているかどうかを確認します。 特に、パッケージマネージャを使用してインストールした場合、既存のxinetd またはsystemd (スーパーサーバーモードの場合) が、TCP ポート 6556 で暗号化されていないエージェント出力を提供するために使用されます。

ss コマンドを使用します。 このコマンドが使用できない場合 (古いディストリビューションの場合)、netstatsockstatlsof のいずれかのプログラムが代替として使用できます。

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

出力がない場合、ポート 6556 はまだ開いていません。行が印刷されている場合、ポート 6556 は開いています。 この場合、括弧内のプログラム名、ここではxinetd が重要です。 このプログラム名は、選択したアクセス方法に関係なく、その後のプロセスで必要になりますので、覚えておいてください。

DEB または RPM パッケージからインストールした後、プログラム名cmk-agent-ctl がここに表示されたら、問題ありません。 お使いの Linux (特に使用している systemd バージョン) は、記事「Linux の監視」で説明しているエージェントコントローラーを使用するのに十分な最新情報を持っているため、エージェントの登録に進むことができます。

4. アクセス方法の選択

この時点で、次の選択を行う必要があります:

  • 設定が簡単で暗号化されていない接続を許可しますか?

  • それとも、暗号化による高いセキュリティのために、一定の追加の努力を払う価値がありますか?

この判断には、潜在的な攻撃者がアクセスできる情報、および攻撃者に必要な労力という要素が関係します。 たとえば、常に送信されるプロセステーブルは、貴重な手がかりとなる情報源となり、まだ実行されていないソフトウェアのアップデートのリストは、標的型攻撃を可能にする情報となります。

したがって、原則として、SSH トンネルによる暗号化されたデータ転送をお勧めいたします。

Important

シェルでエージェントスクリプトを直接呼び出す場合、(x)inetd、エージェントコントローラー、または制御ターミナルのない SSH セッションから呼び出す場合とは、利用可能な環境変数が異なる場合があります。 いずれかの実行方法に問題が発生した場合は、特定の環境変数が存在することを確認する必要があるかもしれません。 その方法については、個々のケースによって大きく異なるため、ここでは推奨することはできません。

5. 暗号化なし:(x)inetd の設定

暗号化されていないデータ転送の使用が許容できるリスクであると判断した場合は、次のステップでインターネットスーパーサーバーを設定します ss のテストで、xinetdinetd 、またはsystemd がすでに TCP ポート 6556 をリッスンしている場合は、接続テストに進んでください。

そうでない場合は、ps コマンドを使用して、inetd がすでにアクティブになっているかどうかをチェックします。

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

実行中のプロセスから、それが新しいxinetd であるか、他のインターネットスーパーサーバー (GNU-Inetutils、OpenBSD-Inetd、Busybox-Inetd) であるかを識別できます。 アクティブなプロセスがない場合は、ディストリビューションのパッケージ管理を使用してxinetd をインストールしてください。 「従来の」inetd がアクティブな場合は、xinetd に切り替えるよりも、これを設定して使用することをお勧めします。

5.1. xinetd の設定

/etc/xinetd.d/ ディレクトリを使用して設定を行う既存のxinetd を設定するには、TGZ アーカイブ、DEB パッケージ、および RPM パッケージに、必要な 2 つの手順を自動化するスクリプトが含まれています。まず、設定をインストールし、次にxinetd に変更した設定を再読み込みさせます。 スクリプトは、ファイルのフルパスで呼び出す必要があります。

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

エージェントスクリプトを手動でインストールする場合は、エディタを使用して設定ファイル/etc/xinetd.d/check-mk-agent を作成してください。 内容は次のとおりです。

/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
}

ここでは、2 台の Checkmk サーバーへのアクセスを制限する行(コメントアウト)を追加しています。 その他の設定オプションは、Checkmk サーバーの~/share/check_mk/agents/scripts/super-server/1_xinetd/check-mk-agent ファイルで確認できます。

xinetd が古い構成方式(/etc/xinetd.conf のみ)を使用している場合、/etc/check_mk/xinetd-service-template.cfg から/etc/xinetd.conf にサンプル構成を転送してください。

xinetd の設定が完了したら、再起動してください。

root@linux# service xinetd restart

これで、接続テストの準備が整いました。

5.2. 別の inetd の設定

まず、/etc/services にポート 6556 のエントリがすでに存在しているかどうかを、チェックしてください。

root@linux# grep 6556/ /etc/services

そうでない場合は、Checkmk をサービスとして登録する必要があります。 そのためには、次の行を追加してください。ここでの表記は、IANA テーブルに登録されている表記とまったく同じで、ハイフンは 1 つだけです。

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

/etc/inetd.conf 設定ファイルのフォーマットは、個々のバリエーションによって異なります。inetd に一致するフォーマットについては、設定ファイル内のコメントおよびマニュアルページ (man 5 inetd.conf) を参照してください。 その後に、openbsd-inetd に一致する設定が、IPv4 および IPv6 サポート用の 2 行で続きます。 ここでも、正しい表記に注意することが重要です。

/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

設定ファイルを編集したら、inetd を再起動します。

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

使用している init システムおよびインストールされているスーパーサーバーによっては、このコマンドは異なる場合があります。

5.3. 接続テスト

まず、xinetd またはinetd が (再)起動できるかどうかを チェックします。

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

これで、TCP ポート 6556 でtelnet またはnc (netcat) に接続できます。まずホスト自体から、次に Checkmk サーバーから接続してください。

OMD[mysite]:~$ nc 12.34.56.78 6556
<<<check_mk>>>
Version: 2.4.0p8
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

(x)inetd がアクティブであるにもかかわらず、接続が拒否されたという通知を受け取った場合は、ファイアウォールの設定を確認してください。

6. 暗号化:SSH トンネルの使用

SSH トンネルのセットアップは、次の手順で行います。

  1. この目的専用のSSHキーペアを作成します。

  2. ターゲットシステムで、このキーを使用したエージェントへのアクセスを許可します。

  3. Checkmk サーバーが、ポート 6556 の TCP 接続の代わりに SSH を使用するように設定します。

  4. 使用可能な場合:(x)inetd によるアクセスを無効にします。

以下に、必要な詳細をすべて含めた手順をステップバイステップで説明します:

6.1. SSH キーペアの作成

SSH は「公開鍵認証」で動作します。 これを行うには、まず、一致する鍵のペアを生成します。 アルゴリズムを選択すると、rsaecdsaed25519 から選択できます。 以下の例では、サイトユーザーとしてssh-keygen -t ed25519 コマンドを使用しています。

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+|
+-----------------+

ファイル名は空のままにしておくと、提案されたファイル名が使用されます。 もちろん、個別のホスト用に個別の鍵を使用したい場合など、別のパスを指定することもできます。

重要:パスフレーズは指定しないでください。 秘密鍵でファイルを暗号化しても意味がありません。Checkmk サーバーを起動するたびにパスフレーズを入力するのは面倒でしょう。

その結果、.ssh ディレクトリに2つのファイルが作成されます。

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

秘密鍵はid_ed25519 という名前で、サイトユーザー (-rw-------) だけが読み取ることができます。これは良いことです。 公開鍵id_ed25519.pub は、次のような形式です。

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

6.2. SSH 経由でのアクセスを許可する

次のステップは、SSH 経由で監視する Linux ホスト(それぞれ)で実行する必要があります。root としてログインし、ホームディレクトリ(/root )にサブディレクトリ.ssh が存在しない場合は作成します。 次のコマンドを実行すると、アクセス権限が 700 に正しく設定されます。

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

次に、お好みの (コンソールベースの) テキストエディタでauthorized_keys ファイルを開きます。 このファイルが存在しない場合は、エディタによって自動的に作成されます。

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

公開鍵の内容をこのファイルにコピーします。 マウスとコピー&ペーストで実行できます。 正確に実行してください! すべてのスペースが重要です。 また、1 行に2 つのスペースが入らないようにしてください。 そして:全体が1 行でなければなりません! ファイルが既に存在する場合は、単に新しい行を末尾に追加してください。

6.3. エージェントの実行へのアクセスを制限する

ここからの手順は非常に重要です。 SSH キーは、エージェントの実行にのみ使用してください。 SSH には、コマンド制限という機能があります。 この機能を使用するには、先ほど作成した行の先頭に「command="/usr/bin/check_mk_agent" 」と入力し、その後に1 文字分のスペースを入れてください。 次のような内容になります。

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

ファイルを保存し、許可をチェックします。 このファイルへの書き込み許可は、所有者のみが持つ必要があります。

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

次に、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.0p8
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>>>

初回は、yes と入力して、キーのフィンガープリントを確認する必要があります。 それ以降は、Checkmk サーバーによる 1 分ごとのエージェントスクリプトの自動ポーリングを含め、ユーザーの操作なしでアクセスできるようになります。

動作しない場合は、以下を確認してください。

  • SSH サーバーがターゲットシステムにインストールされていますか?

  • 指定したファイルおよびディレクトリに正しい許可が与えられていますか?

  • authorized_keys の構文は正しく入力されていますか?

  • 正しい公開鍵を入力しましたか?

  • 正しいユーザー (root@…​) でログインしていますか?

  • command="…​" を覚えていらっしゃいますか?

非常に古いターゲットシステムでは、楕円曲線(ed25519 およびecdsa )を使用したキーが認識されない場合もあります。 その場合は、追加の RSA キーを生成し、これをauthorized_keys にも入力してください。 SSH は、接続に最も強力な既知のキーを自動的に使用します。

6.4. Checkmk から SSH へのアクセスを変更する

これで、ターゲットシステムの準備は完了です。 あとは、Checkmk 自体の設定を行うだけです。 これは、Setup > Agents > Other integrations> Custom integrations > Individual program call instead of agent access ルールセットを使用して行います。 ここで、対象ホストのルールを作成し、コマンドとしてssh -T root@$HOSTNAME$ またはssh -C -T root@$HOSTNAME$ (エージェントデータの追加圧縮用) を入力します。

rule for calling the agent via SSH.
SSH 経由でエージェントを呼び出すには、ルール

GUI の [Setup > Hosts > Properties of host > Test connection to host ] で、[Run tests ] ボタンを使用して接続テストを実行できます。 テストがタイムアウトまたはアクセス拒否で失敗した場合は、コマンドラインでテストしたときと同じスペルでホスト名を使用しているかどうかを確認してください。OpenSSH は、短いホスト名、FQDN、および IP アドレスを区別します。 または、ホストの IP アドレスを使用してホストにアクセスすることもできます。 この場合、マクロ$HOSTADDRESS$ を使用する必要があります。このマクロは、ホストの (Checkmk によってキャッシュされた) IP アドレスに置き換えられます。

変更をアクティブにするを保存して実行すると、ホストが監視対象に追加されます。 監視では、サービスCheck-MK Agent が「Transport via SSH」という注記とともに表示されます。 さらに診断を行うには、コマンドcmk -D およびcmk -d を使用できます。これらのコマンドについては、コマンドラインに関する記事で説明しています。

6.5. 複数のSSHキー

複数の SSH キーを使用することもできます。 キーは任意のディレクトリに配置してください。Individual program call instead of agent access ルールで、-i オプションを使用して、それぞれの秘密鍵へのパスを指定する必要があります。 ここでは、サイトディレクトリへのパス (/omd/sites/mysite) の代わりに$OMD_ROOT を使用することをお勧めします。 完全なコマンドは、ssh -i $OMD_ROOT/.ssh/my_key -T root@$HOSTADDRESS$ となり、これにより、別の名前を持つサイトでも設定を実行できるようになります。

Rule to invoke the agent with multiple SSH keys.
複数の SSH キーを使用するには、通常、上記のコマンドを次のように拡張する必要があります。

これにより、複数の異なるルールを使用して、ホストのグループごとに異なる SSH キーを使用することができます。

6.6. ポート 6556 へのアクセスを無効にする

SSH トンネルにもかかわらず、潜在的な攻撃者にプレーンテキストデータを提供することを避けるため、ホストの監視でまだ利用可能なポート 6556 へのアクセスをすべて無効にする必要があります。 上記のコマンド ss -tulpn | grep 6556 TCP ポート 6556 をリッスンしているプロセスが見つからなかった場合、SSH トンネルの設定は完了です。 行が出力された場合、見つかったプロセスを永久的に無効にする必要があります。

xinetd

xinetd によって提供されているポートを閉じるには、disabled の値をyes に設定して、Checkmk の xinetd サービスを無効にしてください。 設定ファイル全体を削除しないでください。削除すると、エージェントの更新時に、一部の構成で再びこの設定ファイルが再出現してしまいます。

無効化は、/etc/xinetd.d/check-mk-agent ファイルで行います (古いエージェントがインストールされているシステムでは、ファイル名は/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
}

次に、xinetd を再起動してください:

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

または

root@linux# service xinetd restart

現在、ポート 6556 経由でのアクセスが不可能であることを確認してください。

inetd

ポート 6556 へのアクセスを制御しているのがinetd の場合は、/etc/inetd.conf 設定ファイルを変更します。 そのファイルで、関連する行を探します。

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

この行をハッシュ記号# でコメントアウトし、プロセスを再起動します。

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

その後、telnet またはnc を使用して、アクセスがまだ可能かどうかを確認してください。

systemd

検索の結果、systemd が TCP ポート 6556 を開いていることがわかった場合は、ソケットを提供する設定の正確な名前を確認する必要があります。

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

これで、まずサービスを停止し、次にサービスを無効にすることができます。

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.

現在、ポート 6556 へのアクセスは不可能であるはずです。

6.7. 成功の認証

いずれの場合も、最終テストを行うことをお忘れなく。 これで、ポート 6556 への接続はできなくなったはずです。

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

7. 追加のセキュリティオプション

ここで紹介するセキュリティオプションは、主に既存のインストールとの互換性を考慮して説明しています。 多くの場合、SSH によるエージェント出力の送信で、アクセス制限や盗聴防止の要件は満たされます。 ただし、個々のケースでは、以下の保護メカニズムを追加で導入したり、SSH トンネルを使用できない場合にこれらのメカニズムを使用したりすることが望ましい場合もあります。

Checkmk エージェントスクリプトは、追加のツールを使用せずに、自身のデータを暗号化することができます。 このビルトインの対称暗号化は、アクセス制御の代わりにはなりません。 しかし、攻撃者はコマンドを送信できず、暗号化された出力データを使用できないため、盗聴セキュリティの目的は通常、十分に達成されます。

もちろん、暗号化には、エージェントとサーバーの両方で適切な設定が必要です。 これは、Checkmk Raw で手動で作成するか、商業版ではエージェントベーカリーを使用して作成することができます。

注:対称暗号化は、暗号化と復号化の両方に同じ鍵を使用するため、暗号化鍵を含むエージェントベーカリーで作成された更新パッケージは、攻撃者に傍受され、通信内容が復号化されるおそれがあります。

7.1. ビルトイン暗号化の実装

暗号化の有効化

まず、Setup メニューに移動し、ルールセットSetup > Agents > Access to agents > Checkmk agent > Symmetric encryption (Linux, Windows) でルールを作成します。 このルールは、暗号化を使用するすべてのホストに適用する必要があります。 SNMP ホストはこの設定を無視するため、明示的に除外する必要はありません。

Rule to enable built-in encryption.
ビルトイン暗号化は、ルールによって有効になります。

Configure shared secret and apply symmetric encryption オプションを使用して、エージェントがデータを暗号化されたフォームで送信するように指定します。 暗号化は、ここで指定する共有パスワード(共有秘密鍵)を使用して機能し、このパスワードは Checkmk サーバーとエージェントの両方にプレーンテキストで保存する必要があります。 必要に応じて、Checkmk がランダムなパスワードを生成するアイコンを選択し、このパスワードを 2 番目のステップであるエージェントの設定のために用意しておいてください。

エージェントの設定

エージェントのホストで、次の内容を含む/etc/check_mk/encryption.cfg ファイルを作成します。

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

PASSPHRASE には、もちろんご自身のパスワードを指定してください。また、.cfg ファイルは、他のユーザーが読み取ることができないように必ず保護してください。

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

Checkmk サーバーの設定

3 番目の最後のステップでは、Enforce agent data encryption ルールを使用して、Checkmk サーバーが暗号化されていないデータをどのようにハンドルするかを指定します。

以下のオプションがあります:

  • Accept all incoming data, including unencrypted: 暗号化されているエージェントと暗号化されていないエージェントからのデータを受け入れます。

  • Accept all types of encryption: TLS または最初のステップで有効化した対称暗号化による暗号化されたデータのみを受け入れます。

  • Accept TLS encrypted connections only: TLS で暗号化されたデータのみを受け入れます。

Rule to define which agent data the Checkmk server accepts.
この選択では、対称暗号化データと TLS 暗号化データの両方が受け入れられます。

最初は、Accept all incoming data, including unencrypted で開始することをお勧めします。 すべてのエージェントが暗号化に切り替わったと思われる場合は、Accept all types of encryption に設定して、まだ平文でデータを送信しているホストをすべて検索してください。 暗号化されていないデータを送信しているホストが検出され、「赤」でフラグが付けられます。

テスト

これで、以下のテストを実行できます(コマンドラインでの Checkmk に関する記事もご参照ください)。

  • ターゲットシステムでのcheck_mk_agent の呼び出しは、文字の乱れた文字列を出力する必要があります。

  • Checkmk サーバーからtelnet myhost123 6556 にアクセスすると、同じ文字の乱雑な文字列が出力されるはずです。

  • Checkmk サーバーでcmk -d myhost123 コマンドを実行すると、クリーンなプレーンテキストデータが表示されます。

7.2. エージェントベーカリーでビルトイン暗号化を設定する

エージェントベーカリーを使用して暗号化を設定する手順は、次のとおりです。 最初のステップである「Symmetric encryption (Linux, Windows) 」ルールの作成で、ほぼ設定は完了です。 あとは、新しいエージェントをベイクして配布するだけです。/etc/check_mk/encryption.cfg ファイルは自動的に作成され、エージェントパッケージに含まれます。 あとは、3番目のステップである「Enforce agent data encryption 」ルールの作成だけです。

7.3. xinetd: IP 制限

攻撃者がコマンドを実行できない場合でも、エージェントの監視データは、システム上で実行中のすべてのプロセスのリストなど、さまざまな情報を含んでいるため、攻撃者に有用となる可能性があります。 したがって、データは誰からも簡単にアクセスできないようにすることが最善です。

xinetd を使用して Checkmk エージェントを共有している場合、特定の IP アドレス(もちろん、監視サーバーの IP アドレスも)へのアクセスを制限するのは非常に簡単で効果的です。 これは、xinetd 設定ファイルのonly_from ディレクティブを使用して、すばやく実現できます。 IP アドレスまたはアドレス範囲(12.34.56.78/29 または1234::/46 のフォーム)をスペースで区切って入力します。 ホスト名も使用できます。 この場合、システムは、要求元のホストの IP アドレスの逆解像度によって決定されたホスト名が、入力したホスト名と一致するかどうかをチェックします。

/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
}

商業版では、エージェントベーカリーのユーザーは、Allowed agent access via IP address (Linux, Windows) ルールセットを使用して、許可するIPアドレスを設定できます。 このルールセットは、Setup > Agents > Windows, Linux, Solaris, AIX > Agent rules > Generic Options で確認できます。

もちろん、攻撃者は IP アドレスを偽装してエージェントに接続することは非常に簡単です。 しかし、その場合は、応答が正当な監視サーバーに送信されるため、応答を受け取れない可能性が非常に高くなります。 あるいは、攻撃者は実際に応答を受け取っても、Checkmk サーバーはデータを受信しないため、すぐにエラーをレポートします。

8. SSH を使用する際によく見られるエラーメッセージ

SSH 経由で Checkmk エージェントを取得しようとすると、取得に失敗し、ホストのCheck_MK サービスがCRIT 状態になる場合があります。 このようなエラーメッセージは、多くの場合、Agent exited with code 255 で始まります。

このようなエラーの修正方法については、Checkmk 知識ベースをご覧ください。

このページでは