ksocketは こちら からダウンロードすることができます。
サポート対象OS
- Red Hat Enterprise Linux 6, 7
- CentOS 6, 7
- Ubuntu 16.04, 18.04
推奨ハードウェア構成
- CPU: 1GHz以上
- メモリ: 1GB以上
- HDD: 20GB以上
ksocketは こちら からダウンロードすることができます。
Kompira cloud Sonarでは、ksocket という連携プログラムを使用することにより、オンプレ環境やクラウド (AWS, Azure) 上の構成情報を収集することができます。この記事では、ksocketによって情報収集される機器側に必要な設定、確認方法について解説します。
UNIX/Linuxをスキャンする場合、SSHでのアクセスを有効にする必要があります。
SSHでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/ssh
以下にymlファイルを作成することで指定できます。
詳しくは ksocketドキュメント をご覧ください。
Windowsをスキャンする場合、WinRMでのアクセスを有効にする必要があります。 また、WinRMでのログイン後に詳細情報を取得するため、WMIリソースへのアクセス権限を許可する必要があります。 WinRM 接続の有効化の方法 - Kompira cloud Blog に設定方法を詳しく記載しているので、ご確認ください。
WinRMでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/winrm
以下にymlファイルを作成することで指定できます。
ネットワーク機器からは、SNMP経由で情報を取得します。 ksocketからSNMP接続ができているか、また必要なMIB情報が取得できているかは以下のコマンドで確認することができます。
(ksocket server) $ snmpget -v 2c -c public 172.16.0.1 1.3.6.1.2.1.1.1.0 SNMPv2-MIB::sysDescr.0 = STRING: BUFFALO BS-G3024MR
上記例のような出力が得られない場合やエラーが表示される場合は、「機器側がSNMPに応答しないようになっている」「コミュニティ名が設定と異なっている」などの原因が考えられます。
(ksocket server) $ snmpbulkwalk -v 2c -c public 172.16.0.1 1.3.6.1.2.1.4.21.1.7 ... Next HOP が設定されていれば出力される (ksocket server) $ snmpbulkwalk -v 2c -c public 172.16.0.1 1.3.6.1.2.1.4.22.1.3 ... ARP cache があれば出力される
SNMP Agentは動作している状態で、特定のMIBは取得できないような場合は、設定で制限されている可能性があります。
(PowerShellコンソールを起動) > $snmp = new-object -ComObject olePrn.OleSNMP > $snmp.open("172.16.0.1", "public", 2, 1000) > $snmp.Get(".1.3.6.1.2.1.1.1.0") EPSONCA929E
(PowerShellコンソールを起動) > $snmp = new-object -ComObject olePrn.OleSNMP > $snmp.open("172.16.0.1", "public", 2, 1000) > $nexthops = $snmp.GetTree(".1.3.6.1.2.1.4.21.1.7") > $nexthops[(0..($nexthops.count/2) | ForEach-Object { ,@(0, $_) })] ... Next HOPが設定されていれば出力される > $arps = $snmp.GetTree(".1.3.6.1.2.1.4.22.1.3") > $arps[(0..($arps.count/2) | ForEach-Object { ,@(0, $_) })] ... ARP cache があれば出力される
SNMPでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/snmp
以下にymlファイルを作成することで指定できます。
ksocketは、SNMP接続ができる機器の上記のMIBからNext HOP, ARP cache情報を取得し、それらのIPアドレスに対して情報取得を行う、という処理を繰り返し行います。
例えばksocketとスキャンさせたいWindows機の間に、ネットワーク構成上あるルータが存在したとしましょう。
この時、ksocketはWindows機に対するWinRM接続だけでなく、ルータに対するSNMP接続ができる必要があります。
もしルータをSNMP応答可能であるように設定できない場合は、スキャンオプションの「追加起点アドレス」にWindows機のIPアドレスを入力することで、スキャンさせることができます。
この記事ではKompira cloud Sonar におけるノードとは何かをご紹介します。
Kompira cloud Sonar でネットワークのスキャンを行うと、各実行ごとに1つのスナップショットが作成されます。 スナップショットはスキャンした時点のネットワーク・各ホストの状態 (例えば アドレス情報やアドレスに紐づいたホストの持つパッケージ等の各情報) が含まれています。
しかしこのままでは各スナップショットは紐づいておらず、定期的にスキャンを行っていてもネットワークやホストがどのように変遷してきたのかを辿ることができません。 Kompira cloud Sonar ではこれを解決し、ネットワークやホストを追跡し続けるためにノード集積という機能を持っています。
このノードを使い、ネットワーク内の各機器が今どんな状態なのかをすぐに検索・チェックすることができます。 (ノード検索機能については ノードの検索 - Kompira cloud Blog をご覧ください。)
スキャンを跨ぎノードを追跡するため、複数アドレスが単一のノードを指しているのかを調べる必要があります。 これらアドレスが指すノードの同一性判定を、Kompira cloud Sonar では下記のような手法で判定を行っています。 *1
機器例 | 判定方法 |
---|---|
Windows | WinRM を用いて取得した Windows シリアル番号の比較 |
Linux | ssh でテンポラリ領域へ乱数ファイル作成・その比較 |
ネットワーク機器 | SNMP を用いて取得した 機器シリアル番号の比較 |
最新のスナップショットが正常に取得された後に、ノード集積という機能によりアドレスとノードを関連付けます。
最新スナップショット中に既にノードになっているアドレスは存在するか?
→ 存在するならそのノードにアドレスを関連付ける
ノードになっていないアドレスは存在するか?
→ 存在するなら新たにノードを作り、それにアドレスを関連付ける
そして、関連付けられたアドレスを元に、ノードパッケージ等の内部情報を更新します。
ノード集積によって関連付けられたスナップショットは『関連するスナップショット』ボタンから見ることができます。
Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら
*1:判定手法は一例であり、実際には複数の情報を用いた比較等も行っています。 また、今後検出精度向上のため変更する可能性があります。
Kompira cloud Sonar では、収集した構成情報にAPI経由でアクセスすることができます。 API連携の一例として、Sonarでスキャンしたノード情報をZabbixに自動登録するPythonスクリプトを作成してみました。
主に下記の機能があります。
インストール後、以下の設定を行う必要があります。 詳しくはリポジトリのREADMEをご覧ください。
zabbix
データをインポートする先のzabbixサーバの設定を行います。
ホスト登録が可能な権限を持つユーザーを指定してください。
kompira_cloud
データ取得元となるKompira cloudのAPIトークンの設定を行います。
Kompira cloudの全体設定からAPIトークンを作成して登録してください。
host_prefix
Zabbixにホストを登録する際のprefixを設定することができます。
default_groups
Zabbixにホストを登録する際、ホストに割り当てるグループを設定します。
zabbix_registrar.py
を実行すると、Kompira cloudのデータをZabbixに連携させる処理が実行できます。
引数にはKompira cloudのノード一覧URL、もしくはスナップショットのアドレス一覧URLを指定します。
以下はノード一覧のURLを指定して実行したときの例です。
$ python zabbix_registrar.py https://hogefuga.cloud.kompira.jp/apps/sonar/networks/12345678-471f-4161-90a4-4b7dba5713a7/managed-nodes 2018-10-02 14:36:18,513 - [13975] - INFO - Get node list from KompiraCloud 2018-10-02 14:36:21,136 - [13975] - INFO - Zabbix login: http://192.168.120.64/zabbix 2018-10-02 14:36:23,055 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.0.120 2018-10-02 14:36:23,704 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.23 2018-10-02 14:36:24,660 - [13975] - INFO - Create Host: KompiraCloudNode-192.168.120.158 2018-10-02 14:36:25,276 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.239 2018-10-02 14:36:25,881 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.235 2018-10-02 14:36:26,701 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.237 2018-10-02 14:36:27,274 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.234 ...
実行後にZabbixを確認すると、以下のように KompiraCloudNode-
というprefixを持つホストが登録されていることが確認できます。
Zabbixホスト一覧
Zabbixホストインベントリ一覧
また、Zabbixのホストインベントリには、OS、MACアドレス、シリアル番号、ソフトウェア情報、ハードウェア情報などを入力できるフィールドがあり、本ツールではKompira cloudで取得してきたこれらの値を自動で挿入します。
Zabbixホストインベントリ詳細(Cisco C2950T)
Zabbixホストインベントリ詳細(Windows Server 2016)
上記の登録実行処理を再度行う事で、同一ノードであればホストの更新を、新規ノードであればホストの作成を行います。
また、IPアドレスの変更や増加があった場合にも自動的に反映を行います。 cron等で定期実行する事により、簡易的な自動同期が可能となります。
$ python zabbix_registrar.py https://yourspace.cloud.kompira.jp/apps/sonar/networks/1d6425eb-471f-4161-90a4-4b7dba5713a7/managed-nodes 2018-10-02 14:39:48,656 - [14022] - INFO - Get node list from KompiraCloud 2018-10-02 14:39:50,178 - [14022] - INFO - Zabbix login: http://192.168.120.64/zabbix 2018-10-02 14:39:50,653 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.0.120 2018-10-02 14:39:51,619 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.23 2018-10-02 14:39:52,028 - [14022] - INFO - Create Host: KompiraCloudNode-Ubuntu開発機 2018-10-02 14:39:52,402 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.158 2018-10-02 14:39:52,767 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.239 2018-10-02 14:39:53,185 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.235 2018-10-02 14:39:57,245 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.100 2018-10-02 14:39:57,580 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.71 2018-10-02 14:39:57,969 - [14022] - INFO - Create Host: KompiraCloudNode-pfSense.localdomain
Kompira cloudで収集したノードの情報を、様々な条件で検索することができます。
単純な文字列による検索、項目をキーワードで指定した検索、これらを組み合わせた複雑な検索が使用できます。
詳しくは以下の記事をご覧ください。
ノードの検索 - Kompira cloud Blog
Kompira cloudでは、サーバやネットワーク機器の様々な項目を収集します。
一覧画面ではこれまで代表的なカラムを固定して表示していましたが、今回のアップデートで30以上の項目から表示したいものを自由に選択できるようになりました。
Kompira cloudの登録ユーザのプロフィール情報 (表示名、メールアドレス、パスワード) を編集できるようになりました。
これまで、Kompira cloudとksocketが連携してサーバやネットワーク機器などの情報を収集する機能を「構成管理」としていましたが、 この度「Kompira cloud Sonar」と改めさせて頂くことに致しました。
これにあわせて、Kompira cloud上の表示名も「Sonar」に変更しております。
Kompira cloudでは、「Sonar」の他にも、運用をより便利にできるサービスをリリースできるよう計画しております。
引き続き、Kompira cloudをよろしくお願いいたします。
Kompira cloudでは、ksocketを使用して収集したノード情報を、様々な条件で検索することができます。
Kompira cloudにログイン後、画面左側のアイコンから検索画面を表示することができます。
検索フォーム欄の下には、検索クエリのチートシートが表示されています。
例えば「CentOS」のノードだけを探したい場合、 cent
とだけ入力すると、OS名、ホスト名、ベンダ名、パッケージ情報などの構成情報の中に cent
という文字列が含まれるノードを全て探します。
system:centos
のように、 system:
というキーワードを指定すれば、「機種・OS名」の項目の中だけに限定して centos
という文字列が含まれるノードのみを探すことができます。
指定できるキーワードには以下のようなものがあります。
キーワード | 例 | 意味 |
---|---|---|
system | system:CentOS |
システム名に CentOS を含むノードを検索 |
addr | addr:10.10.0.3 |
IP アドレスに 10.10.0.3 を含むノードを検索 |
host | host:dns.your.domain.com |
ホスト名に dns.your.domain.com を含むノードを検索 |
macaddr | macaddr:aa:bb:cc:dd:ee:ff |
MAC アドレスに aa:bb:cc:dd:ee:ff を含むノードを検索 |
nicVendor | nicVendor:vmware |
NIC ベンタ名に vmware を含むノードを検索 |
package | package:httpd |
httpd というパッケージを持つノードを検索 |
package (バージョン指定) | package:httpd:2.6 |
httpd のバージョン 2.6 を持つノードを検索 |
windowsUpdate | windowsUpdate:KB3124263 |
KB3124263 という Windows アップデートを持つノード検索 |
serial | serial:4D9569ER0069B |
シリアル番号に 4D9569ER0069B を含むノードを検索 |
さらに、AND/ORや「~を含まない」という検索を行うこともできます。
例 | 意味 |
---|---|
-system:ubuntu |
システム名に ubuntu を含まないノードを検索 |
host:fixpoint AND package:apache |
ホスト名に fixpoint を含み apache を持つノードを検索 |
package:nginx OR package:apache |
nginx か apache を持つノードを検索 |
host:fixpoint AND (package:nginx OR package:apache) |
ホスト名に fixpoint を含み nginx か apache を持つノードを検索 |
system:"windows server 2016" AND -windowsUpdate:KB3124263 |
"windows server 2016" だが KB3124263 が適用されていないノードを検索 |
これにより、Kompira cloudで管理しているノードを条件によって簡単に見つけることができます。
実践的な例として、ある脆弱性が発見されたため、自分が管理しているサーバ群が脆弱性を持っていないか探さなければいけない、という状況を考えてみましょう。
最も代表的な脆弱性情報サイトであるCVE - Common Vulnerabilities and Exposuresでは、脆弱性情報がCVE番号 (CVE-XXXX-YYYY) で管理されており、ある脆弱性に関する「どの環境下、どのアプリケーションに含まれているものか」「攻撃の成立条件」「対策方法」などの情報がまとめられています。
例えば、適当な例として CVE-2018-12882 という脆弱性を見てみましょう。 この脆弱性はPHPに関するもので、PHP 7.2.7までの7.2.xに含まれます。
この脆弱性を検索機能で見つけるには、単に php
と検索してもよいですし、より厳密に検索させたいのであれば package:php:7.2
と書くこともできます。
また、この脆弱性に対する対応方法はRed Hat/CentOS, Ubuntu, Debian など OSごとにそれぞれ公開されているため、以下のようにOSごとに結果を表示させるのも有効です。
package:php:7.2 and system:ubuntu
package:php:7.2 and system:debian
package:php:7.2 and (system:"red hat" or system:centos)
管理しているサーバ・ネットワーク機器が数百~数千単位になると、「1台1台ログインして脆弱性が含まれていないか確認する」という方法ではほとんど管理できなくなります。
Kompira cloudでは、構成情報が自動収集される環境下で様々な検索を簡単に試すことができるため、管理している機器台数が多いほどその効果も大きくなります。
WinRM 接続の有効化の方法 - Kompira cloud Blog
上記記事にて、手動によってWinRM接続の有効化手順を紹介しました。 今回、上記手順をPowerShell用のスクリプトとして用意しましたので、ご紹介します。
Releasesページ より最新のファイルをダウンロードし、ksocketからのWinRMアクセスを有効にしたいWindowsに配置してください。
Setup-WinRMConfiguration.bat
を管理者権限で実行してください。
実行するとコンソールが開き、アカウント名の入力を求めます。
コンピュータに登録されたアカウント名を入力してください。
WinRM接続のための設定を開始します。よろしいですか (y/n)?y アカウント名を入力してください。 アカウント名は「コンピュータ名\アカウント名」または「ドメイン名\アカウント名」で指定できます。 >
アカウント名を入力すると、そのアカウントでのWinRMアクセスに必要な設定が自動で行われます。
WinRM サービスは、既にこのコンピューターで実行されています。 このコンピューター上でのリモート管理には、WinRM が既に設定されています。 Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed Service RootSDDL = O:NSG:BAD:P(A;;GR;;;IU)(A;;GA;;;BA)(A;;GXGR;;;S-1-5-21-1561492669-3598970178-1692085620-1001)(A;;GXGR;;;S-1-5-21-1561492669-3598970178-1692085620-1002)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) MaxConcurrentOperations = 4294967295 MaxConcurrentOperationsPerUser = 1500 EnumerationTimeoutms = 240000 MaxConnections = 300 MaxPacketRetrievalTimeSeconds = 120 AllowUnencrypted = true Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true WinRMサービスを有効化しました WinRM RootSDDLセキュリティ設定を更新しました WMIセキュリティ設定を更新しました WinRM接続の設定が完了しました。セットアップを終了します。 続行するには何かキーを押してください . . .
上記のようなメッセージが出力された場合、設定は完了となります。
ksocketにWinRMのアカウント設定を行い、スキャンをしてみましょう。