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

◆環境情報
当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。
◆セキュリティ強化
・RKHunterによるrootkit検知
RKHunter(Rootkit Hunter)は、Linuxシステムにおいてrootkitやマルウェア、バックドア、脆弱性を検知するためのセキュリティツールです。
システムファイルの改ざん検出、既知のrootkit検知、ネットワークポートの監視などを行い、システム管理者に警告を通知します。
インストール
EPELリポジトリの確認
EPELリポジトリが有効になっているか確認します。
# dnf repolist | grep epel
有効になっていない場合は、以下のコマンドでインストールします。
dnf install -y epel-release
RKHunterのインストール
EPELリポジトリからRKHunterをインストールします。
# dnf install -y rkhunter
基本設定
日本語化
RKHunterのログや出力メッセージを日本語化するには、設定ファイルで言語を変更します。
まず、使用可能な言語リストを表示します。
# rkhunter --list languages
Current languages:
cn de en ja tr tr.utf8 zh zh.utf8
設定ファイルの編集
RKHunterの設定ファイルを編集して、メール通知設定及び日本語化設定を行います。
# vi /etc/rkhunter.conf
以下の設定を変更または追加します。
# メール通知の設定
MAIL-ON-WARNING=root@localhost
# メール件名の設定
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"
# SSH root ログイン設定(SSHの設定と合わせる)
ALLOW_SSH_ROOT_USER=no
# 言語設定(日本語化)
LANGUAGE=ja
設定項目の説明:
MAIL-ON-WARNING
: 警告発生時のメール送信先MAIL_CMD
: メール送信時の件名設定ALLOW_SSH_ROOT_USER
: SSHでのrootログイン許可設定LANGUAGE
: 表示言語の設定
データベースの更新
RKHunterのデータベースを最新の状態に更新します。
# rkhunter --update
実行結果例:
[ Rootkit Hunter バージョン 1.4.6 ]
rkhunterデータファイルをチェックする ...
ファイル mirrors.dat をチェックする [ No 更新 ]
ファイル programs_bad.dat をチェックする [ No 更新 ]
ファイル backdoorports.dat をチェックする [ No 更新 ]
ファイル suspscan.dat をチェックする [ No 更新 ]
ファイル i18n/cn をチェックする [ No 更新 ]
ファイル i18n/de をチェックする [ No 更新 ]
ファイル i18n/en をチェックする [ No 更新 ]
ファイル i18n/tr をチェックする [ No 更新 ]
ファイル i18n/tr.utf8 をチェックする [ No 更新 ]
ファイル i18n/zh をチェックする [ No 更新 ]
ファイル i18n/zh.utf8 をチェックする [ No 更新 ]
ファイル i18n/ja をチェックする [ No 更新 ]
システムファイル情報の初期化
現在のシステム状態をベースラインとして登録します。
# rkhunter --propupd
実行結果例:
[ Rootkit Hunter バージョン 1.4.6 ]
ファイル updated: ファイル調査数:176 / 発見:129
動作確認
手動スキャンの実行
RKHunterを手動実行してシステムをスキャンします。
rkhunter --check --sk
オプションの説明:
--check
: システム全体をチェック--sk
(--skip-keypress
) : キー入力待ちをスキップして自動実行
実行結果例:
[ Rootkit Hunter バージョン 1.4.6 ]
システムコマンドをチェックする ...
システムチェック概要
=====================
ファイルプロパティチェック ...
ファイルチェック: 129
疑わしいファイル: 0
Rootkitチェック ...
Rootkitチェック済み : 484
rootkitの可能性: 0
アプリケーションチェック ...
すべてのチェックがスキップされました。
システムチェックツール: 4 minutes and 2 seconds
すべての結果がログファイルに書き込まれました: /var/log/rkhunter/rkhunter.log
システムチェック中に警告は見つかりませんでした。
よくある警告と対処法
SSH設定の不整合警告
SSHの設定とRKHunterの設定で不整合がある場合の対処法です。
RKHunterからのスキャン結果メールにSSH設定ファイルとRKHunter設定ファイル内でのrootログイン禁止設定の不一致を警告表示されます。

現在のSSH設定確認
grep PermitRootLogin /etc/ssh/sshd_config
出力例:
#PermitRootLogin without-password
PermitRootLogin no
RKHunter設定の調整
SSH設定に合わせてRKHunterの設定を変更します。
# vi /etc/rkhunter.conf
ALLOW_SSH_ROOT_USER=no
設定変更後、システムファイル情報を更新します。
# rkhunter --propupd
自動実行の設定
標準の自動実行スクリプト
RKHunterインストール時に、/etc/cron.daily/rkhunter
に自動実行スクリプトが配置されます。このスクリプトは毎日自動実行され、以下の処理を行います。
# cat /etc/cron.daily/rkhunter
#!/usr/bin/sh
# 01-rkhunter A shell script to update and run rkhunter via CRON
XITVAL=0
# Get a secure tempfile
TMPFILE1=`/bin/mktemp -p /var/lib/rkhunter rkhcronlog.XXXXXXXXXX` || exit 1
if [ ! -e /var/lock/subsys/rkhunter ]; then
# Try to keep the SysInit boot scan from colliding with us (highly unlikely)
/bin/touch /var/lock/subsys/rkhunter
# Source system configuration parameters.
if [ -e /etc/sysconfig/rkhunter ] ; then
. /etc/sysconfig/rkhunter
else
MAILTO=root@localhost
fi
# If a diagnostic mode scan was requested, setup the parameters
if [ "$DIAG_SCAN" = "yes" ]; then
RKHUNTER_FLAGS="--checkall --skip-keypress --nocolors --quiet --appendlog --display-logfile"
else
RKHUNTER_FLAGS="--cronjob --nocolors --report-warnings-only"
fi
# Set a few critical parameters
RKHUNTER=/usr/bin/rkhunter
LOGFILE=/var/log/rkhunter/rkhunter.log
# Run RootKit Hunter if available
if [ -x $RKHUNTER ]; then
/bin/echo -e "\n--------------------- Start Rootkit Hunter Update ---------------------" \
> $TMPFILE1
/bin/nice -n 10 $RKHUNTER --update --nocolors 2>&1 >> $TMPFILE1
/bin/echo -e "\n---------------------- Start Rootkit Hunter Scan ----------------------" \
>> $TMPFILE1
/bin/nice -n 10 $RKHUNTER $RKHUNTER_FLAGS 2>&1 >> $TMPFILE1
XITVAL=$?
/bin/echo -e "\n----------------------- End Rootkit Hunter Scan -----------------------" \
>> $TMPFILE1
if [ $XITVAL != 0 ]; then
/bin/cat $TMPFILE1 | /bin/mail -s "rkhunter Daily Run on $(hostname)" $MAILTO
fi
/bin/cat $TMPFILE1 >> $LOGFILE
fi
# Delete the gating lockfile
/bin/rm -f /var/lock/subsys/rkhunter
fi
# Delete the secure tempfile
/bin/rm -f $TMPFILE1
exit $XITVAL
45~47行目により、警告がある場合のみメール送信されます。
48行目で、結果を常にログファイルに追記するようになっています。
ログの確認
ログファイルの場所
RKHunterのログは以下の場所に保存されます。
# メインログ
# /var/log/rkhunter/rkhunter.log
# 過去ログ
# /var/log/rkhunter/rkhunter.log-YYYYMMDD
補足
ログ出力設定
RKHunterのログファイルの出力先は、メイン設定ファイルである/etc/rkhunter.confで設定されます。
デフォルトでは、ログファイルは/var/log/rkhunter/rkhunter.logに出力されます。
設定ファイル内で、LOGFILE
ディレクティブを探すことで、このパスを確認または変更できます。
# view /etc/rkhunter.conf
# 抜粋
# The default value is '/var/log/rkhunter.log'.
#
LOGFILE=/var/log/rkhunter/rkhunter.log
ログローテーション設定
RKHunterのログローテーションに関する設定は、システム標準のlogrotateサービスを利用します。
設定ファイルの場所は、/etc/logrotate.d/rkhunterにあります。
# cat /etc/logrotate.d/rkhunter
/var/log/rkhunter/rkhunter.log {
weekly
notifempty
create 640 root root
}
設定内容の解説:
- /var/log/rkhunter/rkhunter.log : このログローテーション設定が適用される対象のファイルを指定しています。ここでは、RKHunterのログファイルが対象となります。複数のファイルを指定することも可能です。
- weekly : ログローテーションの頻度を週次に設定します。この設定により、
logrotate
は1週間に1度、ログファイルのローテーションを試みます。他の設定値にはdaily
(毎日)やmonthly
(月1回)などがあります。 - notifempty : ローテーション実行時に、対象のログファイルが空の場合は何もしないという設定です。ログが書き込まれていない週は、新しい空のログファイルが作成されることを防ぎます。
- create 640 root root : ローテーション後に新しく作成されるログファイルのパーミッション、所有者、グループを指定しています。
640
: ファイルのパーミッションをrw-r-----
(所有者には読み書き、グループには読み取りのみ、その他にはなし)に設定します。root root
: 所有者をroot
、グループをroot
に設定します。
この設定により、RKHunterのログは毎週1回、空でなければ新しいファイルにローテーションされ、元のファイルはroot
ユーザーだけが読み書きできる新しい空のファイルに置き換えられます。
古いログファイルの命名規則は、システム全体の/etc/logrotate.conf
ファイルでdateext
などが指定されている場合に、それに従います。
# cat /etc/logrotate.conf
# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
設定内容の解説:
Linuxシステム全体のログローテーションに関するグローバル設定を定義するメインファイルです。
個別のアプリケーション(例:RKHunter)の設定ファイルがない場合に適用されるデフォルト設定や、すべてのログに適用される共通の設定が含まれています。
グローバル設定
weekly
: ログローテーションの頻度を週次に設定します。
このファイルにdaily
やmonthly
の指定がない限り、すべてのログローテーションはこの頻度で実行されます。rotate 4
: 最大で4世代の古いログファイルを保持します。
5回目のローテーション時に、最も古いログファイル(例:rkhunter.log.4
)が削除されます。create
: ローテーション後に、空の新しいログファイルを自動的に作成します。
これにより、アプリケーションが新しいログファイルに書き込むことができます。dateext
: ローテーションされたログファイルの末尾に、.1
,.2
のような数字ではなく、YYYYMMDD
形式の日付を付加します。
これにより、どの日にローテーションされたかが一目で分かります。
RKHunterのログファイルが日付形式で命名されているのは、この設定が有効となっているためです。#compress
: この行はコメントアウトされていますが、もし有効(compress
)にすると、ローテーションされた古いログファイルがgzip形式で圧縮されます。
個別設定の読み込み
include /etc/logrotate.d
: この行は、/etc/logrotate.d
ディレクトリ内のすべての設定ファイルを読み込むようlogrotate
に指示します。
これにより、RKHunter、nginx、httpdなどの各アプリケーションが独自のローテーションルールを定義できるようになります。
このファイルは、システムの基本的なログ管理ポリシーを決定し、個別の設定ファイルで上書きされない限り、すべてのログファイルに影響を与えます。
ログの確認方法
# 最新のログを確認
# tail -50 /var/log/rkhunter/rkhunter.log
# 警告のみを抽出
# grep -i warning /var/log/rkhunter/rkhunter.log
メンテナンス
定期更新
月1回程度、以下のメンテナンスを実行することを推奨します。
# データベース更新
# rkhunter --update
# システム情報更新(システム更新後)
# rkhunter --propupd
# 手動スキャン実行
# rkhunter --check --sk
設定ファイルのバックアップ
設定ファイルのバックアップを作成しておきます。
# cp /etc/rkhunter.conf /etc/rkhunter.conf.backup
トラブルシューティング
偽陽性への対処
正常なファイルが警告される場合は、設定ファイルでホワイトリストに追加できます。
# vi /etc/rkhunter.conf
# 特定ファイルを除外
SCRIPTWHITELIST="/usr/bin/suspect_script"
# 特定ディレクトリを除外
ALLOWHIDDENDIR="/path/to/hidden/directory"
メール送信の問題
メールが送信されない場合は、postfixやsendmailが正しく設定されているか確認します。
# postfixの状態確認
# systemctl status postfix
# メール送信テスト
# echo "test" | mail -s "Test Subject" root@localhost
まとめ
RKHunterはシステムのセキュリティ監視において重要な役割を果たします。定期的な実行とログの確認により、システムの改ざんやrootkit感染を早期発見できます。ただし、偽陽性も発生するため、警告内容を適切に判断し、必要に応じて設定調整を行うことが重要です。
セキュリティツールは複数組み合わせて使用することで効果が高まるため、RKHunterと併せてTripwire、Fail2ban、ファイアウォールなどの他のセキュリティ対策も実装することを推奨します。
◆次のステップ
次回以降も引き続き「セキュリティ強化偏」として、以下の手順を実施します。
- セキュリティ強化
- メール転送設定
これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。