WindowsとLinuxのリモートログ収集
あらゆる企業が、自社ネットワークのデバイスからログデータを収集し、監視する必要があります。セキュリティの確保、課題の解決、セキュリティインシデントのフォレンジック分析を行うためです。このような目的で、ログ管理ツールやSIEMソリューションを使用する企業もあります。どのようなツールを使用するにしても、一元化された場所へのログ収集は、想像以上に難しい課題です。中央サーバーにログデータを送信するためのデバイス設定や、送信中のログのセキュリティ確保などを実施する必要があります。他のログ管理の工程と同様に、ログ収集は重要かつ困難です。
ログを収集する主な方法として、エージェントベース(監視対象にソフトウェアをインストールする方法)と、エージェントレス(インストールしない方法)の2つがあります。エージェントベースでログを収集する場合は、中央サーバーにログを送信して収集したい機器すべてに、エージェントをインストールする必要があります。保護されたネットワークからログデータを収集する場合は、エージェントベースのログ収集が使用されます。ネットワークが保護されていない場合、管理が煩雑なため、エージェントベースはあまり使用されません。代わりに、ネイティブのログ転送機能を使用してログをリモートで収集する方法が用いられます。
ネットワークデバイス、Linux/Unixマシンに関しては、ネイティブプラットフォームのログ転送機能を使用してSyslogデータを収集できます。一方、Windowsイベントログをリモートで収集する場合の手順は少し異なります。
このページでは、Syslogサーバーを使用して、Syslogデータをリモートで収集するための手順をご紹介します。
Syslogサーバーを使用してログをリモートで収集する方法
Syslogをリモートで収集するための手順は極めて単純で、2つのステップを踏む必要があります。すべてのログデータを一元的に収集するリモートサーバーを構成するステップと、ログデータをリモートサーバーに送信するデバイスを構成するステップです。
ステップ1:リモートサーバーを構成する
ログをリモートで収集するようにSyslogサーバーを構成する手順は、以下です。
- サーバーの/var/logフォルダ内の、/etc/rsyslog.confファイルに次の項目を追加します。「514」は、Syslogサーバーがログデータを受け取るTCPポート番号を表しています。
$ModLoad imtcp.so
$InputTCPServerRun 514
- 変数テンプレートを作成して、さまざまなホストから収集されたログの混在を防ぎます。/etc/rsyslog.confファイルに、次の項目を追加します。
$template
DynamicFile,"/var/log/loghost/%HOSTNAME%/%syslogfacility-text%.log"
*.* -?DynamicFile
- /var/logrotate.d/ syslog構成ファイルに、次の項目を追加し、新しいログファイルをログローテーションの対象とします。
/var/log/loghost/*/*.log
- リモートサーバーに静的IPアドレスを割り当てます。これにより、デバイスはリモートサーバーに接続して継続的にログデータを送信できるようになります。
- 次のルールを追加し、ファイアウォールがTCPポート514へのアクセスを許可するようにします。
# systemctl restart rsyslog
# firewall-cmd --add-port=514/udp --permanent
# firewall-cmd --add-port=514/tcp --permanent
# firewall-cmd --reload
ステップ2:Syslogデバイスを構成する
- /var/rsyslog.confファイルのRULESセクションに、次の項目を追加します。<IP address of the log server>は、Syslogサーバーの静的IPアドレスを表しています。また、「514」は、ログデータの送信に使用されるTCPポート番号を表しています。
*.* @@<IP address of the log server>:514
Windowsイベントログをリモートで収集する方法
Windowsイベントログにリモートでアクセスしてイベントログを収集する方法には、次のような方法があります。
- EvtOpenSessionを使ったAPIを用いて、リモート接続を確立し、イベントログ関数を呼び出す方法。
- WMIを使ってリモート接続を開始し、イベントログを収集するためのWMIタスクを実行する方法。
- イベントログの読み取り権限があるActive DirectoryアカウントでイベントビューアーのUIを使用し、イベントログにアクセスして収集する方法。
Windowsイベントログをリモートで収集するための前提条件
イベントビューアーを使用し、イベントログを収集するには、Active Directoryサービスアカウントと、Windowsイベントログにアクセスするための特定の権限が必要です。権限を付与するには、ドメインのローカルセキュリティポリシーまたはグループポリシーオブジェクト(GPO)を使用します。
Windowsイベントログにリモートでアクセスして収集するには、前提条件として次のようなステップを実行する必要があります。
サービスアカウントの作成と必要な権限の付与
- リモートコレクターでサービスアカウントを作成して構成します。別の方法として、適切なアクセス権があるコレクターマシンでアカウントを作成し、統合Active Directory(AD)認証を使用したログ収集も可能です。
- 次の組み込みドメイングループにアカウントを追加します。
- イベントログリーダー
- 分散COMユーザー
- サービスアカウントに「監査とセキュリティログの管理」特権を付与します。これを行うには、GPOを作成する方法と、ローカルセキュリティポリシーを使用する方法があります。
- ローカルセキュリティポリシーを使用して特権を付与する方法は、次のとおりです。
- [コンピューターの構成]>>[Windowsの設定]>>[セキュリティの設定]>>[ローカル ポリシー]>>[ユーザー権利の割り当て]の順に選択します。
- [ユーザー権利の割り当て]で、[監査とセキュリティログの管理]に移動し、サービスアカウントをリストに追加します。
- ローカルセキュリティポリシーを使用して特権を付与する方法は、次のとおりです。
- WMIプロトコルを使用してログをリモートで収集する場合は、次のステップを実行し、このアカウントにWMIアクセスを付与します。
- 「wmimgmt」を開いて右クリックし、[プロパティ]>[セキュリティ]>[詳細設定]の順に選択します。
- サービスアカウントに「メソッドの実行」、「プロバイダーによる書き込み」、「アカウントの有効化」、「リモートの有効化」を許可します
- このアカウントにレジストリのアクセス許可を付与します。
- レジストリ エディターを開いて[LOCAL_MACHINE]>[SYSTEM\CurrentControlSet\ Services\EventLog\Security]> 右クリック >[アクセス許可]を選択し、サービスアカウントを追加します。
- DCOM権限を割り当て、サービスアカウントのc:\windows\system32\winevtにアクセス許可を付与します。
これでサービスアカウントで、イベントビューアーのUIを使用してドメインからすべてのログを読み取れるようになりました。さらに次のステップを実行します。
- 接続の有効化:サービスアカウントが存在するマシンでWindowsファイアウォールのルールを編集します。
- [受信の規則]に移動し、[リモートイベントのログ管理(RPC)]を有効にします。
- プロトコルに[TCP]、プロファイルに[ドメイン]が指定されていることを確認します。
- Windowsのコレクターサービスの有効化:コレクターサービスがログファイルを受信できるようにするために、リモートサーバーのコレクターサービスを有効にする必要があります。これを行うには、リモートサーバーにローカル管理者またはドメイン管理者としてログインし、cmd. exeで次のコマンドを実行します。
wecutil qcin
- リモート接続のためのドメインコンピューターの有効化:Windowsリモート管理(WRM)は、ドメイン内のシステム間で情報を交換するためのプロトコルです。ログをリモートで収集するには、ログデータを交換できるように、各デバイスでWRMプロトコルを有効にします。WRMプロトコルを有効にするには、ローカル管理者またはドメイン管理者としてソースコンピューターにログインし、次のコマンドを実行します。
winrm quick config
- Windowsでのサブスクリプションの有効化:サブスクリプションは、ソースデバイスとコレクター(ログを収集するリモートサーバー)の関係を定義します。コレクターは、ネットワーク内のすべてのデバイスまたは特定のデバイスからログデータを受け取れます。リモートのログコレクターマシンでドメインコンピューターのサブスクリプションを有効にするには、次のステップを実行します。
- イベントビューアーで[サブスクリプション]を選択し、[操作]から[サブスクリプションの作成]を選択します。
- [サブスクリプションのプロパティ]ダイアログボックスで、次のようにします。
- サブスクリプションの名前を指定します。
- 説明を入力します。
- [宛先ログ]で[Forwarded Events]を選択します。
- リモートサーバーが各ソースからログを収集する場合は、[サブスクリプションの種類とソース コンピューター]で[コレクターによる開始]を選択します。この場合、ログを収集するための適切な特権を持つサービスアカウントが必要です。上記の説明を参照して、サービスアカウントの作成とアクセス許可の割り当ての詳細を確認してください。[ソースコンピューターによる開始]を選択すると、ソースデバイスはネイティブのログ転送機能を使用して、コレクターにログを転送します。
- 続いて表示されるダイアログボックスで、[コンピューターの選択]と[ドメインコンピューターの追加]をクリックします。
- ソースコンピューターの名前を入力し、[名前の確認]、[OK]の順にクリックします。
- [OK]をクリックし、[サブスクリプションのプロパティ]に戻ります。
- [イベントの選択]をクリックし、[クエリ フィルター]を開きます。
- [ログの日付]ドロップダウンから、ログを収集する期間を指定します。
- 収集するイベントログの種類([重大]、[警告]、[詳細]、[情報 ]、[エラー])を選択します。
- ソースからログを収集する方法([ログごと]または[ソースごと])を選択します。
- [サブスクリプションの詳細設定]ボタンをクリックし、ログ収集の詳細を設定します。このダイアログボックスでは、ログデータをリモートで収集するためのユーザーアカウントを指定できます。また、[イベント配信の最適化]で[帯域幅の最小化]、[待ち時間の最小化]、[標準]のいずれかを選択可能です。さらに、ログ収集に使用するプロトコルとポートを指定できます。