Fortinet FortiClient のログを収集する
このドキュメントでは、Bindplane エージェントを使用して Fortinet FortiClient ログを Google Security Operations に取り込む方法について説明します。
FortiClient は、Windows、macOS、Linux、Chromebook のエンドポイントにウイルス対策、ウェブ フィルタリング、VPN、脆弱性スキャン、アプリケーション ファイアウォール機能を提供するエンドポイント セキュリティ ソリューションです。FortiClient は、FortiClient EMS(Endpoint Management Server)を通じて一元管理され、セキュリティ ポリシーと構成プロファイルをエンドポイントにプッシュします。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Windows Server 2016 以降、または systemd を使用する Linux ホスト
- Bindplane エージェントと FortiClient エンドポイント間のネットワーク接続
- プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- FortiClient EMS 管理コンソールへの特権アクセス
- ライセンスが付与された FortiClient エンドポイントを含む FortiClient EMS バージョン 7.0 以降
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [収集エージェント] に移動します。
- [ダウンロード] をクリックして、取り込み認証ファイルをダウンロードします。
Bindplane エージェントがインストールされるシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
[組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sc query observiq-otel-collector
サービスは RUNNING と表示されます。
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sudo systemctl status observiq-otel-collector
サービスが [アクティブ(実行中)] と表示されます。
その他のインストール リソース
その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを見つける
Linux:
sudo nano /etc/bindplane-agent/config.yaml
Windows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
構成ファイルを編集します。
config.yaml の内容全体を次の構成に置き換えます。
receivers:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/forticlient:
compression: gzip
creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
customer_id: 'your-customer-id-here'
endpoint: malachiteingestion-pa.googleapis.com
log_type: FORTINET_FORTICLIENT
raw_log_field: body
ingestion_labels:
env: production
source: forticlient
service:
pipelines:
logs/forticlient_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/forticlient
構成パラメータ
各プレースホルダを次のように置き換えます。
レシーバーの構成:
listen_address: リッスンする IP アドレスとポート。0.0.0.0:514を使用して、ポート 514 のすべてのインターフェースをリッスンします。
エクスポータの構成:
creds_file_path: 取り込み認証ファイルのフルパス:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: Google SecOps コンソールの顧客 IDendpoint: リージョン エンドポイント URL:- 米国:
malachiteingestion-pa.googleapis.com - ヨーロッパ:
europe-malachiteingestion-pa.googleapis.com - アジア:
asia-southeast1-malachiteingestion-pa.googleapis.com - 完全なリストについては、リージョン エンドポイントをご覧ください。
- 米国:
log_type:FORTINET_FORTICLIENTingestion_labels: YAML 形式のオプションのラベル
構成ファイルを保存する
編集が完了したら、ファイルを保存します。
- Linux:
Ctrl+O、Enter、Ctrl+Xの順に押します。 - Windows: [ファイル>保存] をクリックします。
Bindplane エージェントを再起動して変更を適用する
Linux
sudo systemctl restart observiq-otel-collectorサービスが実行されていることを確認します。
sudo systemctl status observiq-otel-collectorログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -f
Windows
次のいずれかのオプションを選択します。
管理者としてコマンド プロンプトまたは PowerShell を使用します。
net stop observiq-otel-collector && net start observiq-otel-collectorServices コンソールを使用する場合:
Win+Rキーを押し、「services.msc」と入力して Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
右クリックして [再起動] を選択します。
サービスが実行されていることを確認します。
sc query observiq-otel-collectorログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
ログを Bindplane エージェントに送信するように FortiClient エンドポイント ロギングを構成する
FortiClient エンドポイント ロギングは、XML 構成でエンドポイント プロファイルを編集することにより、FortiClient EMS を介して一元的に構成されます。EMS はロギング構成を FortiClient エンドポイントにプッシュします。これにより、ログが Bindplane エージェントの syslog リスナーに直接送信されます。
FortiClient EMS にログインする
- FortiClient EMS ウェブ コンソールにログインします。
- [Endpoint Profiles] > [Manage Profiles] に移動します。
エンドポイント プロファイルを編集または作成する
- 編集する既存のプロフィールを選択するか、[追加] をクリックして新しいプロフィールを作成します。
- [プロファイル名] フィールドに、わかりやすい名前(
Chronicle-Logging-Profileなど)を入力します。 - [詳細設定] をクリックします。
- [XML 構成] タブをクリックします。
- [編集] をクリックします。
XML でリモート ロギングを構成する
EMS には 2 つのペインが表示されます。右側のペインを使用して、XML 構成を編集します。
<system> 内の <log_settings> セクションを見つけます。存在しない場合は追加します。<log_settings> 内で、<remote_logging> セクションを見つけるか追加して、次のように構成します。
<forticlient_configuration>
<system>
<log_settings>
<onnet_local_logging>1</onnet_local_logging>
<level>6</level>
<log_events>ipsecvpn,sslvpn,scheduler,update,firewall,av,proxy,shield,webfilter,endpoint,fssoma,configd,vuln,sandboxing,antiexploit</log_events>
<remote_logging>
<log_upload_enabled>1</log_upload_enabled>
<log_protocol>syslog</log_protocol>
<netlog_server>192.168.1.100</netlog_server>
<netlog_categories>7</netlog_categories>
<log_upload_freq_minutes>5</log_upload_freq_minutes>
</remote_logging>
</log_settings>
</system>
</forticlient_configuration>
構成パラメータ:
<log_upload_enabled>: リモート ロギングを有効にするには、1に設定します。<log_protocol>: ログを syslog サーバーに送信するには、syslogに設定します。代わりにfazを使用してログを FortiAnalyzer に送信します。<netlog_server>: Bindplane エージェント ホストの IP アドレスを入力します(例:192.168.1.100)。このパラメータは、<log_protocol>がsyslogに設定されている場合にのみ使用されます。<netlog_categories>: アップロードするログカテゴリのビットマスクを入力します。1= トラフィック ログ2= 脆弱性ログ4= イベントログ7= すべてのカテゴリ(1 + 2 + 4)
<log_upload_freq_minutes>: ログのアップロード頻度を分単位で入力します(例: 5 分ごとに5)。<level>: FortiClient のロギング レベル。次のいずれかを入力します。0= 緊急1= アラート2= 重大3= エラー4= 警告5= 通知6= 情報(推奨)7= デバッグ
<log_events>: ログに記録する FortiClient イベントまたはプロセスのカンマ区切りリスト。キャプチャするイベント(ipsecvpn,sslvpn,firewall,av,webfilter,endpointなど)を含めます。
プロファイルを保存する
- [XML をテスト] をクリックして、XML 構成を検証します。
- [保存] をクリックしてプロファイルを保存します。
エンドポイントにプロファイルを適用する
- [Endpoint Policies] > [Manage Policies] に移動します。
- 既存のポリシーを選択するか、[追加] をクリックして新しいポリシーを作成します。
- [Profile] プルダウンで、作成または編集したプロファイルを選択します。
- [エンドポイント グループ] セクションで、ポリシーを適用するエンドポイント グループを選択します。
- [保存] をクリックします。
EMS は、次のテレメトリー通信でプロファイル構成をエンドポイントにプッシュします。FortiClient エンドポイントが、Bindplane エージェントの syslog リスナーにログの送信を開始します。
ログ転送を確認する
Bindplane エージェント ホストで、エージェント ログを調べて、ログが受信されていることを確認します。
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"FortiClient エンドポイントで、FortiClient ログを確認して、リモート ロギングが有効になっていることを確認します。
Windows:
C:\Program Files\Fortinet\FortiClient\logs\macOS:
/Library/Application Support/Fortinet/FortiClient/logs/Linux:
/var/log/forticlient/Google SecOps コンソールで、FortiClient ログが取り込まれていることを確認します。
- [検索] に移動します。
- FortiClient ログの検索クエリを入力します(例:
metadata.log_type = "FORTINET_FORTICLIENT")。 - ログが検索結果に表示されることを確認します。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| emsserial、devid、usingpolicy、itime、fctsn、logver、site、fctver、browsetime、event_id、SubjectUserName、SubjectLogonId、ThreadID | additional.fields | 各フィールドのキーと値で作成されたラベルが additional.fields に統合されます |
| timestamp | metadata.collected_timestamp | UNIX タイムスタンプとして解析 |
| ts | metadata.event_timestamp | 「MMM d HH:mm:ss」、「MMM d HH:mm:ss」、「yyyy-MM-dd HH:mm:ss」の形式を使用して日付フィルタで解析されます |
| deviceip、client_ip、devicemac、hostname、user、uid | metadata.event_type | ユーザー/UID が存在し、マシン ID が存在する場合は USER_RESOURCE_ACCESS、マシン ID が存在する場合は USER_UNCATEGORIZED、それ以外の場合は GENERIC_EVENT に設定します。 |
| eventtype | metadata.product_event_type | 値を直接コピー |
| id | metadata.product_log_id | 文字列に変換され、値がコピーされました |
| サービス | network.application_protocol | 大文字に変換し、リストと一致する場合は事前定義されたプロトコルに設定します(例: 「22」、「SSH」、「SSHD」の場合は「SSH」、「80」、「8080」、「HTTP」の場合は「HTTP」)、拡張リストにある場合はサービス、それ以外の場合は空 |
| direction | network.direction | (?i)inbound と一致する場合は INBOUND、(?i)outbound と一致する場合は OUTBOUND に設定します。 |
| proto | network.ip_protocol | proto == "6" の場合は "TCP" に設定 |
| rcvdbyte | network.received_bytes | uinteger に変換され、空または 0 でない場合は値がコピーされます |
| sentbyte | network.sent_bytes | uinteger に変換され、空または 0 でない場合は値がコピーされます |
| sessionid | network.session_id | 値を直接コピー |
| pcdomain | principal.administrative_domain | 値を直接コピー |
| srcproduct | principal.application | 値を直接コピー |
| hostname | principal.hostname | 値を直接コピー |
| deviceip、client_ip | principal.ip | deviceip の値(空でない場合)、または client_ip の値(有効な IP の場合) |
| devicemac | principal.mac | MAC 形式に変換され、有効な場合は値がコピーされます |
| os、source | principal.platform | os/source が (?i)windows と一致する場合は WINDOWS、(?i)mac|ios と一致する場合は MAC、(?i)linux と一致する場合は LINUX に設定します。 |
| source_ver | principal.platform_version | 値を直接コピー |
| srcport | principal.port | 整数に変換され、値がコピーされました |
| ProcessId | principal.process.pid | 値を直接コピー |
| srcname、source_type、type | principal.resource.attribute.labels | 各フィールドのキーと値で作成されたラベルが attribute.labels に統合されます |
| devname | principal.resource.name | 値を直接コピー |
| ProviderGuid | principal.resource.product_object_id | 値を直接コピー |
| subtype | principal.resource.resource_subtype | 値を直接コピー |
| URL | principal.url | 値を直接コピー |
| uid、fctuid | principal.user.product_object_id | uid が空でない場合は uid の値、それ以外の場合は fctuid |
| ユーザー | principal.user.user_display_name | 値を直接コピー |
| ユーザー | principal.user.userid | 値を直接コピー |
| SubjectUserSid | principal.user.windows_sid | SID の正規表現に一致する場合に値をコピー |
| utmaction | security_result.action | [accept,allow,passthrough,pass,permit,detected] の場合は ALLOW、[deny,dropped,blocked,block] の場合は BLOCK、それ以外の場合は UNKNOWN_ACTION に設定します。 |
| utmevent | security_result.category_details | 値を直接コピー |
| utmaction | security_result.description | 「utmaction: |
| userinitiated | security_result.detection_fields | キー「userinitiated」と userinitiated の値で作成されたラベル(マージ済み) |
| レベル | security_result.severity | level == "info" の場合、INFORMATIONAL に設定 |
| 脅威 | security_result.threat_name | 値を直接コピー |
| emshostname、remotename | target.hostname | emshostname が空でない場合はその値、それ以外の場合は remotename |
| dstip | target.ip | dstip から有効な IP を抽出しました |
| dstport | target.port | 整数に変換され、0 でない場合は値がコピーされます |
| metadata.product_name | 「FORTINET_FORTICLIENT」に設定 | |
| metadata.vendor_name | 「FORTINET_FORTICLIENT」に設定 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。