◆はじめに
前回の「ホスト名(FQDN)設定、SSHサーバ及びNTPサーバ」に引き続き、Rocky Linux 9 サーバ構築手順次のステップは、「セキュリティ強化編」として「Tripwireによるファイル改竄検知」について設定を行います。

◆環境情報
当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。
◆セキュリティ強化
・Tripwireによるファイル改竄検知
Tripwireは、ファイルの変更や改ざんを検知し、管理者に通知するセキュリティツールです。
サーバ構築時のファイルやディレクトリ情報をデータベース化し、現在の状態との差異を検知します。
インストール
EPELリポジトリから最新パッケージをインストールします
# dnf install -y epel-release
# dnf install -y tripwire perl-interpreter
サイトキーの作成
サイトキーのパスフレーズは空のまま作成(任意で可)
# twadmin --generate-keys --site-keyfile /etc/tripwire/site.key
'~ 中略 ~'
Enter the site keyfile passphrase:
Verify the site keyfile passphrase:
Generating key (this may take several minutes)...Key generation complete.
作成されたキーファイルの確認
# ll /etc/tripwire/
total 56
-rw-r--r-- 1 root root 931 Sep 11 11:42 site.key
-rw-r--r-- 1 root root 603 Nov 5 2023 twcfg.txt
-rw-r--r-- 1 root root 46658 Sep 11 11:34 twpol.txt
ローカルキーの作成
ローカルキーのパスフレーズは空のまま作成(任意で可)
# twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key
'~ 中略 ~'
Enter the local keyfile passphrase:
Verify the local keyfile passphrase:
Generating key (this may take several minutes)...Key generation complete.
オプション説明:
--generate-keys
: 新しい暗号化キーを生成--site-keyfile
: サイトキーファイルのパスを指定--local-keyfile
: ローカルキーファイルのパスを指定
サイトキーとローカルキーの違い:
- サイトキー : 設定ファイルとポリシーファイルの署名・暗号化に使用
- ローカルキー : データベースファイルとレポートファイルの署名・暗号化に使用
警告レベルの変更
Tripwireの警告レベルを変更する
# vi /etc/tripwire/twcfg.txt
'~ 中略 ~'
LOOSEDIRECTORYCHECKING =true
'~ 中略 ~'
REPORTLEVEL =4
'~ 略 ~'
REPORTLEVEL | 説明 |
---|---|
0 | 変更があった場合に、何のレポートも生成しません。 デバッグ目的や、変更を一切記録したくない場合に利用されます。 |
1 | 変更があったファイルのリストのみを出力します。 変更されたファイル名、ファイルサイズ、タイムスタンプなどの基本的な情報が得られます。 |
2 | 変更されたファイルの内容に関する詳細な情報を表示します。 ファイルの内容の差分、変更された部分などが表示されます。 侵入者がファイルの内容を改ざんした場合など、より詳細な分析に役立ちます。 |
3 | レベル2に加えて、システム全体の状態に関する情報を表示します。 システムの負荷、ネットワーク接続、プロセス情報など、より広範囲な情報が得られます。 |
4 | レベル3に加えて、詳細な監査証跡情報を生成します。 システムの変更履歴を詳細に記録し、フォレンジック調査に役立ちます。 |
バイナリ設定ファイルの生成
テキスト形式の設定ファイル(twcfg.txt)から署名付きの暗号化バイナリ設定ファイル(tw.cfg)を生成します
# twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg
オプション説明:
-m F
(–create-cfgfile) : 設定ファイルの生成モード-c
: 出力する設定ファイル(tw.cfg)のパスを指定-S
: サイトキーファイルのパスを指定
ポリシー最適化スクリプトの実行
ポリシー最適化スクリプトをダウンロードし、実行します
# curl -LO https://raw.githubusercontent.com/Tripwire/tripwire-open-source/master/contrib/twpolmake.pl
# perl ./twpolmake.pl /etc/tripwire/twpol.txt | tee /etc/tripwire/twpol.txt.new
生成したファイルを確認します
# ll /etc/tripwire/
total 116
-rw-r--r-- 1 root root 931 Sep 11 11:52 marusrv.maruweb.jp.net-local.key
-rw-r--r-- 1 root root 931 Sep 11 11:42 site.key
-rw-r--r-- 1 root root 4586 Sep 11 15:05 tw.cfg
-rw-r--r-- 1 root root 602 Sep 11 14:27 twcfg.txt
-rw-r--r-- 1 root root 46658 Sep 11 11:34 twpol.txt
-rw-r--r-- 1 root root 46908 Sep 11 16:06 twpol.txt.new
バイナリ形式ポリシーファイルの生成
生成したテキスト形式ポリシーファイル(twpol.txt.new)から、署名付き暗号化のバイナリ形式ポリシーファイル(tw.pol)を生成します
# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
オプション説明:
-m P
(–create-polfile) : ポリシーファイルの生成モード-p
: 出力するポリシーファイル(tw.pol)のパスを指定-c
: 設定ファイル(tw.cfg)のパスを指定-S
: サイトキーファイルのパスを指定
データベースの初期化
ローカルキーを使用してデータベースを初期化します
# tripwire --init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/marusrv.maruweb.jp.net.twd
The database was successfully generated.
オプション説明:
--init
: 初期データベースを作成するモード- システム内の全ファイルをスキャンし、ベースラインデータベースを作成
動作確認
現状の確認
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/marusrv.maruweb.jp.net-20240911-230319.twr
'~ 略 ~'
新規作成ファイル後の確認(整合性チェック)
/usr/local/bin/ディレクトリにファイルを作成して確認します
# touch /usr/local/bin/newfile
# tripwire --check
'~ 中略 ~'
Rule Name Severity Level Added Removed Modified
--------- -------------- ----- ------- --------
* User binaries 66 1 0 0
ファイルが追加されたことを検知できます
主要オプション:
--check
: 整合性チェックを実行(デフォルトモード)--interactive
: 対話形式でチェック実行--severity N
: 指定した重要度レベル以上の違反のみ報告--rule-name 'ルール名'
: 特定のルールのみをチェック--email-report
: レポートをメールで送信
使用例:
# 重要度レベル80以上の違反のみチェック
tripwire --check --severity 80
# 特定のルールのみチェック
tripwire --check --rule-name "User binaries"
# 対話形式でチェック
tripwire --check --interactive
データベースの更新
改ざん検知後、現在のファイルシステム状態を正常としてベースラインを更新します
# tripwire --update --accept-all --twrfile /var/lib/tripwire/report/marusrv.maruweb.jp.net-20241210-040303.twr
Please enter your local passphrase:
Wrote database file: /var/lib/tripwire/marusrv.maruweb.jp.net.twd
オプション説明:
--update
: データベース更新モード--accept-all
: 全ての変更を自動承認--twrfile
: 更新の基となるレポートファイルを指定--interactive
: 対話形式で変更を選択的に承認
使用例:
# 対話形式で変更を選択的に更新
tripwire --update --twrfile /var/lib/tripwire/report/report.twr
# 特定の違反番号のみ更新
tripwire --update --accept '1,3,5' --twrfile /path/to/report.twr
ポリシー更新
Tripwireのポリシー更新には2つの方法があります。
方法1:--update-policyオプション使用
tripwire --update-policy --accept-all --twrfile /path/to/report.twr
オプション説明:
--update-policy
: 既存のポリシーを基に部分的な更新を実行--accept-all
: 全ての変更を自動承認--twrfile
: 更新の基となるレポートファイルを指定
方法2:手動でのポリシーファイル再作成
運用中に改ざん検知ポリシーを更新する場合は、元となるポリシーファイルで編集を行った後、ポリシー設定ファイルの再生成とベースラインの更新を行います。
# 1. ポリシーファイルを編集
# vi twpol.txt.new
# 2. バイナリポリシーファイルを再生成
# twadmin --create-polfile /etc/tripwire/twpol.txt.new
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
# 3. ポリシーファイルの内容確認
# twadmin --print-polfile
# 4. データベースを再初期化
# tripwire --init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/marusrv.maruweb.jp.net.twd
The database was successfully generated.
# 5. 整合性チェック実行
# tripwire --check
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
2つの方法の違いと使い分け
方法1(--update-policy)の特徴
適用場面:
- 軽微なポリシー変更(ファイルの追加・削除など)
- 既存ルールの調整
- レポートに基づく段階的な更新
メリット:
- 既存のデータベースを保持しながら更新
- 変更履歴が追跡可能
- 部分的な更新のため処理が高速
デメリット:
- 大幅なポリシー変更には不向き
- 複雑な変更では予期しない動作の可能性
実行例:
# 特定のファイルをチェック対象から除外したい場合
# まず現在の状態をチェック
tripwire --check
# 最新のレポートファイルを使用してポリシー更新
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)
tripwire --update-policy --twrfile "$LATEST_REPORT"
方法2(手動再作成)の特徴
適用場面:
- 大幅なポリシー変更
- 新しいルールの追加
- システム構成の大幅な変更後
- ポリシーファイルの完全な見直し
メリット:
- 完全な制御が可能
- 大幅な変更に対応
- ポリシーファイルの構造的な変更が可能
- 確実性が高い
デメリット:
- データベースの完全再作成が必要
- 処理時間が長い
- 既存の変更履歴が失われる
実行例:
# 新しいディレクトリを監視対象に追加する場合
vi /etc/tripwire/twpol.txt.new
# 以下のような内容を追加
# (
# rulename = "Custom Application Files",
# severity = $(SIG_HI)
# )
# {
# /opt/myapp -> $(SEC_BIN);
# /var/log/myapp -> $(SEC_LOG);
# }
# バイナリポリシーファイル再生成
twadmin --create-polfile /etc/tripwire/twpol.txt.new
# データベース再初期化
tripwire --init
ポリシー更新の判断基準
いつ方法1(--update-policy)を使うか
推奨ケース:
# 例1: 新しいファイルが追加された場合の対応
tripwire --check # 違反を検出
# レポートで新しいファイルを確認後
tripwire --update-policy --accept-all --twrfile /path/to/latest/report.twr
# 例2: 一部のファイルをチェック対象から除外
tripwire --update-policy --interactive --twrfile /path/to/report.twr
# 対話形式で特定の変更のみ承認
注意点:
いつ方法2(手動再作成)を使うか
推奨ケース:
# 例1: 新しいアプリケーションのインストール後
vi /etc/tripwire/twpol.txt.new
# 新しいルールを追加
twadmin --create-polfile /etc/tripwire/twpol.txt.new
tripwire --init
# 例2: システムの大幅なアップデート後
# 既存のポリシーを全面見直し
vi /etc/tripwire/twpol.txt.new
twadmin --create-polfile /etc/tripwire/twpol.txt.new
tripwire --init
注意点:
実際の運用での使い分け例
日常運用での軽微な変更
#!/bin/bash
# 定期チェック後の自動更新スクリプト例
# チェック実行
tripwire --check
# 最新レポートの取得
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)
# レポートに含まれる違反の種類を確認
VIOLATIONS=$(twprint --print-report --twrfile "$LATEST_REPORT" | grep "Rule Name" | wc -l)
if [ $VIOLATIONS -le 5 ]; then
# 軽微な変更の場合は自動更新
echo "軽微な変更を検出。自動更新を実行します。"
tripwire --update-policy --accept-all --twrfile "$LATEST_REPORT"
else
# 多数の変更がある場合は手動確認を促す
echo "多数の変更を検出。手動確認が必要です。"
echo "レポートファイル: $LATEST_REPORT"
fi
システムメンテナンス後の大幅更新
#!/bin/bash
# システムメンテナンス後のポリシー更新スクリプト
echo "システムメンテナンス後のTripwireポリシー更新を開始します。"
# 現在のポリシーをバックアップ
cp /etc/tripwire/twpol.txt.new /etc/tripwire/twpol.txt.backup.$(date +%Y%m%d)
# ポリシーファイルの編集(必要に応じて)
echo "ポリシーファイルを確認してください: /etc/tripwire/twpol.txt.new"
read -p "編集が完了したらEnterを押してください..."
# バイナリポリシーファイル再生成
echo "バイナリポリシーファイルを生成中..."
twadmin --create-polfile /etc/tripwire/twpol.txt.new
# データベース再初期化
echo "データベースを再初期化中..."
tripwire --init
# 初回チェック実行
echo "初回チェックを実行中..."
tripwire --check
echo "ポリシー更新が完了しました。"
レポート
レポートファイルで表示
過去のレポートファイルを確認する場合、/var/lib/tripwire/reportディレクトリに格納されています
# twprint --print-report --twrfile /var/lib/tripwire/report/marusrv.maruweb.jp.net-20240911-231335.twr
主要オプション:
--print-report
: レポートファイルの内容を表示--twrfile
: 表示するレポートファイルを指定--verbose
: 詳細情報を表示--summary-only
: サマリーのみ表示
使用例:
# 詳細レポートを表示
twprint --print-report --verbose --twrfile /var/lib/tripwire/report/report.twr
# サマリーのみ表示
twprint --print-report --summary-only --twrfile /var/lib/tripwire/report/report.twr
データベース情報表示
twprint --print-dbfile
オプション説明:
--print-dbfile
: データベースファイルの内容を表示--verbose
: 詳細情報を含めて表示
実用的な運用コマンド例
日次チェックスクリプト
#!/bin/bash
# 日次Tripwireチェック
REPORT_FILE="/var/lib/tripwire/report/$(hostname)-$(date +%Y%m%d-%H%M%S).twr"
# チェック実行
tripwire --check --email-report
# 最新のレポートファイルを確認
LATEST_REPORT=$(ls -t /var/lib/tripwire/report/*.twr | head -1)
echo "最新レポート: $LATEST_REPORT"
# レポートのサマリーを表示
twprint --print-report --summary-only --twrfile "$LATEST_REPORT"
重要なファイルのみチェック
# システムの重要ファイルのみチェック
tripwire --check --rule-name "Critical system boot files"
tripwire --check --rule-name "Root config files"
古いレポートファイルのクリーンアップスクリプト
#!/bin/bash
# 30日以上古いレポートファイルを削除
find /var/lib/tripwire/report -name "*.twr" -mtime +30 -delete
echo "古いレポートファイルを削除しました: $(date)"
# 上記スクリプトを月1回実行するようcrontabに設定
# crontab -e
0 2 1 * * /root/cleanup_tripwire_reports.sh
トラブルシューティング
よくあるエラーと対処法
- パスフレーズエラー
Error: Incorrect passphrase
- 対処 : キー生成時に設定したパスフレーズを正確に入力
- データベースファイルが見つからない
Error: Database file not found
- 対処 : 以下のコマンドでデータベースを再初期化
# tripwire --init
- ポリシーファイルの構文エラー
Error: Parse error in policy file
- 対処 : ポリシーファイルの構文を確認し、以下のコマンドで再生成
# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
デバッグオプション
# 詳細なデバッグ情報を出力
tripwire --check --verbose
# 設定ファイルの構文チェック
twadmin --print-cfgfile
# ポリシーファイルの構文チェック
twadmin --print-polfile
セキュリティのベストプラクティス
- キーファイルの保護
# キーファイルの権限を制限
# chmod 600 /etc/tripwire/*.key
# chown root:root /etc/tripwire/*.key - パスフレーズの管理
- 強力なパスフレーズを設定
- 定期的なパスフレーズの変更
- パスフレーズの安全な保管
- 定期的なポリシー見直し
- システム変更に応じたポリシー更新
- 不要なチェック対象の削除
- 新しい重要ファイルの追加
- ログの監視
# Tripwireのログを監視
tail -f /var/log/messages | grep tripwire
# 最新のレポートファイルを確認
# ls -lt /var/lib/tripwire/report/ | head -5
# システムログでTripwire関連のエラーを確認
# grep -i tripwire /var/log/messages - 監視対象の最適化
# 不要なファイルをポリシーから除外(例)
# vi /etc/tripwire/twpol.txt.new
# 以下のような行をコメントアウトまたは削除
# /tmp -> $(SEC_TMP);
# /var/tmp -> $(SEC_TMP);
# 重要なカスタムディレクトリを追加
# /opt/important_app -> $(SEC_BIN);
# /etc/important_config -> $(SEC_CONFIG);
これらを活用することにより、Tripwireをより効果的に運用できるようになります。
◆次のステップ
次回以降も引き続き「セキュリティ強化偏」として、以下の手順を実施します。
- セキュリティ強化
- メール転送設定
- rootメール転送設定
これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。
コメント