maillog、secure、messagesログが肥大化してる?
AlmaLinux9に移行してまもなくPostfixへのSASL LOGINアタックの状況をmaillogの中身を調べていると、なんとまぁ沢山のアタックが来ていること・・・
(この時点ではfail2banの設定をミスっており、適切にbanされていませんでした。)
ところが数日間maillogをチェックしていると、膨大なサイズになりつつあるにもかかわらず、ログがローテートされていないことにふと気付きました。
「/var/log」内を確認してみると、AlmaLinux9に移行して1週間は経過しているというのにmaillogは分割されていません。
maillogだけでなく、cron、messages、secureといった主要なログが一切logrotateされた様子がなく、ファイルサイズが50MBを超えているものもあります。
そこでlogrotateの状況を調査してみることにしました。
logrotateの設定ファイルの確認
logrotateの全般的な設定である「/etc/logrotate.conf」を確認します。
# cat /etc/logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d
特に問題ありません。
次にログファイル毎の個別の設定を確認します。
# cat /etc/logrotate.d/syslog
cat: /etc/logrotate.d/syslog: そのようなファイルやディレクトリはありません
あれ? syslog用の設定ファイルがない?
# ls /etc/logrotate.d/
btmp certbot chrony dnf fail2ban firewalld httpd kvm_stat mariadb named php-fpm sssd vsftpd wtmp
確かに「/etc/logrotate.d/syslog」がありません。
私が間違って削除したのでしょうか? いえ、そんなはずはありません。
AlmaLinux9をMinimalインストールするとこうなるのでしょうか?
でもAlmaLinux8の時もMinimalでインストールしましたが、こんなことはなかったはずです。
いずれにしてもmaillog等がlogrotateされない理由が判明しました。
「/etc/logrotate.d/syslog」が最初から存在していないことが原因でした。
/etc/logrotate.d/syslog の作成
そこで「/etc/logrotate.d/syslog」を自分で作成します。
AlmaLinux8の時と同じ動作で良ければ、同じ内容を記述するだけです。
私の場合は、まんま記述することにします。
# nano /etc/logrotate.d/syslog ← 新規作成
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}
お好みで世代数、間隔、ファイルサイズ条件等を追記します。
ドライランで動作確認
ちゃんと動作するかドライランしてみます。
# logrotate -d /etc/logrotate.conf
(抜粋)
considering log /var/log/cron
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/maillog
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/messages
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/secure
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/spooler
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
not running postrotate script, since no logs were rotated
ローテートしたはずのない時間にローテートした扱いになっており、ローテートが不要と判断されてしまいました。
どうやらこれはlogrotateの仕様のようで、ローテートに入れるためにはローテート条件を満たすようなダミーの履歴が必要らしいです。
そこで以下のようにダミーの実行履歴を作ります。
# nano /var/lib/logrotate/logrotate.status ← 末尾に以下を追記
"/var/log/cron" 2023-6-15-0:0:0
"/var/log/maillog" 2023-6-15-0:0:0
"/var/log/messages" 2023-6-15-0:0:0
"/var/log/secure" 2023-6-15-0:0:0
"/var/log/spooler" 2023-6-15-0:0:0
私の場合はlogrotateの大元の設定ファイル「/etc/logrotate.conf」で1週間おきにローテートするようにしていますので、1週間以上前の日付を設定します。
これで再度ドライランを実行してみます。
# logrotate -d /etc/logrotate.conf
出力のコピペを忘れたので結果を書けませんが、問題なくローテートが成功しています。
logrotateを実行
ドライランが成功したので、実際にlogrotateを実行します。
# logrotate /etc/logrotate.conf
「/var/log/」内を確認すると、ちゃんとログが分割されました。
終わりに
なぜこんなことになったのか良く分かりませんが(おそらくAlmaLinux9をMinimalでインストールしたから??)、maillog等がローテートされないのは「/etc/logrotate.d/syslog」が存在しないことが原因でした。
でもこれでログが肥大化することはなくなりました。
コメント
主要なログのローテートは rsyslog-logrotate で対応できるようです。
dnf install rsyslog-logrotate
コメントありがとうございます
rsyslog-logrotateをインストールしましたところ、「/etc/logrotate.d/rsyslog」がインストールされ、ドライランも無事に成功しました
大変ありがとうございましたm(__)m