リスク軽減と復旧操作
データのバックアップ、ログの監視、セキュリティー更新の管理
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は質の高いドキュメントを提供することに尽力しており、皆様からのフィードバックを大切にしています。改善にご協力いただくため、Red Hat Jira トラッキングシステムを通じてご提案やエラー報告をお寄せください。
手順
Jira の Web サイトにログインします。
アカウントがない場合、アカウント作成オプションを選択します。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ウィンドウ下部の Create をクリックします。
第1章 システムの復旧および復元 リンクのコピーリンクがクリップボードにコピーされました!
システムのバックアップと復元を行うために、Red Hat Enterprise Linux では Relax-and-Recover (ReaR) ユーティリティーが提供されています。
ReaR は、障害復旧ソリューションとしてだけでなく、システム移行にも利用できます。
ReaR を使用すると、以下のタスクを実行できます。
- システムバックアップと起動可能なイメージを作成し、そのイメージを使用して既存のバックアップからシステムを復元します。
- オリジナルのストレージレイアウトを複製します。
- ユーザーおよびシステムファイルを復元します。
- システムを別のハードウェアに復元します。
また、障害復旧の場合は、特定のバックアップソフトウェアを ReaR に統合することもできます。
1.1. ReaR の設定とバックアップの手動作成 リンクのコピーリンクがクリップボードにコピーされました!
レスキューシステムを作成するには、まず Relax-and-Recover (ReaR) ユーティリティーのパッケージをインストールし、ReaR の設定を調整し、手動でシステムバックアップを作成します。これにより、システムは潜在的な障害復旧作業に備えることができます。
前提条件
バックアップ復元計画に基づき、必要な設定を完了した。
注記以下の手順では、
NETFSバックアップ方式を使用した設定例を示します。これは ReaR に完全に統合されたビルトインの手法であり、BACKUP_URL設定で指定された場所にバックアップを作成します。デフォルトでは、システムのtarユーティリティーを使用して、backup.tar.gzという名前のバックアップアーカイブを作成します。Intel 64 または AMD64 (x86-64) ハードウェアアーキテクチャー、または IBM POWER リトルエンディアン (ppc64le) アーキテクチャーを使用している。
IBM Z アーキテクチャーを使用している場合は、64 ビット IBM Z アーキテクチャーでの ReaR レスキューイメージの使用 を参照してください。
64 ビット ARM アーキテクチャーの場合、現時点で ReaR は テクノロジープレビュー としてのみ提供されています。
手順
ReaR ユーティリティーをインストールします。
# dnf install rear以下の例のように、任意のエディターで ReaR 設定ファイルを変更します。
# vi /etc/rear/local.confバックアップ設定の詳細を
/etc/rear/local.confに追加します。たとえば、NETFSバックアップ方式の場合は、次の行を追加します。BACKUP=NETFS OUTPUT=ISO BACKUP_URL=<data-backup-location> OUTPUT_URL=<rescue-image-location><data-backup-location> は
tarデータバックアップの場所に、<rescue-image-location> はレスキューシステムのISOイメージの場所に置き換えます。以下に例を示します。BACKUP=NETFS OUTPUT=ISO # Backup is stored on an external drive BACKUP_URL=file:///run/media/user/external_drive/server_backups/ # The ISO is stored on a dedicated NFS share OUTPUT_URL=nfs://backup-server.local/exports/rear//etc/rear/local.confファイルの構文、およびBACKUP_URLとOUTPUT_URLのサポートされている形式の詳細は、rear(8)の man ページを参照してください。/etc/rear/local.confで使用できる設定変数のリストと、それらのデフォルト値については、/usr/share/rear/conf/default.confファイルを参照してください。新規バックアップの作成時に以前のバックアップアーカイブを維持するように ReaR 設定を行うには、以下の行を設定ファイルに追加します。
NETFS_KEEP_OLD_BACKUP_COPY=y増分バックアップ (実行するたびに変更されたファイルのみがバックアップされる) を設定する場合は、以下の行を追加します。
BACKUP_TYPE=incrementalUEFI ファームウェアで ReaR レスキューシステムを起動する予定がある場合は、起動が失敗しないように、次の行を追加します。
SECURE_BOOT_BOOTLOADER=/boot/efi/EFI/redhat/shimx64.efi
復元計画に基づき、レスキューシステムとデータバックアップを作成します。たとえば、
NETFSバックアップ方式を使用する場合は、次のコマンドを実行します。# rear mkbackupシステムが 64 ビット ARM アーキテクチャー (
aarch64) を使用している場合は、代わりに次の行を使用します。SECURE_BOOT_BOOTLOADER=/boot/efi/EFI/redhat/shimaa64.efi-
レスキューシステムのみを作成する必要がある場合は、代わりに
rear mkrescueコマンドを使用します。 -
データバックアップのみを作成する必要がある場合は、代わりに
rear mkbackuponlyコマンドを使用します。
-
レスキューシステムのみを作成する必要がある場合は、代わりに
オプション: 定期的な自動 ReaR バックアップをスケジュールします。ユースケースに応じて、さまざまなバックアップ方法を選択できます。以下に例を示します。
/etc/cron.d/rearという crontab ファイルを作成し、以下の行を追加します。30 1 * * * /usr/sbin/rear mkbackupこれにより、毎日午前 1 時 30 分に
rear mkbackupコマンドが実行され、/etc/rear/local.confファイルで設定された場所にレスキューシステムとデータバックアップが作成されます。- 外部バックアップ方式を使用する場合は、外部バックアップをスケジュールします。詳細は、ReaR で使用しているバックアップ方法により異なります。
検証
レスキューシステムの ISO イメージを DVD に書き込み、その DVD を使用して起動を試みます。
起動後に Relax-and-Recover インターフェイスが表示されれば、レスキュー DVD は正常に動作しています。
- ReaR インターフェイスを使用してシステムを復元し、復元されたシステムが正常に動作するかテストします。
1.2. 64 ビット IBM Z アーキテクチャーで ReaR レスキューイメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
Relax-and-Recover (ReaR) レスキューイメージを使用することで、IBM Z アーキテクチャー上で稼働するシステムを迅速に復旧および復元できます。
ReaR は、64 ビット IBM Z アーキテクチャー上で基本的な機能を提供し、RHEL 10 で完全にサポートされています。IBM Z では、z/VM 環境でのみ ReaR レスキューイメージを作成できます。論理パーティション (LPAR) のバックアップと復旧はサポートされていません。
現在利用できる出力方法は、Initial Program Load (IPL) のみです。IPL は、zipl ブートローダーで使用できるカーネルと初期 RAM ディスク (initrd) を生成します。
前提条件
-
rearパッケージがインストールされている。
手順
ReaR をインストールします。
# dnf install rear次の変数を
/etc/rear/local.confファイルに追加し、64 ビット IBM Z アーキテクチャー上でレスキューイメージを生成するように ReaR を設定します。-
IPL出力方式を設定するには、設定ファイルに `OUTPUT=IPL` という行を追加します。 バックアップメソッドとバックアップ先を設定するには、
BACKUP変数およびBACKUP_URL変数を追加します。以下に例を示します。BACKUP=NETFS BACKUP_URL=nfs://<nfsserver_name>/<share_path>重要ローカルバックアップストレージは、現在、64 ビットの IBM Z アーキテクチャーではサポートされていません。
-
オプション:
OUTPUT_URL変数を設定して、カーネルファイルとinitrdファイルを保存することもできます。初期設定では、OUTPUT_URLはBACKUP_URLに合わせて配置されています。
-
バックアップとレスキューのイメージの作成を実行するには、次のコマンドを実行します。
# rear mkbackupこれにより、
BACKUP_URL変数またはOUTPUT_URL(設定されている場合) 変数で指定された場所にカーネルファイルと initrd ファイルが作成され、指定されたバックアップ方法を使用してバックアップが作成されます。警告レスキュープロセスは、システムに接続したすべての DASD (Direct Attached Storage Devices) を再フォーマットします。システムのストレージデバイスに貴重なデータが存在する場合は、システムの復旧を行わないでください。これには、レスキュー環境で起動するのに使用された
ziplブートローダー、ReaR カーネル、およびinitrdで準備されたデバイスも含まれます。必ずコピーを保管してください。-
システムを復元するには、以前に作成した ReaR カーネルファイルおよび
initrdファイルを使用し、ziplブートローダー、カーネル、およびinitrdで準備した DASD (Direct Attached Storage Device) または FCP (Fibre Channel Protocol) 接続の SCSI デバイスから起動します。 -
レスキューカーネルと
initrdが起動すると、ReaR レスキュー環境が起動します。システムの復元を続行します。
次のステップ
1.3. ReaR を使用してシステムを復旧する リンクのコピーリンクがクリップボードにコピーされました!
現在のハードウェアに障害が発生した場合に新しいハードウェア上で RHEL システムを復旧するには、Relax-and-Recover (ReaR) ユーティリティーを使用します。
前提条件
- ReaR をセットアップし、バックアップを作成した。手順については、ReaR のセットアップとバックアップの手動作成 を参照してください。
- システムを復旧させた後、そのシステムを実行するための正常に動作するハードウェアがある。
システム復旧に使用する予定のハードディスクに、重要なデータは含まれていない。
重要ReaR を使用してハードディスク上のシステムを復旧すると、現在ディスクに保存されているすべてのデータが消去されます。
手順
- 新しいハードウェア上でレスキューシステムを起動します。たとえば、レスキューシステムの ISO イメージを DVD に書き込み、その DVD から起動できます。
- Relax-and-Recover 起動メニューで、復旧環境を起動するオプションを選択します。
RESCUEプロンプトで、rear recoverコマンドを実行します。レスキューシステムは、パーティションのレイアウトとファイルシステムを再構築します。
データバックアップから
/mnt/local/ディレクトリーにユーザーおよびシステムファイルを復元します。たとえば、
NETFS方式を使用してバックアップを作成した場合、ReaR は自動的に復元プロセスを実行します。ただし、バックアップ設定によっては、復元プロセスのいずれかの段階で ReaR が確認を求める場合があります。
1.4. ReaR バックアップの内容の変更 リンクのコピーリンクがクリップボードにコピーされました!
Relax-and-Recover (ReaR) ユーティリティーを使用してレスキューシステムとデータバックアップを作成する場合、特定のファイルとストレージコンポーネントはバックアップに含まれません。バックアップから除外するデータやデバイスを調整するには、ReaR の設定を変更します。
レスキューイメージを作成する際に、ReaR は /var/lib/rear/layout/disklayout.conf レイアウトファイルを作成し、そのファイルをレスキューイメージに埋め込みます。
復旧プロセス中、ReaR はレイアウトファイルを使用して、復旧イメージが作成された元のシステムのストレージレイアウトを、復旧されたシステムのディスク上に再作成します。ストレージレイアウトには、パーティション、ボリュームグループ、論理ボリューム、ファイルシステム、その他のストレージコンポーネントが含まれます。
前提条件
- システムに ReaR をセットアップした。手順については、ReaR のセットアップとバックアップの手動作成 を参照してください。
手順
現在のレイアウトファイルを生成します。
# rear savelayoutレイアウトファイルを開き、その設定を確認します。以下に例を示します。
# vi /var/lib/rear/layout/disklayout.confバックアップから特定のファイルやストレージデバイスを除外するには、レスキューイメージの作成時にそれらを無視するように ReaR を設定します。
ReaR のローカル設定ファイルを開いて編集します。以下に例を示します。
# vi /etc/rear/local.confレイアウトファイルから除外するストレージデバイスを調整します。
/etc/rear/local.confファイルでは、以下のようなさまざまなexclude変数を使用できます。-
AUTOEXCLUDE_DISKS -
AUTOEXCLUDE_MULTIPATH -
AUTOEXCLUDE_PATH -
EXCLUDE_RECREATE
これらの変数の機能と構文、およびレイアウトファイルの詳細は、ReaR ユーザーガイドの
レイアウト設定の章を参照してください。このガイドはrearパッケージに同梱されており、/usr/share/doc/rear/user-guide/relax-and-recover-user-guide.htmlで入手できます。-
デフォルトでは、レイアウトファイルにローカルディスクベースのファイルシステムが含まれている場合、
rear mkbackupコマンドまたはrear mkbackuponlyコマンドを使用すると、そのファイルシステム上のすべてのファイルがバックアップされます。バックアップから除外する特定のファイルまたはディレクトリーツリーを設定するには、
BACKUP_PROG_EXCLUDE変数を使用します。BACKUP_PROG_EXCLUDEの値は、tar または rsync が使用する glob(3) スタイルのワイルドカードパターンの配列でなければなりません。設定ファイルを読み込む際にシェルがパターンを展開しないように、パターンを引用符で囲む必要があることに注意してください。この変数のデフォルト値は、
/usr/share/rear/conf/default.confファイルで設定されています。デフォルト値には、たとえば/tmp/*パターンが含まれています。このパターンは、/tmpディレクトリーの下にあるすべてのファイルとディレクトリーを除外しますが、/tmpディレクトリー自体は除外しません。他のファイルやディレクトリーを除外する必要がある場合は、変数にさらにパターンを追加します。デフォルト値を維持するために、変数はオーバーライドしないでください。
たとえば、ディレクトリー
/data/tempの下にあるすべてのファイルとディレクトリーを除外するには、次のように指定します。BACKUP_PROG_EXCLUDE+=( '/data/temp/*' )注記このようにマウントされた単一のファイルシステム内のすべてのファイルとディレクトリーを除外すると、復旧時に ReaR が再作成するファイルシステムは空になります。これは、一時データを格納した保存する必要のないファイルシステム、または ReaR とは独立した方法でバックアップされたデータに使用できます。
検証
次の手順を実行して、レイアウトファイルに必要なストレージコンポーネントのみが含まれているか検証します。
レイアウトファイルを再生成します。
# rear savelayout新しいレイアウトファイルを開き、設定に対する変更が意図したとおりの効果を発揮していることを確認します。
# vi /var/lib/rear/layout/disklayout.conf
バックアップから特定のファイルを除外するには、
rear mkbackupコマンドを使用します。ログに記録されているバックアップ除外パターンがリストされます。ログファイルは
/var/log/rearディレクトリーにあります。完全なシステム復旧を実行する前に、これを使用して除外ルールを確認します。たとえば、ログに次のエントリーが含まれているとします。2025-04-29 10:17:41.312431050 Making backup (using backup method NETFS) 2025-04-29 10:17:41.314369109 Backup include list (backup-include.txt contents): 2025-04-29 10:17:41.316197323 / 2025-04-29 10:17:41.318052001 Backup exclude list (backup-exclude.txt contents): 2025-04-29 10:17:41.319857125 /tmp/* 2025-04-29 10:17:41.321644442 /dev/shm/* 2025-04-29 10:17:41.323436363 /var/lib/rear/output/*この例では、
/tmp、/dev/shm、/var/lib/rear/outputディレクトリーの下にあるすべてのファイルとディレクトリーを除いて、ルートファイルシステム全体がバックアップの対象になります。
第2章 ログファイルを使用した問題のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
ログファイルを使用して、システムのトラブルシューティングと監視を行います。ログファイルには、組み込みの syslog プロトコルを使用して効率的に記録された、システム、カーネル、サービス、アプリケーションに関するメッセージが格納されています。
2.1. syslog メッセージを処理するサービス リンクのコピーリンクがクリップボードにコピーされました!
rsyslogd や journald など、syslog メッセージを処理するシステムサービスを特定します。これらのサービスは、セキュリティーに関連するすべてのシステムイベントを取得、処理、保存するために不可欠です。
以下は、syslog メッセージを処理するサービスです。
systemd-journaldデーモン以下のソースからメッセージを収集し、さらなる処理のために Rsyslog に転送します。
- カーネル
- ブートプロセスの初期段階
- 起動および実行時のデーモンの標準出力とエラー
- Syslog
rsyslogサービス-
syslog メッセージをタイプと優先度で分類し、
/var/logディレクトリー内のファイルに書き込みます。/var/logディレクトリーは、ログメッセージを永続的に保存します。
2.2. syslog メッセージを保存するサブディレクトリー リンクのコピーリンクがクリップボードにコピーされました!
システムロギングサービスが記録した syslog メッセージを保存している場所を特定します。ほとんどのログファイルは /var/log/ ディレクトリーに保存され、多くの場合、アプリケーションに基づき論理的にサブディレクトリーに整理されています。
syslog メッセージは、/var/log ディレクトリー配下の次のサブディレクトリーに保存されます。
- /var/log/messages
- 以下のものを除くすべての syslog メッセージ
- /var/log/secure
- セキュリティーおよび認証関連のメッセージとエラー
- /var/log/maillog
- メールサーバー関連のメッセージとエラー
- /var/log/cron
- 定期的に実行されるタスクに関連するログファイル
- /var/log/boot.log
- システムの起動に関連するログファイル
2.3. ログを表示するためのコマンド リンクのコピーリンクがクリップボードにコピーされました!
systemd のコンポーネントである Journal を使用すると、ログファイルを表示および管理できます。Journal は、従来のロギングに関連する問題に対処します。システムの他の部分と密接に統合されており、さまざまなロギングテクノロジーとログファイルへのアクセス管理をサポートします。
journalctl コマンドを使用すると、システムジャーナル内のメッセージを表示できます。次に例を示します。
$ journalctl -b | grep kvm
May 15 11:31:41 localhost.localdomain kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
May 15 11:31:41 localhost.localdomain kernel: kvm-clock: cpu 0, msr 76401001, primary cpu clock
2.3.1. システム情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
journalctl- 収集されたジャーナルエントリーをすべて表示します。
journalctl FILEPATH-
特定のファイルに関連するログを表示します。たとえば、
journalctl /dev/sdaコマンドは、/dev/sdaファイルシステムに関連するログを表示します。 journalctl -b- 現在のブートのログを表示します。
journalctl -k -b -1- 現在のブートのカーネルログを表示します。
2.3.2. 特定のサービスに関する情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
journalctl -b _SYSTEMD_UNIT=<name.service>-
ログをフィルターして、
systemdサービスに一致するエントリーを表示します。 journalctl -b _SYSTEMD_UNIT=<name.service> _PID=<number>-
一致を組み合わせます。たとえば、このコマンドは、
<name.service>と PID<number>に一致するsystemd-unitsのログを表示します。 journalctl -b _SYSTEMD_UNIT=<name.service> _PID=<number> + _SYSTEMD_UNIT=<name2.service>-
プラス記号 (+) セパレーターは、論理 OR で 2 つの式を組み合わせます。たとえば、このコマンドは
<name.service>サービスプロセスからのすべてのメッセージをPIDで表示し、(プロセスのいずれかの)<name2.service>サービスからのすべてのメッセージも表示します。 journalctl -b _SYSTEMD_UNIT=<name.service> _SYSTEMD_UNIT=<name2.service>-
このコマンドは、同じフィールドを参照し、いずれかの式に一致するエントリーをすべて表示します。このコマンドは、systemd-unit
<name.service>または systemd-unit<name2.service>に一致するログを表示します。
第3章 Web コンソールでのログの確認とフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux Web コンソールは、ログにアクセスし、確認し、フィルタリングするためのグラフィカルインターフェイスを提供します。対応するコマンドやオプションを記憶しなくても、最も一般的な機能を使用できます。
3.1. Web コンソールでのログの確認 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールの専用 Logs セクションを使用すると、システムログにすばやくアクセスして確認できます。このグラフィカルインターフェイスは、ホスト全体にわたるさまざまなシステム機能のログ監視を一元化するために使用でき、journalctl ユーティリティーのユーザーインターフェイスを提供します。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
手順
- RHEL 10 Web コンソールにログインします。
- Logs をクリックします。
- リストからログを確認するログエントリーをクリックして、ログエントリーの詳細を開きます。
次のステップ
- をクリックしてメニューを展開すると、 ボタンを使用して新しいログエントリーの表示を一時停止できます。新しいログエントリーを再開すると、 ボタンを使用した後に報告されたすべてのログエントリーが Web コンソールに読み込まれます。
- ログは、時間、優先度、識別子でフィルタリングできます。詳細は、Web コンソールでのログの確認とフィルタリング を参照してください。
3.2. Web コンソールでのログのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
RHEL の Web コンソールでは、時間範囲、優先度、または特定の識別子に基づきシステムログを直接フィルタリングできます。この機能により、管理者は重要なメッセージのみに集中して、的を絞ったトラブルシューティングを行うことができます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
手順
- RHEL 10 Web コンソールにログインします。
- Logs をクリックします。
- をクリックします。
- デフォルトのログフィルタリングを変更するには、Time、Priority、および Identifier ドロップダウンメニューを使用します。
オプション: デフォルトでは、Web コンソールに最新のログエントリーが表示されます。特定の時間範囲でフィルタリングするには、 ボタンをクリックします。
- ボタン (右向き矢印) をクリックしてフィルターを適用します。
- ログエントリーを開くには、選択したログエントリーをクリックします。
3.3. Web コンソールでログをフィルターするためのテキスト検索オプション リンクのコピーリンクがクリップボードにコピーされました!
RHEL の Web コンソールで利用できるテキスト検索構文とオプションを使用することで、ログを効果的にフィルタリングできます。これにより、膨大なシステムログの中から特定のエラーやキーワードを高精度で検索することが可能になります。
テキスト検索オプション機能では、ログをフィルタリングするためのさまざまなオプションを利用できます。テキスト検索を使用してログをフィルタリングする場合は、3 つのドロップダウンメニューに定義した事前定義オプションを使用するか、自分で検索全体を入力できます。
- ドロップダウンメニュー
検索の主要なパラメーターを指定するために使用できるドロップダウンメニューは 3 つあります。
- Time: このドロップダウンメニューには、定義済みのさまざまな期間の検索が表示されます。
-
Priority: このドロップダウンメニューには、さまざまな優先度の選択肢が表示されます。
journalctl --priorityオプションに対応します。デフォルトの優先度の値は Error and above です。これは、他の優先度を指定しないと毎回設定されます。 -
Identifier: このドロップダウンメニューでは、フィルタリングする識別子を選択できます。
journalctl --identifierオプションに対応します。
- 数量詞
- 検索条件を指定するために、6 つの数量詞を使用できます。これらは、ログテーブルをフィルタリングするためのオプション で説明されています。
- ログフィールド
- 特定のログフィールドを検索するには、フィールドとその内容を指定できます。
- ログメッセージにおける自由形式のテキスト検索
- ログメッセージで任意のテキスト文字列をフィルタリングできます。文字列は、正規表現の形式にすることもできます。
例3.1 時間に基づくログフィルタリング
2020 年 10 月 22 日深夜以降に発生した 'systemd' によって識別されるすべてのログメッセージをフィルターします。ジャーナルフィールド 'JOB_TYPE' は 'start' または 'restart' のいずれかです。
-
フィールドを検索するには、
identifier:systemd since:2020-10-22 JOB_TYPE=start,restartと入力します。 結果を確認します。
例3.2 エラーメッセージと失敗メッセージを含むログ
前々回のブート時に 'cockpit.service' systemd ユニットから送信された、メッセージボディーに "error" または "fail" が含まれるすべてのログメッセージをフィルタリングします。
-
検索フィールドに
service:cockpit boot:-1 error|failと入力します。 結果を確認します。
3.4. テキストボックスのボックスを使用した Web コンソールでのログのフィルター リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールのテキスト検索ボックスを使用して、さまざまなパラメーターに基づいてログをフィルタリングできます。検索では、フィルタリングドロップダウンメニュー、数量詞、ログフィールド、および自由形式の文字列検索を組み合わせて使用します。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
手順
- RHEL 10 Web コンソールにログインします。
- Logs をクリックします。
ドロップダウンメニューを使用して、フィルタリングする 3 つの主要な数量詞 (期間、優先度、識別子) を指定します。
Priority 数量詞には値が必要です。この値を指定しない場合、Error and above の優先度が自動的にフィルタリングされます。設定したオプションは、テキスト検索ボックスに反映されます。
フィルターするログフィールドを指定します。
ログフィールドは複数追加できます。
- 自由形式文字列を使用して他の文字を検索できます。検索ボックスにも正規表現も使用できます。
3.5. ログのフィルタリングオプション リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールでシステムログをフィルタリングするために使用できる各種オプションを確認してください。オプションには、時間範囲、優先度、識別子、およびカスタマイズ可能なテキスト検索フィールドが含まれます。
Web コンソールでログをフィルタリングするには、journalctl オプションを使用できます。これらのオプションの一部は、Web コンソールインターフェイスのドロップダウンメニューの一部として提供されます。
| オプション名 | 用途 | 備考 |
|---|---|---|
|
| メッセージの優先度に基づき出力をフィルタリングします。単一数値またはテキストログレベルを取ります。ログレベルは、通常の syslog ログレベルです。単一のログレベルが指定されている場合、そのログレベル、またはそれよりも低く重要なログレベルを持つすべてのメッセージが表示されます。 | Priority ドロップダウンメニューに含まれています。 |
|
| 指定された syslog 識別子 SYSLOG_IDENTIFIER のメッセージを表示します。複数回指定できます。 | Identifier ドロップダウンメニューに含まれています。 |
|
| 最新のジャーナルエントリーのみを表示し、ジャーナルに追加されるように新しいエントリーを継続的に出力します。 | ドロップダウンには含まれていません。 |
|
|
指定した |
ドロップダウンには含まれていません。 |
|
| 特定の起動時のメッセージを表示します。 正の整数はジャーナルの先頭から boots を検索し、ゼロ以下の整数はジャーナルの末尾から boots を検索します。このため、1 は、時系列順でジャーナルで見つかった最初の起動を意味し、2 は次に見つかったものと続きます。また、-0 は最後の起動、-1 は最後の起動の 1 つ前などとなります。 | Time ドロップダウンメニューで選択できるのは、Current boot または Previous boot だけです。その他のオプションは手動で指定する必要があります。 |
|
| 指定した日付以降、または選択した日付以前のエントリーの表示を開始します。日付は、"2012-10-30 18:17:16" の形式にする必要があります。時刻部分が省略されている場合は、"00:00:00" とみなされます。2 番目のコンポーネントのみを省略すると、":00" が想定されます。日付コンポーネントを省略すると、現在の日付が想定されます。または、"yesterday"、"today"、"tomorrow" という文字列も解釈されます。これらは、前日、当日、または翌日の 00:00:00 を指します。"now" は現在時刻を指します。最後に、現在時刻より前または後の時刻を表す相対時刻を、時刻の前に "-" または "+" を付けることで指定することもできます。 | ドロップダウンには含まれていません。 |
第4章 RHEL システムロールを使用した systemd ジャーナルの設定 リンクのコピーリンクがクリップボードにコピーされました!
journald RHEL システムロールを使用すると、systemd ジャーナルを自動化し、Red Hat Ansible Automation Platform を使用して永続的なロギングを設定できます。
4.1. journald RHEL システムロールを使用した永続的なロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、systemd ジャーナルは /run/log/journal 内の小さなリングバッファーにのみログを保存します。これは永続的なものではありません。システムを再起動すると、ジャーナルデータベースログも削除されます。journald RHEL システムロールを使用すると、複数のシステムで一貫して永続的なロギングを設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure journald hosts: managed-node-01.example.com tasks: - name: Configure persistent logging ansible.builtin.include_role: name: redhat.rhel_system_roles.journald vars: journald_persistent: true journald_max_disk_size: <size> journald_per_user: true journald_sync_interval: <interval>サンプル Playbook で指定されている設定は次のとおりです。
journald_persistent: true- 永続的なロギングを有効にします。
journald_max_disk_size: <size>-
ジャーナルファイルの最大ディスク領域サイズを MB 単位で指定します (例:
2048)。 journald_per_user: true-
各ユーザーのログデータを個別に保持するように
journaldを設定します。 journald_sync_interval: <interval>同期の間隔を分単位で設定します (例:
1)。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.journald/README.mdファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
第5章 リモートロギングソリューションの設定 リンクのコピーリンクがクリップボードにコピーされました!
環境内のさまざまなマシンからのログが、ログサーバーに一元的に記録されることを確認します。Rsyslog アプリケーションを設定することで、特定の条件を満たすログをクライアントシステムからサーバーに転送できます。
5.1. Rsyslog ロギングサービス リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog ロギングサービスは、/etc/rsyslog.conf ファイルでルールを定義します。ルールはメッセージを緊急度とトピック別に分類し、Rsyslog が実行するアクションを決定します。
Rsyslog アプリケーションは、systemd-journald サービスと組み合わせて、Red Hat Enterprise Linux でローカルおよびリモートのロギングサポートを提供します。rsyslogd デーモンは、ジャーナルから systemd-journald サービスが受信した syslog メッセージを継続的に読み取ります。rsyslogd は、syslog イベントをフィルタリングして処理し、rsyslog ログファイルに記録するか、設定に応じて他のサービスに転送します。
rsyslogd デーモンは、拡張されたフィルタリング、暗号化で保護されたメッセージのリレー、入出力モジュール、TCP プロトコルおよび UDP プロトコルを使用する転送のサポートも提供します。
rsyslog の主な設定ファイルである /etc/rsyslog.conf では、どの rsyslogd がメッセージを処理するかに応じてルールを指定できます。通常は、ソースおよびトピック (ファシリティー) 別および緊急度 (優先度) 別にメッセージを分類し、メッセージがその基準に合致したときに実行するアクションを割り当てることができます。
/etc/rsyslog.conf では、rsyslogd が維持するログファイルのリストも確認できます。ほとんどのログファイルは /var/log/ ディレクトリーにあります。httpd、samba などの一部のアプリケーションは、ログファイルを /var/log/ 内のサブディレクトリーに保存します。
詳細は、システム上の rsyslogd(8) および rsyslog.conf(5) の man ページを参照してください。/usr/share/doc/rsyslog/ html/index.html ファイルに rsyslog-doc パッケージに同梱されている包括的なドキュメントがあります。そちらも参照してください。
5.2. Rsyslog ドキュメントのインストール リンクのコピーリンクがクリップボードにコピーされました!
rsyslog-doc ドキュメントパッケージをローカルにインストールします。これにより、Rsyslog アプリケーションの豊富なドキュメントにオフラインで迅速にアクセスできるようになり、オンラインリソースを補完できます。
Rsyslog アプリケーションには、利用可能な詳細なオンラインドキュメントが https://www.rsyslog.com/doc/ にありますが、rsyslog-doc ドキュメントパッケージをシステムにインストールすることもできます。
前提条件
-
システムで
AppStreamリポジトリーをアクティベートしている。 -
sudoを使用して新規パッケージをインストールする権限がある。
手順
rsyslog-docパッケージをインストールします。# dnf install rsyslog-doc
検証
任意のブラウザーで
/usr/share/doc/rsyslog/html/index.htmlファイルを開きます。次に例を示します。$ firefox /usr/share/doc/rsyslog/html/index.html &
5.3. TCP でのリモートロギング用のサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
信頼性の高い TCP プロトコルを介してリモートログを受信するために、Rsyslog サーバーを設定します。この設定により、クライアントシステムからネットワーク経由でログを転送する際の信頼性が確保されます。
TCP 経由でリモートロギングを使用するには、サーバーとクライアントの両方を設定します。サーバーは、クライアントシステムにより送信されたログを収集し、分析します。
Rsyslog アプリケーションを使用すると、ログメッセージがネットワークを介してサーバーに転送される中央ロギングシステムを維持できます。サーバーが利用できない場合にメッセージが失われないようにするには、転送アクションのアクションキューを設定します。これにより、送信に失敗したメッセージは、サーバーが再度到達可能になるまでローカルに保存されます。このようなキューは、UDP プロトコルを使用する接続に対しては設定できないことに注意してください。
omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。このプラグインは組み込まれているため、読み込む必要はありません。
デフォルトでは、rsyslog はポート 514 で TCP を使用します。
前提条件
- rsyslog がサーバーシステムにインストールされている。
-
サーバーに
rootとしてログインしている。 -
policycoreutils-python-utilsパッケージは、semanageコマンドを使用して任意の手順でインストールします。 -
firewalldサービスが実行中である。
手順
必要に応じて、
rsyslogトラフィックに別のポートを使用するには、SELinux タイプsyslogd_port_tをポートに追加します。たとえば、ポート30514を有効にします。# semanage port -a -t syslogd_port_t -p tcp 30514必要に応じて、
rsyslogトラフィックに別のポートを使用するには、firewalldがそのポートでの着信rsyslogトラフィックを許可するように設定します。たとえば、ポート30514で TCP トラフィックを許可します。# firewall-cmd --zone=<zone_name> --permanent --add-port=30514/tcp success # firewall-cmd --reload/etc/rsyslog.d/ディレクトリーに新規ファイル (例:remotelog.conf) を作成し、以下のコンテンツを挿入します。# Define templates before the rules that use them # Per-Host templates for remote systems template(name="TmplAuthpriv" type="list") { constant(value="/var/log/remote/auth/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") } template(name="TmplMsg" type="list") { constant(value="/var/log/remote/msg/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") } # Provides TCP syslog reception module(load="imtcp") # Adding this ruleset to process remote messages ruleset(name="remote1"){ authpriv.* action(type="omfile" DynaFile="TmplAuthpriv") *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg") } input(type="imtcp" port="30514" ruleset="remote1")-
/etc/rsyslog.d/remotelog.confファイルへの変更を保存します。 /etc/rsyslog.confファイルの構文をテストします。# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run... rsyslogd: End of config validation run. Bye.rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。# systemctl status rsyslogrsyslogサービスを再起動します。# systemctl restart rsyslog必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。# systemctl enable rsyslog
5.4. TCP 経由のサーバーへのリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
TCP プロトコル経由でログメッセージをサーバーに転送するようにシステムを設定できます。omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。プラグインは組み込まれているのでロードする必要はありません。
前提条件
-
rsyslogパッケージが、サーバーに報告する必要のあるクライアントシステムにインストールされている。 - リモートロギング用にサーバーを設定している。
- 指定したポートが SELinux で許可され、ファイアウォールで開いている。
-
システムには、
policycoreutils-python-utilsパッケージが含まれています。このパッケージは、標準以外のポートを SELinux 設定に追加するためのsemanageコマンドを提供します。
手順
/etc/rsyslog.d/ディレクトリーに新規ファイル (例:10-remotelog.conf) を作成し、以下のコンテンツを挿入します。*.* action(type="omfwd" queue.type="linkedlist" queue.filename="example_fwd" action.resumeRetryCount="-1" queue.saveOnShutdown="on" target="example.com" port="30514" protocol="tcp" )ここでは、以下のようになります。
-
queue.type="linkedlist"設定は、LinkedList インメモリーキューを有効にします。 -
queue.filename設定は、ディスクストレージを定義します。バックアップファイルは、前のグローバルのworkDirectoryディレクティブで指定された作業ディレクトリーにexample_fwd接頭辞を付けて作成されます。 -
action.resumeRetryCount -1設定は、サーバーが応答しない場合に接続を再試行するときにrsyslogがメッセージを破棄しないようにします。 -
queue.saveOnShutdown="on"設定は、rsyslogがシャットダウンした場合にインメモリーデータを保存します。 最後の行は、受信したすべてのメッセージをロギングサーバーに転送します。ポートの指定は任意です。
この設定では、
rsyslogはメッセージをサーバーに送信しますが、リモートサーバーに到達できない場合には、メッセージをメモリーに保持します。ディスク上にあるファイルは、設定されたメモリーキュー領域がrsyslogで不足するか、シャットダウンする必要がある場合にのみ作成されます。これにより、システムパフォーマンスが向上します。注記Rsyslog は設定ファイル
/etc/rsyslog.d/を字句順に処理します。
-
rsyslogサービスを再起動します。# systemctl restart rsyslog
検証
クライアントシステムがサーバーにメッセージを送信していることを確認します。
クライアントシステムで、テストメッセージを送信します。
# logger testサーバーシステムで、
/var/log/messagesログを表示します。以下に例を示します。# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testhostname はクライアントシステムのホスト名です。ログには、
loggerコマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
5.5. TLS 暗号化リモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS を使用してリモートロギング通信を暗号化し、データ転送を保護します。サーバーとクライアントの両方で TLS を設定すると、機密性の高いログをネットワーク傍受から保護するために役立ちます。
デフォルトでは、Rsyslog はリモートロギングメッセージをプレーンテキストで送信します。TLS を介した暗号化されたトランスポートを使用するには、サーバーとクライアントの両方を設定します。サーバーは、クライアントシステムにより送信されたログを収集し、分析します。
ossl ネットワークストリームドライバー (OpenSSL) または gtls ストリームドライバー (GnuTLS) のいずれかを使用できます。
ネットワークに接続されていない、厳格な認可を受けているなど、セキュリティーが強化された別のシステムがある場合は、その別のシステムを認証局 (CA) として使用します。
サーバー側では global、module、input レベルで、クライアント側では global および action レベルで、ストリームドライバーを使用して接続設定をカスタマイズできます。より具体的な設定は、より一般的な設定よりも優先されます。そのため、たとえば、ほとんどの接続のグローバル設定で ossl を使用し、特定の接続の入力とアクション設定で gtls を使用することができます。
前提条件
-
クライアントシステムとサーバーシステムの両方に
rootにアクセスできる。 サーバーおよびクライアントシステムに次のパッケージがインストールされている。
-
rsyslogパッケージ -
osslネットワークストリームドライバー用のrsyslog-opensslパッケージ -
gtlsネットワークストリームドライバー用のrsyslog-gnutlsパッケージ -
certtoolコマンドを使用して証明書を生成するためのgnutls-utilsパッケージ
-
ログサーバーの
/etc/pki/ca-trust/source/anchors/ディレクトリーには、次の証明書があり、update-ca-trustコマンドを使用してシステム設定を更新します。-
ca-cert.pem- ログサーバーとクライアントで鍵と証明書を検証できる CA 証明書。 -
server-cert.pem- ロギングサーバーの公開鍵。 -
server-key.pem- ロギングサーバーの秘密鍵。
-
ログクライアントでは、次の証明書が
/etc/pki/ca-trust/source/anchors/ディレクトリーにあり、update-ca-trustを使用してシステム設定を更新します。-
ca-cert.pem- ログサーバーとクライアントで鍵と証明書を検証できる CA 証明書。 -
client-cert.pem- クライアントの公開鍵。 -
client-key.pem- クライアントの秘密鍵。 - サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、TLS extension "Extended Master Secret" enforced 記事 (Red Hat ナレッジベース) を参照してください。
-
手順
クライアントシステムから暗号化したログを受信するようにサーバーを設定します。
-
/etc/rsyslog.d/ディレクトリーに、新規ファイル (securelogser.confなど) を作成します。 通信を暗号化するには、設定ファイルに、サーバーの証明書ファイルへのパス、選択した認証方法、および TLS 暗号化に対応するストリームドライバーが含まれている必要があります。
/etc/rsyslog.d/securelogser.confに以下の行を追加します。# Set certificate files global( DefaultNetstreamDriverCAFile="/etc/pki/ca-trust/source/anchors/ca-cert.pem" DefaultNetstreamDriverCertFile="/etc/pki/ca-trust/source/anchors/server-cert.pem" DefaultNetstreamDriverKeyFile="/etc/pki/ca-trust/source/anchors/server-key.pem" ) # TCP listener module( load="imtcp" PermittedPeer=["client1.example.com", "client2.example.com"] StreamDriver.AuthMode="x509/name" StreamDriver.Mode="1" StreamDriver.Name="ossl" ) # Start up listener at port 514 input( type="imtcp" port="514" )注記GnuTLS ドライバーが必要な場合は、
StreamDriver.Name="gtls"設定オプションを使用します。x509/nameよりも厳密ではない認証モードの詳細は、rsyslog-docにインストールされているドキュメントを参照してください。オプション: 接続設定をカスタマイズするには、
inputセクションを次のものに置き換えます。input( type="imtcp" Port="50515" StreamDriver.Name="<driver>" streamdriver.CAFile="/etc/rsyslog.d/<ca1>.pem" streamdriver.CertFile="/etc/rsyslog.d/<server1_cert>.pem" streamdriver.KeyFile="/etc/rsyslog.d/<server1_key>.pem" )-
使用するドライバーに応じて、
<driver>をosslまたはgtlsに置き換えます。 -
<ca1>は CA 証明書に、<server1_cert>は証明書に、<server1_key>はカスタマイズされた接続の鍵に、それぞれ置き換えます。
-
使用するドライバーに応じて、
-
変更を
/etc/rsyslog.d/securelogser.confファイルに保存します。 /etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内のすべてのファイルを確認します。# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。# systemctl status rsyslogrsyslogサービスを再起動します。# systemctl restart rsyslogオプション: Rsyslog が有効になっていない場合は、再起動後に
rsyslogサービスが自動的に起動されることを確認してください。# systemctl enable rsyslog
-
暗号化したログをサーバーに送信するようにクライアントを設定するには、以下のコマンドを実行します。
-
クライアントシステムで、
/etc/rsyslog.d/ディレクトリーに、新規ファイル (securelogcli.confなど) を作成します。 /etc/rsyslog.d/securelogcli.confに以下の行を追加します。# Set certificate files global( DefaultNetstreamDriverCAFile="/etc/pki/ca-trust/source/anchors/ca-cert.pem" DefaultNetstreamDriverCertFile="/etc/pki/ca-trust/source/anchors/client-cert.pem" DefaultNetstreamDriverKeyFile="/etc/pki/ca-trust/source/anchors/client-key.pem" ) # Set up the action for all messages *.* action( type="omfwd" StreamDriver="ossl" StreamDriverMode="1" StreamDriverPermittedPeers="server.example.com" StreamDriverAuthMode="x509/name" target="server.example.com" port="514" protocol="tcp" )注記GnuTLS ドライバーが必要な場合は、
StreamDriver.Name="gtls"設定オプションを使用します。オプション: 接続設定をカスタマイズするには、
actionセクションを次のものに置き換えます。local1.* action( type="omfwd" StreamDriver="<driver>" StreamDriverMode="1" StreamDriverAuthMode="x509/certvalid" streamDriver.CAFile="/etc/rsyslog.d/<ca1>.pem" streamDriver.CertFile="/etc/rsyslog.d/<client1_cert>.pem" streamDriver.KeyFile="/etc/rsyslog.d/<client1_key>.pem" target="server.example.com" port="514" protocol="tcp" )-
使用するドライバーに応じて、
<driver>をosslまたはgtlsに置き換えます。 -
<ca1>は CA 証明書に、<client1_cert>は証明書に、<client1_key>はカスタマイズされた接続の鍵に、それぞれ置き換えます。
-
使用するドライバーに応じて、
-
変更を
/etc/rsyslog.d/securelogcli.confファイルに保存します。 /etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内のその他のファイルを確認します。# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.rsyslogサービスがロギングサーバーで実行中で、有効になっていることを確認します。# systemctl status rsyslogrsyslogサービスを再起動します。# systemctl restart rsyslogオプション: Rsyslog が有効になっていない場合は、再起動後に
rsyslogサービスが自動的に起動されることを確認してください。# systemctl enable rsyslog
-
クライアントシステムで、
検証
クライアントシステムがサーバーにメッセージを送信していることを確認します。
クライアントシステムで、テストメッセージを送信します。
# logger testサーバーシステムで、
/var/log/messagesログを表示します。以下に例を示します。# cat /var/log/remote/msg/<hostname>/root.log Feb 25 03:53:17 <hostname> root[6064]: test<hostname>はクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
5.6. UDP でリモートロギング情報を受信するためのサーバー設定 リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog サーバーが高速 UDP プロトコルを介してリモートログを受信するように設定します。UDP はログ損失が許容範囲内である場合に適しており、TCP よりも高速な伝送を実現します。
UDP 経由でリモートロギングを使用するには、サーバーとクライアントの両方を設定します。受信サーバーは、クライアントシステムが送信したログの収集および分析を行います。デフォルトでは、rsyslog はポート 514 で UDP を使用して、リモートシステムからログ情報を受信します。
前提条件
- rsyslog がサーバーシステムにインストールされている。
-
サーバーに
rootとしてログインしている。 -
policycoreutils-python-utilsパッケージは、semanageコマンドを使用して任意の手順でインストールします。 -
firewalldサービスが実行中である。
手順
必要に応じて、デフォルトのポート
514以外のrsyslogトラフィックに別のポートを使用するには、次のコマンドを実行します。SELinux ポリシー設定に
syslogd_port_tSELinux タイプを追加し、portnoはrsyslogで使用するポート番号に置き換えます。# semanage port -a -t syslogd_port_t -p udp portnorsyslogの受信トラフィックを許可するようにfirewalldを設定します。portnoはポート番号に、zoneはrsyslogが使用するゾーンに置き換えます。# firewall-cmd --zone=zone --permanent --add-port=portno/udp success # firewall-cmd --reloadファイアウォールルールを再読み込みします。
# firewall-cmd --reload
/etc/rsyslog.d/ディレクトリーに.confの新規ファイル (例:remotelogserv.conf) を作成し、以下のコンテンツを挿入します。# Define templates before the rules that use them # Per-Host templates for remote systems template(name="TmplAuthpriv" type="list") { constant(value="/var/log/remote/auth/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") } template(name="TmplMsg" type="list") { constant(value="/var/log/remote/msg/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") } # Provides UDP syslog reception module(load="imudp") # This ruleset processes remote messages ruleset(name="remote1"){ authpriv.* action(type="omfile" DynaFile="TmplAuthpriv") *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg") } input(type="imudp" port="514" ruleset="remote1")514は、rsyslogがデフォルトで使用するポート番号です。代わりに別のポートを指定できます。/etc/rsyslog.confファイルの構文と/etc/rsyslog.d/ディレクトリー内の全.confファイルを確認します。# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run...rsyslogサービスを再起動します。# systemctl restart rsyslog必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。# systemctl enable rsyslog
5.7. UDP 経由のサーバーへのリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
クライアントシステムが UDP プロトコルを使用してログをリモートサーバーに送信するように設定します。速度が重視され、たまにログメッセージが失われても許容される場合は、UDP が推奨されます。
omfwd プラグインは、UDP または TCP による転送を提供します。デフォルトのプロトコルは UDP です。プラグインは組み込まれているのでロードする必要はありません。
前提条件
-
rsyslogパッケージが、サーバーに報告する必要のあるクライアントシステムにインストールされている。 - UDP 経由でリモートログ情報を受信するためのサーバーの設定 で説明されているように、リモートロギング用にサーバーを設定している。
手順
/etc/rsyslog.d/ディレクトリーに.confの新規ファイル (例:10-remotelogcli.conf) を作成し、以下のコンテンツを挿入します。*.* action(type="omfwd" queue.type="linkedlist" queue.filename="example_fwd" action.resumeRetryCount="-1" queue.saveOnShutdown="on" target="example.com" port="portno" protocol="udp" )ここでは、以下のようになります。
-
queue.type="linkedlist"設定は、LinkedList インメモリーキューを有効にします。 -
queue.filename設定は、ディスクストレージを定義します。バックアップファイルは、前のグローバルのworkDirectoryディレクティブで指定された作業ディレクトリーにexample_fwd接頭辞を付けて作成されます。 -
action.resumeRetryCount -1設定は、サーバーが応答しない場合に接続を再試行するときにrsyslogがメッセージを破棄しないようにします。 -
queue.saveOnShutdown="on"設定を有効にすると、rsyslogがシャットダウンした場合にインメモリーデータが保存されます。 -
portno値は、rsyslogで使用するポート番号です。デフォルト値は514です。 最後の行は受信メッセージをすべてロギングサーバーに転送します。ポートの指定は任意です。
この設定では、
rsyslogはメッセージをサーバーに送信しますが、リモートサーバーに到達できない場合には、メッセージをメモリーに保持します。ディスク上にあるファイルは、設定されたメモリーキュー領域がrsyslogで不足するか、シャットダウンする必要がある場合にのみ作成されます。これにより、システムパフォーマンスが向上します。
注記Rsyslog は設定ファイル
/etc/rsyslog.d/を字句順に処理します。-
rsyslogサービスを再起動します。# systemctl restart rsyslog必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。# systemctl enable rsyslog
検証
クライアントシステムがサーバーにメッセージを送信することを確認するには、以下の手順に従います。
クライアントシステムで、テストメッセージを送信します。
# logger testサーバーシステムで、
/var/log/remote/msg/hostname/root.logログを表示します。以下に例を示します。# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testhostnameはクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
5.8. Rsyslog の負荷分散ヘルパー リンクのコピーリンクがクリップボードにコピーされました!
Rsyslog のロードバランシングヘルパーを設定して、ログトラフィックを複数のリモートロギングサーバーに分散させます。これによりシステムの耐障害性が向上し、単一のサーバーが過負荷状態になることが防がれます。
Rsyslog をクラスターで使用する場合、RebindInterval 設定を変更することで Rsyslog の負荷分散を改善できます。このオプションでは、現在の接続を切断して再確立する間隔を指定します。この設定は、TCP、UDP、および RELP のトラフィックに適用されます。ロードバランサーはこれを新しい接続と認識し、メッセージを別の物理ターゲットシステムに転送します。
ターゲットシステムが IP アドレスを変更するようなシナリオでは、RebindInterval を使用できます。Rsyslog アプリケーションは、接続が確立された際に IP アドレスをキャッシュします。したがって、メッセージは同じサーバーに送信されます。IP アドレスが変更されると、Rsyslog サービスが再起動するまで UDP パケットが失われます。接続を再確立すると、IP が DNS により再度解決されます。
例5.1 TCP、UDP、および RELP トラフィックに対する RebindInterval の使用
action(type="omfwd" protocol="tcp" RebindInterval="250" target="example.com" port="514" …)
action(type="omfwd" protocol="udp" RebindInterval="250" target="example.com" port="514" …)
action(type="omrelp" RebindInterval="250" target="example.com" port="6514" …)
5.9. 信頼できるリモートロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
Reliable Event Logging Protocol (RELP) を使用して信頼性の高いリモートロギングを設定します。これにより、ログメッセージがセントラルサーバーに確実に届くようになり、ネットワーク障害発生時でもデータ損失を防ぐことができます。
RELP を使用すると、メッセージ損失のリスクを大幅に軽減して TCP で syslog メッセージを送受信できます。RELP はイベントメッセージを確実に配信するため、メッセージの損失が許容されない環境で役立ちます。RELP を使用するには、imrelp の入力モジュール (サーバー上での実行とログの受信) と omrelp 出力モジュール (クライアント上での実行とロギングサーバーへのログの送信) を設定します。
前提条件
-
rsyslogパッケージ、librelpパッケージ、およびrsyslog-relpパッケージをサーバーおよびクライアントシステムにインストールしている。 - 指定したポートが SELinux で許可され、ファイアウォール設定で開放されている。
手順
信頼できるリモートロギング用にクライアントシステムを設定します。
クライアントシステムの
/etc/rsyslog.d/ディレクトリーに、relpclient.confなどと名前を指定して新しい.confファイルを作成し、以下のコンテンツを挿入します。module(load="omrelp") *.* action(type="omrelp" target="_target_IP_" port="_target_port_")ここでは、以下のようになります。
-
target_IPは、ロギングサーバーの IP アドレスに置き換えます。 -
target_portはロギングサーバーのポートに置き換えます。
-
-
変更を
/etc/rsyslog.d/relpclient.confファイルに保存します。 rsyslogサービスを再起動します。# systemctl restart rsyslog必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。# systemctl enable rsyslog
信頼できるリモートロギング用にサーバーシステムを設定します。
サーバーシステムの
/etc/rsyslog.d/ディレクトリーに、relpserv.confなどと名前を指定して新しい.confファイルを作成し、以下のコンテンツを挿入します。ruleset(name="relp"){ *.* action(type="omfile" file="_log_path_") } module(load="imrelp") input(type="imrelp" port="_target_port_" ruleset="relp")ここでは、以下のようになります。
-
log_pathは、メッセージを保存するパスを指定します。 -
target_portはロギングサーバーのポートに置き換えます。クライアント設定ファイルと同じ値を使用します。
-
-
/etc/rsyslog.d/relpserv.confファイルへの変更を保存します。 rsyslogサービスを再起動します。# systemctl restart rsyslog必要に応じて、
rsyslogが有効になっていない場合は、再起動後にrsyslogサービスが自動的に起動するようにします。# systemctl enable rsyslog
検証
クライアントシステムがサーバーにメッセージを送信していることを確認します。
クライアントシステムで、テストメッセージを送信します。
# logger testサーバーシステムで、指定された
log_pathでログを表示します。以下に例を示します。# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: testhostnameはクライアントシステムのホスト名です。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
5.10. サポート対象の Rsyslog モジュール リンクのコピーリンクがクリップボードにコピーされました!
特定のモジュールを使用することで、Rsyslog の機能を拡張できます。これらのモジュールをロードすると、追加の入力、出力、または設定指示が利用可能になります。これらのモジュールは、アプリケーションがログメッセージを効率的に処理する方法をカスタマイズします。
以下のコマンドを使用して、システムにインストールされている入出力モジュールをリスト表示できます。
# ls /usr/lib64/rsyslog/{i,o}m*
rsyslog-doc パッケージをインストールした後、/usr/share/doc/rsyslog/html/configuration/modules/idx_output.html ファイルで使用可能なすべての rsyslog モジュールのリストを表示できます。
5.11. カーネルメッセージをリモートホストに記録するように Netconsole を設定する リンクのコピーリンクがクリップボードにコピーされました!
カーネルメッセージをリモートホストに転送するように、netconsole サービスを設定します。これは、特にローカルシステムのログ機能が失敗した場合に、重要なカーネルイベントをキャプチャーするために役立ちます。
ディスクへのログインやシリアルコンソールの使用ができない場合は、netconsole カーネルモジュールおよび同じ名前のサービスを使用して、ネットワーク経由でカーネルメッセージをリモートの rsyslog サービスに記録できます。
前提条件
- Rsyslog などのシステムログサービスがリモートホストにインストールされている。
- リモートシステムログサービスは、このホストから受信ログエントリーを受け取るように設定されています。
手順
netconsole-serviceパッケージをインストールします。# dnf install netconsole-service/etc/sysconfig/netconsoleファイルを編集し、SYSLOGADDRパラメーターをリモートホストの IP アドレスに設定します。# SYSLOGADDR=192.0.2.1netconsoleサービスを有効にして起動します。# systemctl enable --now netconsole
検証
-
リモートシステムログサーバーの
/var/log/messagesファイルを表示します。
第6章 RHEL システムロールを使用したロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、ローカルホストとリモートホストをロギングサーバーとして自動的に設定し、多数のクライアントシステムからログを収集できます。
ロギングソリューションは、ログと複数のロギング出力を読み取る複数の方法を提供します。
たとえば、ロギングシステムは以下の入力を受け取ることができます。
- ローカルファイル
-
systemd/journal - ネットワーク上の別のロギングシステム
さらに、ロギングシステムでは以下を出力できます。
-
/var/log/ディレクトリーのローカルファイルに保存されるログ - Elasticsearch エンジンに送信されるログ
- 別のロギングシステムに転送されるログ
logging RHEL システムロールを使用すると、状況に合わせて入力と出力を組み合わせることができます。たとえば、journald からの入力はローカルのファイルに保存し、ファイルから読み取った入力は別のロギングシステムに転送してそのローカルのログファイルに保存するようにロギングソリューションを設定できます。
6.1. logging RHEL システムロールを使用したローカルログメッセージのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールのプロパティーベースのフィルターを使用すると、さまざまな条件に基づいてローカルログメッセージをフィルタリングできます。
たとえば、次のようなことを実現できます。
- 明確なログ: トラフィック量の多い環境では、ログが急増することがあります。エラーなどの特定のメッセージに注目することで、問題をより早く特定できるようになります。
- システムパフォーマンスの最適化: ログの量が多すぎると、通常、システムパフォーマンスが低下します。重要なイベントのみを選択的にログに記録することで、リソースの枯渇を防ぎ、システムをより効率的に運用できます。
- セキュリティーの強化: システムエラーやログイン失敗などのセキュリティーメッセージを効率的にフィルタリングすることで、関連するログのみを取得できます。これは、違反を検出し、コンプライアンス基準を満たすために重要です。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Filter logs based on a specific value they contain ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_inputs: - name: files_input type: basics logging_outputs: - name: files_output0 type: files property: msg property_op: contains property_value: error path: /var/log/errors.log - name: files_output1 type: files property: msg property_op: "!contains" property_value: error path: /var/log/others.log logging_flows: - name: flow0 inputs: [files_input] outputs: [files_output0, files_output1]サンプル Playbook で指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: basicsオプションを指定すると、systemdジャーナルまたは Unix ソケットからの入力が対象になります。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: filesオプションにより、ローカルファイル (通常は/var/log/ディレクトリー内) にログを保存できます。property: msg、property: contains、およびproperty_value: errorオプションを指定すると、error文字列を含むすべてのログが/var/log/errors.logファイルに保存されます。property: msg、property: !contains、およびproperty_value: errorオプションを指定すると、他のすべてのログが/var/log/others.logファイルに保存されます。error値は、フィルタリングする必要がある文字列に置き換えることができます。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [files_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [files_output0, files_output1]オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
管理対象ノードで、
/etc/rsyslog.confファイルの構文をテストします。# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.管理対象ノードで、システムが
error文字列を含むメッセージをログに送信することを確認します。テストメッセージを送信します。
# logger error以下のように
/var/log/errors.logログを表示します。# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: errorhostnameはクライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
6.2. logging RHEL システムロールを使用したリモートロギングソリューションの適用 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用して、複数のシステムにわたる一元的なログ管理を設定できます。このサーバーは、remote_rsyslog および remote_files 設定からリモート入力を受け取り、リモートホスト名によって指定されたディレクトリー内のローカルファイルにログを出力します。
その結果、たとえば次のようなユースケースに対応できます。
- ログの集中管理: 複数のマシンのログメッセージを 1 つのストレージポイントから収集、アクセス、管理することで、日々の監視とトラブルシューティングのタスクが簡素化されます。また、このユースケースでは、ログメッセージを確認するために個々のマシンにログインする必要性が軽減されます。
- セキュリティーの強化: ログメッセージを 1 カ所に集中して保存すると、セキュアで改ざん不可能な環境にログを保存しやすくなります。このような環境により、セキュリティーインシデントをより効果的に検出して対応し、監査要件を満たすことが容易になります。
- ログ分析の効率向上: 複数のマシンまたはサービスにまたがる複雑な問題を迅速にトラブルシューティングするには、複数のシステムからのログメッセージを相関させることが重要です。これにより、さまざまなソースからのイベントをすばやく分析し、相互参照することができます。
- サーバーまたはクライアントシステムの SELinux ポリシーでポートを定義し、それらのポートのファイアウォールを開く。デフォルトの SELinux ポリシーには、ポート 601、514、6514、10514、および 20514 が含まれます。別のポートを使用するには、クライアントおよびサーバーシステムの SELinux ポリシーの変更 を参照してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Configure the server to receive remote input ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_inputs: - name: remote_udp_input type: remote udp_ports: [ 601 ] - name: remote_tcp_input type: remote tcp_ports: [ 601 ] logging_outputs: - name: remote_files_output type: remote_files logging_flows: - name: flow_0 inputs: [remote_udp_input, remote_tcp_input] outputs: [remote_files_output] - name: Deploy the logging solution hosts: managed-node-02.example.com tasks: - name: Configure the server to output the logs to local files in directories named by remote host names ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_inputs: - name: basic_input type: basics logging_outputs: - name: forward_output0 type: forwards severity: info target: <host1.example.com> udp_port: 601 - name: forward_output1 type: forwards facility: mail target: <host1.example.com> tcp_port: 601 logging_flows: - name: flows0 inputs: [basic_input] outputs: [forward_output0, forward_output1]サンプル Playbook の最初のプレイで指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: remoteオプションを指定すると、ネットワークを介した他のロギングシステムからのリモート入力が対象になります。udp_ports: [ 601 ]オプションは、監視する UDP ポート番号のリストを定義します。tcp_ports: [ 601 ]オプションは、監視する TCP ポート番号のリストを定義します。udp_portsとtcp_portsの両方が設定されている場合、udp_portsが使用され、tcp_portsは削除されます。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: remote_filesオプションを指定すると、ログの送信元であるリモートホストとプログラム名ごとに、出力がローカルファイルに保存されます。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [remote_udp_input, remote_tcp_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [remote_files_output]オプションは、ログ送信先の出力のリストを指定します。
サンプル Playbook の 2 番目のプレイで指定されている設定は次のとおりです。
logging_inputs-
ロギングの入力ディクショナリーのリストを定義します。
type: basicsオプションを指定すると、systemdジャーナルまたは Unix ソケットからの入力が対象になります。 logging_outputs-
ロギングの出力ディクショナリーのリストを定義します。
type: forwardsオプションにより、ネットワーク経由でリモートログサーバーにログを送信できます。severity: infoオプションは、重大度が情報レベルであるログメッセージを示します。facility: mailオプションは、ログメッセージを生成するシステムプログラムの種類を示します。target: <host1.example.com>オプションは、リモートログサーバーのホスト名を指定します。udp_port: 601/tcp_port: 601オプションは、リモートログサーバーがリッスンする UDP/TCP ポートを定義します。 logging_flows-
ロギングのフローディクショナリーのリストを定義して、
logging_inputsとlogging_outputsの関係を指定します。inputs: [basic_input]オプションは、ログの処理を開始する入力のリストを指定します。outputs: [forward_output0, forward_output1]オプションは、ログ送信先の出力のリストを指定します。
ロール変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
クライアントとサーバーシステムの両方で、
/etc/rsyslog.confファイルの構文をテストします。# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.クライアントシステムがサーバーにメッセージを送信することを確認します。
クライアントシステムで、テストメッセージを送信します。
# logger testサーバーシステムで、
/var/log/<host2.example.com>/messagesログを表示します。次に例を示します。# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test<host2.example.com>は、クライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot) が含まれていることに注意してください。
6.3. TLS を使用した logging RHEL システムロールの使用 リンクのコピーリンクがクリップボードにコピーされました!
RHEL システムロールの logging を使用すると、ログメッセージのセキュアな転送を設定して、1 つ以上のクライアントで systemd-journal サービスからログを取得し、TLS を使用してリモートサーバーに転送できます。
通常、リモートロギングソリューションでログを転送するための TLS は、インターネットなどの信頼性の低いネットワークやパブリックネットワーク経由で機密データを送信する場合に使用されます。また、TLS で証明書を使用することで、クライアントから正しい信頼できるサーバーにログを確実に転送できます。これにより、"中間者攻撃" などの攻撃を防ぐことができます。
6.3.1. TLS を使用したクライアントロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、RHEL クライアントでのロギングを設定し、TLS 暗号化を使用してログをリモートロギングシステムに転送できます。
このロールは秘密鍵と証明書を作成します。その後、Ansible インベントリーのクライアントグループ内の全ホストに TLS を設定します。TLS プロトコルは、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。このロールは、logging_certificates 変数が設定されている場合、logging RHEL システムロールによって自動的に呼び出されます。
CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - 管理対象ノードが IdM ドメインに登録されている。
- 管理対象ノード上で設定するロギングサーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure remote logging solution by using TLS for secure transfer of logs hosts: managed-node-01.example.com tasks: - name: Deploying files input and forwards output with certs ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_certificates: - name: logging_cert dns: ['www.example.com'] ca: ipa principal: "logging/{{ inventory_hostname }}@IDM.EXAMPLE.COM" logging_pki_files: - ca_cert: /local/path/to/ca_cert.pem cert: /local/path/to/logging_cert.pem private_key: /local/path/to/logging_cert.pem logging_inputs: - name: input_name type: files input_log_path: /var/log/containers/*.log logging_outputs: - name: output_name type: forwards target: your_target_host tcp_port: 514 tls: true pki_authmode: x509/name permitted_server: 'server.example.com' logging_flows: - name: flow_name inputs: [input_name] outputs: [output_name]サンプル Playbook で指定されている設定は次のとおりです。
logging_certificates-
このパラメーターの値は、
certificateRHEL システムロールのcertificate_requestsに渡され、秘密鍵と証明書の作成に使用されます。 logging_pki_filesこのパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src、およびtlsで指定) を設定できます。注記logging_certificatesを使用して管理対象ノードにファイルを作成する場合は、ca_cert_src、cert_src、およびprivate_key_srcを使用しないでください。これらは、logging_certificatesによって作成されていないファイルのコピーに使用されます。ca_cert-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemです。ファイル名はユーザーが設定します。 cert-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemです。ファイル名はユーザーが設定します。 private_key-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemです。ファイル名はユーザーが設定します。 ca_cert_src-
ターゲットホストの
ca_certで指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 cert_src-
ターゲットホストの
certで指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 private_key_src-
ターゲットホストの
private_keyで指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 tls-
このパラメーターを
trueに設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: falseに設定します。
ロール変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
6.3.2. TLS を使用したサーバーロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、RHEL サーバーでのロギングを設定し、TLS 暗号化を使用してリモートロギングシステムからログを受信するようにサーバーを設定できます。
このロールは秘密鍵と証明書を作成します。その後、Ansible インベントリーのサーバーグループ内の全ホストに TLS を設定します。
証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。logging RHEL システムロールがこのロールを自動的に呼び出します。
CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - 管理対象ノードが IdM ドメインに登録されている。
- 管理対象ノード上で設定するロギングサーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure remote logging solution by using TLS for secure transfer of logs hosts: managed-node-01.example.com tasks: - name: Deploying remote input and remote_files output with certs ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_certificates: - name: logging_cert dns: ['www.example.com'] ca: ipa principal: "logging/{{ inventory_hostname }}@IDM.EXAMPLE.COM" logging_pki_files: - ca_cert: /local/path/to/ca_cert.pem cert: /local/path/to/logging_cert.pem private_key: /local/path/to/logging_cert.pem logging_inputs: - name: input_name type: remote tcp_ports: [514] tls: true permitted_clients: ['clients.example.com'] logging_outputs: - name: output_name type: remote_files remote_log_path: /var/log/remote/%FROMHOST%/%PROGRAMNAME:::secpath-replace%.log async_writing: true client_count: 20 io_buffer_size: 8192 logging_flows: - name: flow_name inputs: [input_name] outputs: [output_name]サンプル Playbook で指定されている設定は次のとおりです。
logging_certificates-
このパラメーターの値は、
certificateRHEL システムロールのcertificate_requestsに渡され、秘密鍵と証明書の作成に使用されます。 logging_pki_filesこのパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src、およびtlsで指定) を設定できます。注記logging_certificatesを使用して管理対象ノードにファイルを作成する場合は、ca_cert_src、cert_src、およびprivate_key_srcを使用しないでください。これらは、logging_certificatesによって作成されていないファイルのコピーに使用されます。ca_cert-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemです。ファイル名はユーザーが設定します。 cert-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemです。ファイル名はユーザーが設定します。 private_key-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemです。ファイル名はユーザーが設定します。 ca_cert_src-
ターゲットホストの
ca_certで指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 cert_src-
ターゲットホストの
certで指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 private_key_src-
ターゲットホストの
private_keyで指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificatesを使用する場合は、これを使用しないでください。 tls-
このパラメーターを
trueに設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: falseに設定します。
ロール変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
6.4. RELP で logging RHEL システムロールの使用 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、Reliable Event Logging Protocol (RELP) を RELP クライアントと RELP サーバー間で設定できます。
RELP は、TCP ネットワーク上でデータとメッセージをログに記録するためのネットワークプロトコルです。イベントメッセージを確実に配信するので、メッセージの損失が許されない環境で使用できます。
RELP の送信側はコマンド形式でログエントリーを転送し、受信側は処理後に確認応答します。整合性を確保するために、RELP は転送される各コマンドにトランザクション番号を保存します。これはあらゆる種類のメッセージ回復に使用されます。
6.4.1. RELP を使用したクライアントロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、ローカルに保存されたログメッセージを RELP を使用してリモートロギングシステムに転送するように設定できます。
RELP 設定は Transport Layer Security (TLS) を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure client-side of the remote logging solution by using RELP hosts: managed-node-01.example.com tasks: - name: Deploy basic input and RELP output ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_inputs: - name: basic_input type: basics logging_outputs: - name: relp_client type: relp target: logging.server.com port: 20514 tls: true ca_cert: /etc/pki/tls/certs/ca.pem cert: /etc/pki/tls/certs/client-cert.pem private_key: /etc/pki/tls/private/client-key.pem pki_authmode: name permitted_servers: - '*.server.example.com' logging_flows: - name: example_flow inputs: [basic_input] outputs: [relp_client]サンプル Playbook で指定されている設定は次のとおりです。
target- リモートロギングシステムが稼働しているホスト名を指定する必須パラメーターです。
port- リモートロギングシステムがリッスンしているポート番号です。
tlsネットワーク上でログをセキュアに転送します。セキュアなラッパーが必要ない場合は、
tls変数をfalseに設定します。デフォルトではtlsパラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_cert、cert、private_key} や {ca_cert_src、cert_src、private_key_src} が必要です。-
{
ca_cert_src、cert_src、private_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certsと/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert、cert、private_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - 両方のトリプレットが設定されている場合、ファイルがコントロールノード上のローカルパスから管理対象ノードの特定のパスに転送されます。
-
{
ca_cert-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemです。ファイル名はユーザーが設定します。 cert-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemです。ファイル名はユーザーが設定します。 private_key-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemです。ファイル名はユーザーが設定します。 ca_cert_src-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_certを指定している場合は、その場所にコピーされます。 cert_src-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
certを指定している場合には、その証明書が場所にコピーされます。 private_key_src-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_keyを指定している場合は、その場所にコピーされます。 pki_authmode-
nameまたはfingerprintの認証モードを使用できます。 permitted_servers- ロギングクライアントが、TLS 経由での接続およびログ送信を許可するサーバーのリスト。
inputs- ロギング入力ディクショナリーのリスト。
outputs- ロギング出力ディクショナリーのリスト。
ロール変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
6.4.2. RELP を使用したサーバーログの設定 リンクのコピーリンクがクリップボードにコピーされました!
logging RHEL システムロールを使用すると、ログメッセージを RELP を使用してリモートロギングシステムから受信するようにサーバーを設定できます。
RELP 設定は TLS を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure server-side of the remote logging solution by using RELP hosts: managed-node-01.example.com tasks: - name: Deploying remote input and remote_files output ansible.builtin.include_role: name: redhat.rhel_system_roles.logging vars: logging_inputs: - name: relp_server type: relp port: 20514 tls: true ca_cert: /etc/pki/tls/certs/ca.pem cert: /etc/pki/tls/certs/server-cert.pem private_key: /etc/pki/tls/private/server-key.pem pki_authmode: name permitted_clients: - '*client.example.com' logging_outputs: - name: remote_files_output type: remote_files logging_flows: - name: example_flow inputs: [relp_server] outputs: [remote_files_output]サンプル Playbook で指定されている設定は次のとおりです。
port- リモートロギングシステムがリッスンしているポート番号です。
tlsネットワーク上でログをセキュアに転送します。セキュアなラッパーが必要ない場合は、
tls変数をfalseに設定します。デフォルトではtlsパラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_cert、cert、private_key} や {ca_cert_src、cert_src、private_key_src} が必要です。-
{
ca_cert_src、cert_src、private_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certsと/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert、cert、private_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - 両方のトリプレットが設定されている場合、ファイルがコントロールノード上のローカルパスから管理対象ノードの特定のパスに転送されます。
-
{
ca_cert-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pemです。ファイル名はユーザーが設定します。 cert-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pemです。ファイル名はユーザーが設定します。 private_key-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pemです。ファイル名はユーザーが設定します。 ca_cert_src-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_certを指定している場合は、その場所にコピーされます。 cert_src-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
certを指定している場合には、その証明書が場所にコピーされます。 private_key_src-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_keyを指定している場合は、その場所にコピーされます。 pki_authmode-
nameまたはfingerprintの認証モードを使用できます。 permitted_clients- ロギングサーバーが TLS 経由での接続およびログ送信を許可するクライアントのリスト。
inputs- ロギング入力ディクショナリーのリスト。
outputs- ロギング出力ディクショナリーのリスト。
ロール変数の詳細と
rsyslogの詳細は、/usr/share/ansible/roles/rhel-system-roles.logging/README.mdファイルと、コントロールノードのrsyslog.conf(5)およびsyslog(3)man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
第7章 システムの監査 リンクのコピーリンクがクリップボードにコピーされました!
システムを監査して、セキュリティー関連のイベントを記録し、潜在的な侵入を特定し、セキュリティーポリシーへの準拠を確認します。Linux の Audit システムは、このセキュリティープロセスの中核を成すものです。
Audit システムは、システムに追加のセキュリティーを提供するものではありません。その代わりに、システム上のセキュリティーポリシー違反を検出できます。SELinux などの追加のセキュリティー対策を講じることで、これらの違反をさらに防止できます。
7.1. Linux の Audit リンクのコピーリンクがクリップボードにコピーされました!
Linux Audit を使用すると、システムのセキュリティー関連情報を追跡できます。Audit は、事前に設定されたルールに従ってログエントリーを生成し、システム上のイベントに関する情報を可能な限り多く記録します。この情報は、セキュリティーポリシー違反者を特定するために不可欠です。
監査では、次のような情報をログファイルに記録できます。
- イベントの日時、タイプ、結果
- サブジェクトとオブジェクトの機密性のラベル
- イベントを開始したユーザーの ID とイベントの関連性
- Audit 設定の全修正および Audit ログファイルへのアクセス試行
- SSH、Kerberos などの認証メカニズムのすべての使用
-
信頼できるデータベース (
/etc/passwdなど) への変更 - システムからの情報のインポート、およびシステムへの情報のエクスポートの試行
- ユーザー ID、サブジェクトとオブジェクトのラベルなどの属性に基づくイベントの追加と除外
Audit システムの使用は、いくつかのセキュリティー関連認証の要件にもなっています。Audit は、以下の認定またはコンプライアンスガイドの要件に合致するか、それを超えるように設計されています。
- Controlled Access Protection Profile (CAPP)
- Labeled Security Protection Profile (LSPP)
- Rule Set Base Access Control (RSBAC)
- NISPOM (National Industrial Security Program Operating Manual)
- Federal Information Security Management Act (FISMA)
- Payment Card Industry - Data Security Standard (PCI-DSS)
- Security Technical Implementation Guides (STIG)
監査は、National Information Assurance Partnership (NIAP) および Best Security Industries (BSI) によっても評価されています。Audit は以下の用途に使用できます。
- ファイルアクセスの監視
- Audit は、ファイルやディレクトリーがアクセス、修正、または実行されたか、もしくはファイル属性が変更されたかを追跡できます。これはたとえば、重要なファイルへのアクセスを検出し、これらのファイルが破損した場合に監査証跡を入手可能とする際に役に立ちます。
- システムコールの監視
-
Audit は、一部のシステムコールが使用されるたびにログエントリーを生成するように設定できます。これを使用すると、
settimeofdayやclock_adjtime、その他の時間関連のシステムコールを監視することで、システム時間への変更を追跡できます。 - ユーザーが実行したコマンドの記録
-
Audit はファイルが実行されたかどうかを追跡できるため、特定のコマンドの実行を毎回記録するようにルールを定義できます。たとえば、
/binディレクトリー内のすべての実行可能ファイルにルールを定義できます。これにより作成されるログエントリーをユーザー ID で検索すると、ユーザーごとに実行されたコマンドの監査証跡を生成できます。 - システムパス名の実行を記録する
- ルールの呼び出し時にパスを inode に変換するファイルアクセスを監視する以外に、ルールの呼び出し時に存在しない場合や、ルールの呼び出し後にファイルが置き換えられた場合でも、Audit がパスの実行を監視できるようになりました。これにより、ルールは、プログラム実行ファイルをアップグレードした後、またはインストールされる前にも機能を継続できます。
- セキュリティーイベントの記録
-
pam_faillock認証モジュールは、失敗したログイン試行を記録できます。Audit で失敗したログイン試行も記録するように設定すると、ログインを試みたユーザーに関する追加情報が提供されます。 - イベントの検索
-
Audit は
ausearchユーティリティーを提供します。これを使用すると、ログエントリーをフィルターにかけ、いくつかの条件に基づく完全な監査証跡を提供できます。 - サマリーレポートの実行
-
aureportユーティリティーを使用すると、記録されたイベントのデイリーレポートを生成できます。システム管理者は、このレポートを分析し、疑わしいアクティビティーをさらに調べることができます。 - ネットワークアクセスの監視
-
nftables、iptables、およびebtablesユーティリティーは、Audit イベントを発生するように設定できるため、システム管理者がネットワークアクセスを監視できるようになります。
Audit は、収集される情報の量に応じてシステムのパフォーマンスに影響を与えます。
7.2. Audit システムのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Audit システムは、ユーザー空間アプリケーションおよびユーティリティーと、カーネル側のシステムコール処理という 2 つの主要部分で構成されます。カーネルコンポーネントは、ユーザー空間アプリケーションからシステムコールを受け、これを user、task、fstype、または exit のいずれかのフィルターで振り分けます。
システムコールが exclude フィルターを通過すると、前述のフィルターのいずれかに送られます。このフィルターにより、Audit ルール設定に基づいてシステムコールが Audit デーモンに送信され、さらに処理されます。
ユーザー空間の Audit デーモンは、カーネルから情報を収集し、ログファイルにエントリーを書き込みます。他のユーザー空間ユーティリティーは、Audit デーモン、カーネルの Audit コンポーネント、または Audit ログファイルと相互作用します。
-
auditctlAudit 制御ユーティリティーはカーネル Audit コンポーネントと相互作用し、ルールを管理するだけでなくイベント生成プロセスの多くの設定やパラメーターも制御します。 -
残りの Audit ユーティリティーは、Audit ログファイルのコンテンツを入力として受け取り、ユーザーの要件に基づいて出力を生成します。たとえば、
aureportユーティリティーは、記録された全イベントのレポートを生成します。
RHEL 10 では、Audit dispatcher デーモン (audisp) 機能は、Audit デーモン (auditd) に統合されています。リアルタイム分析プログラムと Audit イベントの対話を可能にするプラグインの設定ファイルは、デフォルトで /etc/audit/plugins.d/ ディレクトリーに配置されています。
7.3. 安全な環境のための監査設定 リンクのコピーリンクがクリップボードにコピーされました!
STIG が提供するような特定の監査ルールと設定を指定して、セキュアな監査環境を構築します。これは、セキュリティー関連イベントの包括的なロギングを確実にするために有効です。
デフォルトの auditd 設定は、ほとんどの環境に適しています。ただし、環境が厳格なセキュリティーポリシーを満たす必要がある場合は、/etc/audit/auditd.conf ファイル内の Audit デーモン設定の次の設定を変更できます。
log_file-
Audit ログファイル (通常は
/var/log/audit/) を保持するディレクトリーは、別のマウントポイントにマウントされている必要があります。これにより、その他のプロセスがこのディレクトリー内の領域を使用しないようにし、Audit デーモンの残りの領域を正確に検出します。 max_log_file-
1 つの Audit ログファイルの最大サイズを指定します。Audit ログファイルを保持するパーティションで利用可能な領域をすべて使用するように設定する必要があります。
max_log_fileパラメーターは、最大ファイルサイズをメガバイト単位で指定します。指定する値は、数値にする必要があります。 max_log_file_action-
max_log_fileに設定した制限に達すると実行するアクションを指定します。Audit ログファイルが上書きされないようにkeep_logsに設定する必要があります。 space_left-
space_left_actionパラメーターに設定したアクションが発生するディスクの空き容量を指定します。管理者は、ディスクの領域を反映して解放するのに十分な時間を設定する必要があります。space_leftの値は、Audit ログファイルが生成される速度によって異なります。space_leftの値が整数として指定されている場合は、メガバイト (MiB) 単位の絶対サイズとして解釈されます。値が 1 〜 99 の数値の後にパーセント記号を付けて指定されている場合 (5% など)、Audit デーモンは、log_fileを含むファイルシステムのサイズに基づいて、メガバイト単位で絶対サイズを計算します。 space_left_action-
space_left_actionパラメーターは、適切な通知方法 (emailまたはexec) に設定することが推奨されます。 admin_space_left-
admin_space_left_actionパラメーターに設定したアクションが発生するディスクの空き領域の最小サイズ。管理者が実行するアクションのログを記録するのに十分なサイズを残す必要があります。このパラメーターの数値は、space_leftの数値より小さくする必要があります。また、数値にパーセント記号を追加 (1% など) して、Audit デーモンが、ディスクパーティションサイズに基づいて、数値を計算するようにすることもできます。 admin_space_left_action-
singleを、システムをシングルユーザーモードにし、管理者がディスク領域を解放できるようにします。 disk_full_action-
Audit ログファイルが含まれるパーティションに空き領域がない場合に発生するアクションを指定します (
haltまたはsingleに設定する必要があります)。これにより、Audit がイベントをログに記録できなくなると、システムは、シングルユーザーモードでシャットダウンまたは動作します。 disk_error_action-
Audit ログファイルが含まれるパーティションでエラーが検出された場合に発生するアクションを指定します。このパラメーターは、ハードウェアの機能不全処理に関するローカルのセキュリティーポリシーに基づいて、
syslog、single、haltのいずれかに設定する必要があります。 flush-
incremental_asyncに設定する必要があります。これはfreqパラメーターと組み合わせて機能します。これは、ハードドライブとのハード同期を強制する前にディスクに送信できるレコードの数を指定します。freqパラメーターは100に設定する必要があります。このパラメーターにより、アクティビティーが集中した際に高いパフォーマンスを保ちつつ、Audit イベントデータがディスクのログファイルと確実に同期されるようになります。
残りの設定オプションは、ローカルのセキュリティーポリシーに合わせて設定します。
7.4. auditd の開始および制御 リンクのコピーリンクがクリップボードにコピーされました!
システム監査レコードを管理する auditd サービスを開始、停止、制御します。継続的なセキュリティー監視と重要なイベントの記録のためには、このサービスを維持することが不可欠です。
auditd が設定されたら、サービスを起動して Audit 情報を収集し、ログファイルに保存します。root ユーザーで次のコマンドを実行し、auditd を起動します。
# service auditd start
システムの起動時に auditd が起動するように設定するには、次のコマンドを実行します。
# systemctl enable auditd
# auditctl -e 0 で auditd を一時的に無効にし、# auditctl -e 1 で再度有効にできます。
service auditd <action> コマンドを使用すると、auditd で他のアクションを実行できます。<action> は次のいずれかです。
stop-
auditdを停止します。 restart-
auditdを再起動します。 reloadまたはforce-reload-
/etc/audit/auditd.confファイルからauditdの設定を再ロードします。 rotate-
/var/log/audit/ディレクトリーのログファイルをローテーションします。 resume- Audit イベントのログが一旦停止した後、再開します。たとえば、Audit ログファイルが含まれるディスクパーティションの未使用領域が不足している場合などです。
condrestartまたはtry-restart-
auditdがすでに起動している場合にのみ、これを再起動します。 status-
auditdの稼働状況を表示します。
service コマンドは、auditd デーモンと正しく対話する唯一の方法です。auid 値を正しく記録するには、service コマンドを使用する必要があります。systemctl コマンドは、enable と status の 2 つのアクションにのみ使用できます。
7.5. Audit ログエントリー リンクのコピーリンクがクリップボードにコピーされました!
Audit システムによって作成されるログエントリーは、フォレンジック分析やトラブルシューティングに不可欠なデータを提供します。
デフォルトでは、Audit システムはログエントリーを /var/log/audit/audit.log ファイルに保存します。ログローテーションが有効になっていれば、ローテーションされた audit.log ファイルは同じディレクトリーに保存されます。
下記の Audit ルールを追加して、/etc/ssh/sshd_config ファイルの読み取りまたは修正の試行をすべてログに記録します。
# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
auditd デーモンが実行している場合は、たとえば次のコマンドを使用して、Audit ログファイルに新しいイベントを作成します。
$ cat /etc/ssh/sshd_config
このイベントは、audit.log ファイルでは以下のようになります。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
前述のイベントは 4 つのレコードで構成されており、タイムスタンプとシリアル番号を共有します。レコードは、常に type= で始まります。各レコードは、スペースまたはコンマで区切られた複数の名前と値のペア (name=value ) で構成されます。前述の出来事に関する詳細な分析は以下のとおりです。
例7.1 1 つ目のレコード
type=SYSCALL-
typeフィールドには、レコードのタイプが記載されます。この例のSYSCALL値は、カーネルへのシステムコールによりこれが記録されたことを示しています。 msg=audit(1364481363.243:24287):msgフィールドには以下が記録されます。-
audit(time_stamp:ID)形式のレコードのタイムスタンプおよび一意の ID。複数のレコードが同じ Audit イベントの一部として生成されている場合は、同じタイムスタンプおよび ID を共有できます。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。 -
カーネル空間およびユーザー空間のアプリケーションが提供するさまざまなイベント固有の
name=valueペア。
-
arch=c000003e-
archフィールドには、システムの CPU アーキテクチャーに関する情報が含まれます。c000003eの値は 16 進数表記で記録されます。ausearchコマンドを使用して監査レコードを検索する場合は、-iまたは--interpretオプションを使用して、16 進数値を人間が判読できる値に自動的に変換します。c000003e値はx86_64として解釈されます。 syscall=2-
syscallフィールドは、カーネルに送信されたシステムコールのタイプを記録します。この2という値は、/usr/include/asm/unistd_64.hファイル内にある人間が判読できる形の情報と突き合わせることができます。この場合、2はopenシステムコールです。ausyscallユーティリティーを使用すると、システムコール番号を人間が判読できる形式に変換できることに注意してください。ausyscall --dumpコマンドを使用して、すべてのシステムコールとその番号のリストを表示します。詳細は、ausyscall(8) の man ページを参照してください。 success=no-
successフィールドは、その特定のイベントで記録されたシステムコールが成功したかどうかを記録します。この例では、呼び出しが成功しませんでした。 exit=-13exitフィールドには、システムコールが返した終了コードを指定する値が含まれます。この値は、システムコールにより異なります。次のコマンドを実行すると、この値を人間が判読可能なものに変換できます。# ausearch --interpret --exit -13この例では、監査ログに、終了コード
-13で失敗したイベントが含まれていることが前提となります。a0=7fffd19c5592,a1=0,a2=7fffd19c5592,a3=a-
a0からa3までのフィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を、16 進法で記録します。これらの引数は、使用されるシステムコールに応じて異なります。ausearchユーティリティで解釈できます。 items=1-
itemsフィールドには、システムコールのレコードに続く PATH 補助レコードの数が含まれます。 ppid=2686-
ppidフィールドは、親プロセス ID (PPID) を記録します。この例では、2686は、bashなどの親プロセスの PPID です。 pid=3538-
pidフィールドは、プロセス ID (PID) を記録します。この例の3538はcatプロセスの PID です。 auid=1000-
auidフィールドには、loginuidである Audit ユーザー ID が記録されます。この ID はログイン時にユーザーに割り当てられ、su - johnなどのコマンドでユーザーアカウントを切り替えてユーザーのアイデンティティーが変更された場合でも、すべてのプロセスに継承されます。 uid=1000-
uidフィールドは、解析しているプロセスを開始したユーザーのユーザー ID を記録します。ausearch -i --uid UIDのコマンドを使用して、ユーザー ID をユーザー名に変換できます。 gid=1000-
gidフィールドは、解析しているプロセスを開始したユーザーのグループ ID を記録します。 euid=1000-
euidフィールドは、解析しているプロセスを開始したユーザーの実効ユーザー ID を記録します。 suid=1000-
suidフィールドは、解析しているプロセスを開始したユーザーのセットユーザー ID を記録します。 fsuid=1000-
fsuidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムユーザー ID を記録します。 egid=1000-
egidフィールドは、解析しているプロセスを開始したユーザーの実効グループ ID を記録します。 sgid=1000-
sgidフィールドは、解析しているプロセスを開始したユーザーのセットグループ ID を記録します。 fsgid=1000-
fsgidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムグループ ID を記録します。 tty=pts0-
ttyフィールドは、解析しているプロセスが開始したターミナルを記録します。 ses=1-
sesフィールドは、解析しているプロセスが開始したセッションのセッション ID を記録します。 comm="cat"-
commフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドライン名を記録します。この例では、この Audit イベントを発生するのに、catコマンドが使用されました。 exe="/bin/cat"-
exeフィールドは、解析しているプロセスを開始するために使用した実行可能ファイルへのパスを記録します。 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023-
subjフィールドは、解析しているプロセスの実行時にラベル付けされた SELinux コンテンツを記録します。 key="sshd_config"-
keyフィールドは、Audit ログでこのイベントを生成したルールに関連付けられている管理者による定義の文字列を記録します。
例7.2 2 つ目のレコード
type=CWD2 つ目のレコードの
typeフィールドの値は、CWD(現在の作業ディレクトリー) です。このタイプは、最初のレコードで指定されたシステムコールを開始したプロセスの作業ディレクトリーを記録するために使用されます。この記録の目的は、相対パスが関連する PATH 記録に保存された場合に、現行プロセスの位置を記録することにあります。これにより、絶対パスを再構築できます。
msg=audit(1364481363.243:24287)-
msgフィールドは、最初のレコードと同じタイムスタンプと ID の値を保持します。タイムスタンプは Unix の時間形式 (1970 年 1 月 1 日 00:00:00 UTC からの秒数) です。 cwd="/home/user_name"-
cwdフィールドは、システムコールが開始したディレクトリーのパスになります。
例7.3 3 つ目のレコード
type=PATH-
3 つ目のレコードでは、
typeフィールドの値はPATHです。Audit イベントには、システムコールに引数として渡されたすべてのパスにPATHタイプのレコードが含まれます。この Audit イベントでは、1 つのパス (/etc/ssh/sshd_config) のみが引数として使用されます。 msg=audit(1364481363.243:24287):-
msgフィールドは、1 つ目と 2 つ目のレコードと同じタイムスタンプと ID になります。 item=0-
itemフィールドは、SYSCALLタイプレコードで参照されているアイテムの合計数のうち、現在のレコードがどのアイテムであるかを示します。この数はゼロベースで、0は最初の項目であることを示します。 name="/etc/ssh/sshd_config"-
nameフィールドは、システムコールに引数として渡されたファイルまたはディレクトリーのパスを記録します。この場合、これは/etc/ssh/sshd_configファイルです。 inode=409248inodeフィールドには、このイベントで記録されたファイルまたはディレクトリーに関連する inode 番号が含まれます。以下のコマンドは、inode 番号409248に関連するファイルまたはディレクトリーを表示します。# find / -inum 409248 -print /etc/ssh/sshd_configdev=fd:00-
devフィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャーの ID を指定します。ここでは、値が/dev/fd/0デバイスを示しています。 mode=0100600-
modeフィールドは、ファイルまたはディレクトリーのパーミッションを、st_modeフィールドのstatコマンドが返す数字表記で記録します。詳細は、stat(2)の man ページを参照してください。この場合、0100600は-rw-------と解釈され、root ユーザーのみが/etc/ssh/sshd_configファイルへの読み取りおよび書き込み権限を持つことを意味します。 ouid=0-
ouidフィールドは、オブジェクトの所有者のユーザー ID を記録します。 ogid=0-
ogidフィールドは、オブジェクトの所有者のグループ ID を記録します。 rdev=00:00-
rdevフィールドには、特定ファイルにのみ記録されたデバイス識別子が含まれます。ここでは、記録されたファイルは通常のファイルであるため、このフィールドは使用されません。 obj=system_u:object_r:etc_t:s0-
objフィールドは、実行時に、記録されているファイルまたはディレクトリーにラベル付けする SELinux コンテキストを記録します。 nametype=NORMAL-
nametypeフィールドは、指定したシステムコールのコンテキストで各パスのレコード操作の目的を記録します。 cap_fp=none-
cap_fpフィールドは、ファイルまたはディレクトリーオブジェクトで許可されたファイルシステムベースの機能の設定に関連するデータを記録します。 cap_fi=none-
cap_fiフィールドは、ファイルまたはディレクトリーオブジェクトの継承されたファイルシステムベースの機能の設定に関するデータを記録します。 cap_fe=0-
cap_feフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能の有効ビットの設定を記録します。 cap_fver=0-
cap_fverフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能のバージョンを記録します。
例7.4 4 つ目のレコード
type=PROCTITLE-
typeフィールドには、レコードのタイプが記載されます。この例のPROCTITLE値は、このレコードにより、カーネルへのシステムコールにより発生するこの監査イベントを発生させた完全なコマンドラインを提供することが指定されることを示しています。 proctitle=636174002F6574632F7373682F737368645F636F6E666967-
proctitleフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドラインを記録します。このフィールドは 16 進数の表記で記録され、Audit ログパーサーに影響が及ばないようにします。このテキストは、この Audit イベントを開始したコマンドに復号します。ausearchコマンドを使用して監査レコードを検索する場合は、-iまたは--interpretオプションを使用して、16 進数値を人間が判読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967値は、cat /etc/ssh/sshd_configとして解釈されます。
7.6. Auditctl で定義された監査ルールの例 リンクのコピーリンクがクリップボードにコピーされました!
auditctl ユーティリティーを使用して Audit ルールを定義し、ログでキャプチャーするシステムイベントを制御します。これらの例は、ファイルアクセス、システムコール、および実行可能ファイルを監視する方法を示しています。
Linux Audit システムは、ログファイルで取得するものを定義する一連のルールで動作します。Audit ルールは、auditctl ユーティリティーを使用してコマンドラインで設定するか、/etc/audit/rules.d/ ディレクトリーで設定できます。
auditctl コマンドを使用すると、Audit システムの基本的な機能を制御し、どの Audit イベントをログに記録するかを指定するルールを定義できます。詳細は、システムの auditctl(8) man ページを参照してください。
例7.5 ファイルシステムのルール
すべての書き込みアクセスと
/etc/passwdファイルのすべての属性変更をログに記録するルールを定義するには、次のコマンドを実行します。# auditctl -w /etc/passwd -p wa -k passwd_changesすべての書き込みアクセスと、
/etc/selinux/ディレクトリー内の全ファイルへのアクセスと、その属性変更をすべてログに記録するルールを定義するには、次のコマンドを実行します。# auditctl -w /etc/selinux/ -p wa -k selinux_changes
例7.6 システムコールのルール
システムで 64 ビットアーキテクチャーが使用され、システムコールの
adjtimexまたはsettimeofdayがプログラムにより使用されるたびにログエントリーを作成するルールを定義するには、次のコマンドを実行します。# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_changeユーザー ID が 1000 以上のシステムユーザーがファイルを削除したりファイル名を変更するたびに、ログエントリーを作成するルールを定義するには、次のコマンドを実行します。
# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete-F auid!=4294967295オプションが、ログイン UID が設定されていないユーザーを除外するために使用されています。
例7.7 実行可能なファイルルール
/bin/idプログラムのすべての実行をログに取得するルールを定義するには、次のコマンドを入力します。# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
7.7. 永続的なルールを監査する リンクのコピーリンクがクリップボードにコピーされました!
永続的な Audit ルールを作成するには、それらを /etc/audit/rules.d/ ディレクトリーに追加します。これにより、システムの再起動後も監視設定をアクティブかつ有効な状態に維持できます。
再起動後も持続するように Audit ルールを定義するには、/etc/audit/rules.d/audit.rules ファイルに直接追加するか、/etc/audit/rules.d/ ディレクトリーにあるルールを読み込む augenrules プログラムを使用する必要があります。
auditd サービスを開始すると、/etc/audit/audit.rules ファイルが生成されることに注意してください。/etc/audit/rules.d/ のファイルは、同じ auditctl コマンドライン構文を使用してルールを指定します。ハッシュ記号 (#) に続く空の行とテキストは無視されます。
また、auditctl コマンドは、以下のように -R オプションを使用して指定したファイルからルールを読み込むのに使用することもできます。
# auditctl -R /usr/share/audit/sample-rules/30-stig.rules
augenrules スクリプトは、/etc/audit/rules.d/ ディレクトリーにあるルールを読み込み、audit.rules ファイルにコンパイルします。このスクリプトは、自然なソート順序の特定の順番で、.rules で終わるすべてのファイルを処理します。このディレクトリーのファイルは、以下の意味を持つグループに分類されます。
- 10
-
カーネルと
auditctlの設定 - 20
- 一般的なルールと一致する可能性があるが、別の一致が必要なルール
- 30
- 主なルール
- 40
- オプションのルール
- 50
- サーバー固有のルール
- 70
- システムのローカルルール
- 90
- ファイナライズ (イミュータブル)
すべてのルールを一度に適用しないでください。ポリシーを計画し、個々のファイルを /etc/audit/rules.d/ にコピーします。たとえば、STIG 設定でシステムを設定するには、10-base-config、30-stig、31-privileged、および 99-finalize の各ルールをコピーします。
/etc/audit/rules.d/ ディレクトリーにルールを保存したら、--load ディレクティブで augenrules スクリプトを実行して読み込みます。
# augenrules --load
/sbin/augenrules: No change
No rules
enabled 1
failure 1
pid 742
rate_limit 0
…
詳細は、システム上の audit.rules(8) および augenrules(8) の man ページを参照してください。
7.8. 標準に準拠するための事前設定された監査ルールファイル リンクのコピーリンクがクリップボードにコピーされました!
事前に設定されたルールファイルをベースラインとして使用することで、Audit システムを PCI-DSS や STIG などの標準規格に準拠させることができます。これらのサンプルは、特定のコンプライアンス要件を満たすためのルールの構築方法を示しています。
特定の認定標準 (OSPP、PCI DSS、STIG など) に準拠するように Audit を設定するには、audit パッケージとともにインストールされる事前設定済みルールファイルのセットを出発点として使用できます。サンプルルールは、/usr/share/audit/sample-rules ディレクトリーにあります。
セキュリティー標準は動的であり、変更される可能性があるため、sample-rules ディレクトリー内の Audit サンプルルールは網羅的なものではなく、最新のものでもありません。これらのルールは、Audit ルールがどのように構造化および記述されるかを示すためにのみ提供されています。これらは、最新のセキュリティー標準に即時に準拠することを保証するものではありません。特定のセキュリティーガイドラインに従ってシステムを最新のセキュリティー標準に準拠させるには、SCAP ベースのセキュリティーコンプライアンスツール を使用してください。
30-nispom.rules- 「National Industrial Security Program Operating Manual」の「Information System Security」の章で指定されている要件を満たす監査ルール設定
30-ospp-v42*.rules- OSPP (Protection Profile for General Purpose Operating Systems) プロファイルバージョン 4.2 に定義されている要件を満たす監査ルール設定
30-pci-dss-v31.rules- PCI DSS (Payment Card Industry Data Security Standard) v3.1 に設定されている要件を満たす監査ルール設定
30-stig.rules- Security Technical Implementation Guides (STIG) で設定されている要件を満たす監査ルール設定
上記の設定ファイルを使用するには、/etc/audit/rules.d/ ディレクトリーにコピーして、以下のように augenrules --load コマンドを使用します。
# cd /usr/share/audit/sample-rules/
# cp 10-base-config.rules 30-stig.rules 31-privileged.rules 99-finalize.rules /etc/audit/rules.d/
# augenrules --load
番号指定スキームを使用して監査ルールを順序付けできます。詳細は、/usr/share/audit/sample-rules/README-rules ファイルを参照してください。
詳細は、システムの audit.rules(7) man ページを参照してください。
7.9. augenrules の無効化 リンクのコピーリンクがクリップボードにコピーされました!
augenrules ユーティリティーを無効にすると、Audit は /etc/audit/audit.rules ファイルで定義されたルールを使用するように切り替わります。これにより、特定の環境におけるルール管理プロセスをさらに単純化できます。
手順
/usr/lib/systemd/system/auditd.serviceファイルを/etc/systemd/system/ディレクトリーにコピーします。# cp -f /usr/lib/systemd/system/auditd.service /etc/systemd/system/任意のテキストエディターで
/etc/systemd/system/auditd.serviceファイルを編集します。以下に例を示します。# vi /etc/systemd/system/auditd.serviceaugenrulesを含む行をコメントアウトし、auditctl -Rコマンドを含む行のコメント設定を解除します。#ExecStartPost=-/sbin/augenrules --load ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rulessystemdデーモンを再読み込みして、auditd.serviceファイルの変更を取得します。# systemctl daemon-reloadauditdサービスを再起動します。# service auditd restart
7.10. ソフトウェアの更新を監視するための Audit の設定 リンクのコピーリンクがクリップボードにコピーされました!
専用のルールファイルを使用して、ソフトウェアのアップデートとパッケージのインストールを監視するように Audit を設定します。この設定では、DNF や RPM などのツールがシステムを変更するたびにイベントが生成されます。
事前設定されたルール 44-installers.rules を使用して、ソフトウェアをインストールする次のユーティリティーを監視するように Audit を設定できます。
-
dnf[1] -
yum -
pip -
npm -
cpan -
gem -
luarocks
RPM ユーティリティーを監視するには、rpm-plugin-audit パッケージをインストールします。その後、Audit は、パッケージをインストールまたは更新するときに SOFTWARE_UPDATE イベントを生成します。これらのイベントをリスト表示するには、コマンドラインで ausearch -m SOFTWARE_UPDATE と入力します。
事前設定されたルールファイルは、ppc64le および aarch64 アーキテクチャーを備えたシステムでは使用できません。
前提条件
-
auditdサービスは、「安全な環境のための監査設定」 に準じて設定されています。
手順
事前設定されたルールファイル
44-installers.rulesを/usr/share/audit/sample-rules/ディレクトリーから/etc/audit/rules.d/ディレクトリーにコピーします。# cp /usr/share/audit/sample-rules/44-installers.rules /etc/audit/rules.d/監査ルールを読み込みます。
# augenrules --load
検証
読み込まれたルールをリスト表示します。
# auditctl -l -p x-w /usr/bin/dnf-3 -k software-installer -p x-w /usr/bin/yum -k software-installer -p x-w /usr/bin/pip -k software-installer -p x-w /usr/bin/npm -k software-installer -p x-w /usr/bin/cpan -k software-installer -p x-w /usr/bin/gem -k software-installer -p x-w /usr/bin/luarocks -k software-installerインストールを実行します。以下に例を示します。
# dnf reinstall -y vim-enhancedAudit ログで最近のインストールイベントを検索します。次に例を示します。
# ausearch -ts recent -k software-installer –––– time->Thu Dec 16 10:33:46 2021 type=PROCTITLE msg=audit(1639668826.074:298): proctitle=2F7573722F6C6962657865632F706C6174666F726D2D707974686F6E002F7573722F62696E2F646E66007265696E7374616C6C002D790076696D2D656E68616E636564 type=PATH msg=audit(1639668826.074:298): item=2 name="/lib64/ld-linux-x86-64.so.2" inode=10092 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1639668826.074:298): item=1 name="/usr/libexec/platform-python" inode=4618433 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1639668826.074:298): item=0 name="/usr/bin/dnf" inode=6886099 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:rpm_exec_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1639668826.074:298): cwd="/root" type=EXECVE msg=audit(1639668826.074:298): argc=5 a0="/usr/libexec/platform-python" a1="/usr/bin/dnf" a2="reinstall" a3="-y" a4="vim-enhanced" type=SYSCALL msg=audit(1639668826.074:298): arch=c000003e syscall=59 success=yes exit=0 a0=55c437f22b20 a1=55c437f2c9d0 a2=55c437f2aeb0 a3=8 items=3 ppid=5256 pid=5375 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3 comm="dnf" exe="/usr/libexec/platform-python3.6" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="software-installer"
dnf は RHEL ではシンボリックリンクであるため、dnf Audit ルールのパスにはシンボリックリンクのターゲットが含まれている必要があります。正しい Audit イベントを受信するには、path=/usr/bin/dnf パスを /usr/bin/dnf-3 に変更して、44-installers.rules ファイルを変更します。
7.11. Audit によるユーザーログイン時刻の監視 リンクのコピーリンクがクリップボードにコピーされました!
ausearch ツールと aureport ツールを使用して、ユーザーのログイン時間とセッションアクティビティーを監視および表示します。これにより、ユーザーがシステムにアクセスしたタイミングを、カスタム設定を必要とせずに明確に把握できます。
前提条件
-
auditdサービスは、「安全な環境のための監査設定」 に準じて設定されています。
手順
Audit ログで
USER_LOGINメッセージタイプを検索します。# ausearch -m USER_LOGIN -ts '12/02/2020' '18:00:00' -sv no time->Mon Nov 22 07:33:22 2021 type=USER_LOGIN msg=audit(1637584402.416:92): pid=1939 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=10.37.128.108 terminal=ssh res=failed'-
-tsオプションを使用して日付と時刻を指定できます。このオプションを使用しない場合、ausearchは今日の結果を提供し、時刻を省略すると、ausearchは午前 0 時からの結果を提供します。 -
成功したログイン試行を除外するには
-sv yesオプションを、失敗したログイン試行を除外するには-sv noを、それぞれ使用することができます。
-
ausearchコマンドの生の出力をaulastユーティリティーにパイプで渡します。このユーティリティーは、lastコマンドの出力と同様の形式で出力を表示します。以下に例を示します。# ausearch --raw | aulast --stdin root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.22.16.106 Mon Nov 22 07:40 - 07:40 (00:00) reboot system boot 4.18.0-348.6.el8 Mon Nov 22 07:33--login -iオプションを指定してaureportコマンドを使用し、ログインイベントのリストを表示します。# aureport --login -i Login Report ============================================ # date time auid host term exe success event ============================================ 1. 11/16/2021 13:11:30 root 10.40.192.190 ssh /usr/sbin/sshd yes 6920 2. 11/16/2021 13:11:31 root 10.40.192.190 ssh /usr/sbin/sshd yes 6925 3. 11/16/2021 13:11:31 root 10.40.192.190 ssh /usr/sbin/sshd yes 6930 4. 11/16/2021 13:11:31 root 10.40.192.190 ssh /usr/sbin/sshd yes 6935 5. 11/16/2021 13:11:33 root 10.40.192.190 ssh /usr/sbin/sshd yes 6940 6. 11/16/2021 13:11:33 root 10.40.192.190 /dev/pts/0 /usr/sbin/sshd yes 6945
第8章 セキュリティー更新の管理および監視 リンクのコピーリンクがクリップボードにコピーされました!
セキュリティー更新をインストールし、更新に関する追加の詳細を表示して、新たに発見された脅威や脆弱性から Red Hat Enterprise Linux システムを保護します。
8.1. セキュリティー更新の特定 リンクのコピーリンクがクリップボードにコピーされました!
エンタープライズシステムを現在および今後の脅威から保護するには、定期的なセキュリティー更新が必要です。Red Hat Product Security チームは、エンタープライズソリューションを確実にデプロイおよび維持するのに必要なガイダンスを提供します。
8.1.1. セキュリティーアドバイザリーとは リンクのコピーリンクがクリップボードにコピーされました!
Red Hat セキュリティーアドバイザリー (RHSA) には、Red Hat 製品およびサービスで修正されたセキュリティーの不具合に関する情報が記載されています。
各 RHSA には、以下の情報が含まれています。
- 重大度
- タイプおよびステータス
- 影響を受ける製品
- 修正された問題の概要
- その問題に関するチケットへのリンク。すべてのチケットが公開されているわけではないことに注意してください。
- CVE (Common Vulnerabilities and Exposures) 番号および攻撃の複雑性などの追加情報へのリンク。
Red Hat カスタマーポータルでは、Red Hat が公開している Red Hat セキュリティーアドバイザリーの一覧を提供しています。Red Hat セキュリティーアドバイザリーのリストからアドバイザリーの ID に移動して、特定のアドバイザリーの詳細を表示できます。
図8.1 セキュリティーアドバイザリーのリスト
必要に応じて、特定の製品、バリアント、バージョン、およびアーキテクチャーで結果を絞り込むこともできます。たとえば、Red Hat Enterprise Linux 9 のアドバイザリーのみを表示するには、以下のフィルターを設定します。
- 製品: Red Hat Enterprise Linux
- バリアント: すべてのバリアント
- バージョン: 9
- 必要に応じて、マイナーバージョンを選択します。
8.1.2. ホストにインストールされていないセキュリティー更新の表示 リンクのコピーリンクがクリップボードにコピーされました!
ホストシステムに現在インストールされていないすべてのセキュリティー更新を表示し、即座に対応またはインストールが必要な重要なパッケージを特定します。
DNF ユーティリティーを使用して、お使いのシステムで利用可能なセキュリティー更新のリストを表示できます。
前提条件
- Red Hat サブスクリプションがホストに割り当てられている。
手順
ホストにインストールされていない、利用可能なセキュリティー更新のリストを表示します。
# dnf updateinfo list updates security … RHSA-2019:0997 Important/Sec. platform-python-3.6.8-2.el8_0.x86_64 RHSA-2019:0997 Important/Sec. python3-libs-3.6.8-2.el8_0.x86_64 RHSA-2019:0990 Moderate/Sec. systemd-239-13.el8_0.3.x86_64 …
8.1.3. ホストにインストールされているセキュリティー更新の表示 リンクのコピーリンクがクリップボードにコピーされました!
ホストにすでにインストールされているセキュリティー更新を表示します。これにより、必要な修正が適用されていることを確認し、システムの現在のセキュリティー状況を追跡できます。
DNF ユーティリティーを使用して、お使いのシステムでインストールしたセキュリティー更新をリスト表示できます。
手順
ホストにインストールされているセキュリティー更新のリストを表示します。
# dnf updateinfo list security --installed … RHSA-2019:1234 Important/Sec. libssh2-1.8.0-7.module+el8+2833+c7d6d092 RHSA-2019:4567 Important/Sec. python3-libs-3.6.7.1.el8.x86_64 RHSA-2019:8901 Important/Sec. python3-libs-3.6.8-1.el8.x86_64 …1 つのパッケージに含まれる複数の更新がインストールされている場合は、
dnfで、そのパッケージのアドバイザリーがすべて表示されます。上記の例では、システムのインストール以降、python3-libsパッケージのセキュリティー更新が 2 つインストールされています。
8.1.4. DNF を使用した特定のアドバイザリーの表示 リンクのコピーリンクがクリップボードにコピーされました!
DNF ユーティリティーを使用して、特定のセキュリティーアドバイザリーに関する詳細情報を表示します。これにより、関連するバグ、その重大度、および修正に含まれるパッケージを把握できます。
前提条件
- Red Hat サブスクリプションがホストに割り当てられている。
- セキュリティーアドバイザリーの ID がわかっている。
- そのアドバイザリーが提供する更新がインストールされていない。
手順
特定のアドバイザリーを表示します。次に例を示します。
# dnf updateinfo info RHSA-2019:0997 ==================================================================== Important: python3 security update ==================================================================== Update ID: RHSA-2019:0997 Type: security Updated: 2019-05-07 05:41:52 Bugs: 1688543 - CVE-2019-9636 python: Information Disclosure due to urlsplit improper NFKC normalization CVEs: CVE-2019-9636 Description: …
8.2. セキュリティー更新のインストール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux では、特定のセキュリティーアドバイザリーと利用可能なすべてのセキュリティー更新をインストールできます。セキュリティー更新を自動的にダウンロードしてインストールするようにシステムを設定することもできます。
8.2.1. 利用可能なすべてのセキュリティー更新のインストール リンクのコピーリンクがクリップボードにコピーされました!
DNF ユーティリティーを使用して、利用可能なすべての Red Hat セキュリティー更新をインストールします。これにより、すべての既知の脆弱性にパッチを適用し、迅速にシステムを完全なコンプライアンス状態にすることができます。
前提条件
- Red Hat サブスクリプションがホストに割り当てられている。
手順
DNF ユーティリティーを使用してセキュリティー更新をインストールします。
# dnf update --security--securityパラメーターを指定しないと、dnf updateにより、バグ修正や機能拡張を含むすべての更新がインストールされます。y を押し、インストールを確認して開始します。
… Transaction Summary =========================================== Upgrade … Packages Total download size: … M Is this ok [y/d/N]: yオプション: 更新したパッケージのインストール後にシステムを手動で再起動する必要があるプロセスをリスト表示します。
# dnf needs-restarting 1107 : /usr/sbin/rsyslogd -n 1199 : -bash上記のコマンドは、再起動が必要なプロセスのみをリスト表示し、サービスはリスト表示しません。つまり、
systemctlコマンドを使用してリストしたプロセスを再起動することはできません。たとえば、出力に示されるbashプロセスは、そのプロセスを所有するユーザーがログアウトすると終了します。
8.2.2. 特定のアドバイザリーが提供するセキュリティー更新のインストール リンクのコピーリンクがクリップボードにコピーされました!
DNF ユーティリティーを使用して、特定のアドバイザリー ID に関連付けられたセキュリティー更新をインストールします。これにより、すべてのパッケージを更新することなく、対象を絞って重大な脆弱性にパッチを適用できます。
状況によっては、特定の更新のみをインストールする必要があります。たとえば、ダウンタイムをスケジュールすることなく特定のサービスを更新できる場合、そのサービスのセキュリティー更新のみをインストールし、後で残りの更新をインストールできます。
前提条件
- Red Hat サブスクリプションがホストに割り当てられている。
更新するセキュリティーアドバイザリーの ID がわかっている。
詳細は、セキュリティーアドバイザリーの更新の特定 を参照してください。
手順
特定のアドバイザリーをインストールします。次に例を示します。
# dnf update --advisory=RHSA-2019:0997または、
dnf upgrade-minimalコマンドを使用して、最小限のバージョン変更で特定のアドバイザリーを適用するように更新します。次に例を示します。# dnf upgrade-minimal --advisory=RHSA-2019:0997yを押し、インストールを確認して開始します。… Transaction Summary =========================================== Upgrade … Packages Total download size: … M Is this ok [y/d/N]: y必要に応じて、更新されたパッケージのインストール後にシステムを手動で再起動する必要のあるプロセスのリストを表示します。
# dnf needs-restarting 1107 : /usr/sbin/rsyslogd -n 1199 : -bash上記のコマンドは、再起動が必要なプロセスのみをリスト表示し、サービスはリスト表示しません。つまり、
systemctlコマンドを使用してリストしたプロセスを再起動することはできません。たとえば、出力に示されるbashプロセスは、そのプロセスを所有するユーザーがログアウトすると終了します。
8.2.3. セキュリティー更新の自動インストール リンクのコピーリンクがクリップボードにコピーされました!
dnf-automatic ツールを設定して、セキュリティー更新を自動的にダウンロードおよびインストールします。このタスクを自動化することで、手動による介入を必要とせずに、新たに発見された脅威からシステムを確実に保護できます。
詳細は、システム上の dnf-automatic(8) man ページを参照してください。
前提条件
- Red Hat サブスクリプションがホストに割り当てられている。
-
dnf-automaticパッケージがインストールされている。
手順
/etc/dnf/automatic.confファイルの[commands]セクションで、upgrade_typeオプションがdefaultまたはsecurityに設定されていることを確認します。[commands] # What kind of upgrade to perform: # default = all available upgrades # security = only the security upgrades upgrade_type = securitysystemd タイマーユニットを有効にして起動します。
# systemctl enable --now dnf-automatic-install.timer
検証
タイマーが有効化されていることを確認します。
# systemctl status dnf-automatic-install.timer