FJcloud実践
Zabbixでウイルス・スパイウエア対策サービス「ESET Server Security」のステータスを管理する方法
この記事は、ニフクラブログで2023-06-27に公開された記事を移転したものです。
こんにちは、CRE部 技術支援チームです。
FJcloud-V(旧ニフクラ)ではウイルス・スパイウエア対策ソリューションサービスとしてESET Server Securityを提供しています。(以降ESETと記載)
FJcloud-V(旧ニフクラ)で提供しているESETでは、複数サーバーをまとめて管理する機能は持っていないため、個々のサーバーにログインしてステータスを確認する必要があります。
今回はオープンソースの統合監視ツールであるZabbixとESETを組み合わせて、複数サーバーのESETのステータスをZabbixのWebインターフェース上で確認できるようにしたいと思います。
構成イメージ
前提条件
本記事は、以下の前提知識がある方を想定しています。
- FJcloud-V(旧ニフクラ)の基本的なコントロールパネルの操作、サービスを利用する知識
- Linuxサーバー、Windowsサーバーの基本的な操作、知識
- ESET、Zabbixの基本的な操作、知識
利用リソース
本検証を実施するにあたり、利用したFJcloud-V(旧ニフクラ)のリソース情報に関して以下に記載します。
リソース | リソース名 | 数量 |
---|---|---|
サーバー(ESETインストール環境)(サーバーOS:Windows Server 2022)(ESET Server Security for Microsoft Windows Server(Ver.10.0.12010.1)) | esetwin | 1 |
サーバー(ESETインストール環境)(サーバーOS:Red Hat Enterprise Linux 8.7)(ESET Server Security for Linux (Ver.9.1.96.0)) | esetrhel8 | 1 |
サーバー(ESETインストール環境)(サーバーOS:Red Hat Enterprise Linux 9.1)(ESET Server Security for Linux (Ver.9.1.96.0)) | esetrhel9 | 1 |
サーバー(Zabbix Serverインストール環境)(サーバーOS:Rocky Linux 8.7)(Zabbix 6.0) | zabbix01 | 1 |
検証概要
今回の検証ではZabbix serverをインストールしたサーバーを1台と、それぞれ異なるOS(Windows Server 2022、Red Hat Enterprise Linux 8.7、Red Hat Enterprise Linux 9.1)にESETをインストールしたサーバーを3台用意します。
ESETをインストールしたサーバーにはそれぞれZabbixエージェントをインストールしてZabbixの監視対象とします。
ESETのコマンドラインインターフェースを利用してZabbixからESETのステータスを取得・監視できるように設定します。
検証準備
仮想サーバーの作成
上記「利用リソース」に記載のサーバー4台を作成します。
作成方法の詳細は以下をご参照ください。
※各リソースのアクセス制限に関しては、FJcloud-V(旧ニフクラ)のファイアウォール等を用いて適切に設定します。
ESETのインストール
「esetwin」「esetrhel8」「esetrhel9」の3台にESETをインストールします。
インストール手順は対象OSに合わせて公式のドキュメントをご確認ください。
ESET Server Security for Microsoft Windows Server
ESET Server Security for Linux
Zabbixのインストール
最初に「zabbix01」 にZabbix Serverをインストールします。
次に「esetwin」「esetrhel8」「esetrhel9」にZabbixエージェントをインストールします。
インストール手順や基本的な初期設定方法については公式サイト等でご確認ください。
ESET監視の設定(Windows編)
ここからESETインストール環境のZabbixの設定を作成します。
WindowsとLinuxでは設定内容が異なるので、Linuxでの設定方法は ESET監視の設定(Linux編)をご確認ください。
今回の検証ではESETの以下の情報を監視する設定を行います。
・検出エンジンのバージョンを取得し、1週間以上変化が無かったときにトリガーで検知する
・ログを確認し、検出イベントが発生したときにトリガーで検知する
WindowsではZabbixエージェントから直接ESETのコマンドラインインターフェース(ESET Shell)を実行することができなかったため、「タスクスケジューラ」を使って必要な情報を出力するスクリプトを定期的に実行し、出力されたファイルをZabbixエージェントで監視する構成にします。
コマンドラインインターフェース(ESET Shell)の詳細はESETオンラインヘルプをご確認ください。
スクリプトの作成
タスクスケジューラで実行するスクリプトを作成します。
スクリプト名と実行することで出力されるファイル名は以下の通りです。
今回は「c:\temp」に作成します。
スクリプトファイル | 出力ファイル | 用途 |
---|---|---|
c:\temp\eset_about.bat | c:\temp\version.txt | バージョン情報の出力 |
c:\temp\eset_detections.bat | c:\temp\detections.txt | 検出ログの出力 |
eset_about.bat
@echo off
eshell about > c:\temp\version.txt
「eshell about」でESETの各モジュールのバージョン情報を取得しています。
eset_detections.bat
@echo off
SET LOGFILE="c:\temp\detections.txt"
eshell tools log detections | findstr /R "^[0-9]" > %LOGFILE%.temp
sort %LOGFILE%.temp > %LOGFILE%
del %LOGFILE%.temp
「eshell tools log detections」で検出ログを取得しています。
結果のソート順が降順(新しいログが上)になっているため、Zabbixのログ監視の仕様に合うように昇順(新しいログが下)になるようにソートしています。
スクリプトをタスクスケジューラに設定
作成したスクリプトを定期実行するようにタスクスケジューラに設定します。
以下の例では eset_about.bat を10分ごと、eset_detections.bat を5分ごとに実行するようにしています。
設定が完了したら、出力ファイルが定期的に出力されていることを確認します。
zabbix_agentd.conf の設定
Zabbixでバージョン情報を出力したファイルの必要な部分を取得できるように UserParameter を設定します。
UserParameter=eset.detection-engine,powershell -Command "Select-String -Path \"c:\temp\version.txt\" -Pattern '検出エンジン' -Encoding default| Out-String -Stream | % {$_.replace('検出エンジン: ','')}"
ファイル(c:\temp\version.txt)から必要な部分を抜き出しています。
confファイルの編集後、設定を反映させるために Zabbixエージェントを再起動します。
「Windows 管理ツール」から「サービス」を開いて「Zabbix Agent」を選択して「サービスの再起動」を選択します。
Zabbix のテンプレート設定
以下のテンプレートのyamlファイルを作成して、ZabbixのWebインターフェースでインポートします。
zbx_template_eset_windows.yaml
クリックで展開
zabbix_export:
version: '6.0'
date: '2023-06-13T08:37:47Z'
groups:
-
uuid: 7df96b18c230490a9a0a9e2307226338
name: Templates
templates:
-
uuid: c3f78df67467477ea75abdd6128fb2a1
template: 'eset check - windows'
name: 'eset check - windows'
groups:
-
name: Templates
items:
-
uuid: efc439e0c7c2431a81295b86e2c12f42
name: eset.detection-engine
key: eset.detection-engine
delay: 10m
history: 7d
trends: '0'
value_type: CHAR
triggers:
-
uuid: cabf1a06bd694c09ae51f168c808b7cf
expression: 'changecount(/eset check - windows/eset.detection-engine,1w)=0'
name: 'check detection-engine'
priority: WARNING
-
uuid: d56e4769efe3476e9bb277250bf02774
name: eset.detections
type: ZABBIX_ACTIVE
key: 'log[C:\temp\detections.txt,,shift_jis,1,all,,,mtime-noreread,]'
delay: 5m
history: 7d
trends: '0'
value_type: LOG
triggers:
-
uuid: b53b2ced153a4dd28570afedf327867b
expression: 'last(/eset check - windows/log[C:\temp\detections.txt,,shift_jis,1,all,,,mtime-noreread,])<>""'
name: 'detection log'
priority: WARNING
manual_close: 'YES'
インポート後、以下のようなテンプレートが利用可能になります。
Zabbixでの詳細な設定内容はインポートしたテンプレートをご確認ください。
テンプレートを対象ホストに適用すれば設定完了です。
ESET監視の設定(Linux編)
ここではRed Hat Enterprise Linux のESETインストール環境のZabbixの設定を作成します。
Red Hat Enterprise Linux は8.7、9.1のどちらでも設定方法は同じです。
Windows編と同様にESETの以下の情報を監視する設定を行います。
・検出エンジンのバージョンを取得し、1週間以上変化が無かったときにトリガーで検知する
・ログを確認し、検出イベントが発生したときにトリガーで検知する
LInuxではZabbixエージェントから直接ESETのコマンドラインインターフェースを実行して、結果をZabbixエージェントで監視する構成にします。
ESETで利用できるコマンドの詳細はESETオンラインヘルプの各ページをご確認ください。 一部コマンドはroot権限が必要なため、zabbixユーザーにsudo権限を付与する設定も行います。
※今回の検証ではSELinuxを無効にして実施しています。
zabbix_agentd.conf の設定
ZabbixでESETのコマンドを利用したデータ取得ができるように UserParameter を設定します。
UserParameter=eset.detection-engine,/bin/bash -l;/opt/eset/efs/bin/upd -l | grep "Detection engine"
UserParameter=eset.detections,/bin/bash -l;sudo /opt/eset/efs/bin/lslog -d -c | tail -n 1
「/opt/eset/efs/bin/upd -l」でESET各モジュールのバージョン情報を出力します。
「/opt/eset/efs/bin/lslog -d -c」で検出ログを出力します。こちらの結果は昇順になっており、最終行を値として採用しています。
confファイルの編集後、設定を反映させるために Zabbixエージェントを再起動します。
# systemctl restart zabbix-agent.service
sudoアクセス権限 の設定
検出ログの出力コマンド実行にroot権限が必要なため、zabbixユーザーに該当コマンドのみsudoアクセス権限を付けます。
# visudo
※以下の内容を追加する
zabbix ALL=NOPASSWD:/opt/eset/efs/bin/lslog
Zabbix のテンプレート設定
以下のテンプレートのyamlファイルを作成して、ZabbixのWebインターフェースでインポートします。
zbx_template_eset_linux.yaml
クリックで展開
zabbix_export:
version: '6.0'
date: '2023-06-13T04:45:40Z'
groups:
-
uuid: 7df96b18c230490a9a0a9e2307226338
name: Templates
templates:
-
uuid: 48aa330044614963a6a4c36c5c0d5339
template: 'eset check - linux'
name: 'eset check - linux'
groups:
-
name: Templates
items:
-
uuid: 20109f834fd5425fb2f5563a240f1f22
name: eset.detection-engine
key: eset.detection-engine
delay: 10m
history: 7d
trends: '0'
value_type: CHAR
triggers:
-
uuid: 8b725f399c624b25b4606bd8ba30b717
expression: 'changecount(/eset check - linux/eset.detection-engine,1w,)=0'
name: 'check detection-engine'
priority: WARNING
-
uuid: 9869cef19914482ea9137f421a7659d7
name: eset.detections
key: eset.detections
delay: 5m
history: 7d
trends: '0'
value_type: CHAR
triggers:
-
uuid: 9131d007d66741bea13322317151c434
expression: 'change(/eset check - linux/eset.detections)<>0'
name: 'detection log'
priority: WARNING
manual_close: 'YES'
インポート後、以下のようにテンプレートが利用可能になります。
Zabbixでの詳細な設定内容はインポートしたテンプレートをご確認ください。
テンプレートを対象ホストに適用すれば設定完了です。
動作確認
eicarテストファイルを利用してマルウェアを検出した際の動作を確認してみます。
テストファイルの作成方法についてはESETサポート情報をご確認ください。
任意の場所でeicarテストファイルを作成してしばらく待つと、以下のようにZabbixのトリガーで検知されます。
Zabbix上で最新データを見ることで内容も確認できます。
まとめ
今回はZabbixを利用してESETのステータス情報を取得する方法を検証しました。
通常だと各サーバーにログインしないとESETのステータスを確認することができませんが、ESETのコマンドラインインターフェースとZabbixを活用することで、情報を収集し1か所で確認できることがお分かりいただけたかと思います。
今回の設定対象は検出エンジンと検出ログだけでしたが、コマンドラインインターフェースで取得できる情報や可能な操作は他にもあるので、必要な要件に応じて利用を検討していただければと思います。
注意事項
- 本記事については検証結果の1つとなります。実際に利用される場合は、事前にそれぞれの要件を確認の上、実装してください。
- 本記事ではOS上の操作についても記載していますが、FJcloud-V(旧ニフクラ)ではOS以上はご利用者様の責任範囲となりますのでご留意ください。
- 本記事で記載した各サービス/FJcloud-V(旧ニフクラ)の機能等は、2023年6月時点の情報です。利用時には各サービス/FJcloud-V(旧ニフクラ)の機能の最新情報をご確認いただきご利用ください。