概要
letsencryptのSSL証明書の自動更新ログが、かなり貯まっている事に気づいた。このログのローテート設定をしていなかったのでしておく。
管理しているサーバがたくさんあり、それぞれOSバージョンもcertbotバージョンも違うのメモしておく。
残すログファイルは約4ヶ月分の120世代にします。
サーバOSとCertbotバージョンの一覧
全部で11台、OS種類は4種類、Certbot種類は7種類でしたが、CentOS7.9以降はcertbotをパッケージ管理システム「Snap」でインストールしたので、自動更新で実行されるサービスファイルの場所と書き方が少し違うだけだった。なので設定方法としては2パターンです。
サーバ名 | OS Ver | Certbot Ver |
---|---|---|
b-srv02 | CentOS 7.5 | certbot 1.11 |
k-srv10 | CentOS 7.5 | certbot 1.11 |
k-srv21 | CentOS 7.5 | certbot 1.11 |
k-srv25 | CentOS 7.9 | certbot 1.29.0 |
k-srv40 | RockyLinux 8.7 | certbot 2.7.4 |
k-srv41 | RockyLinux 8.7 | certbot 2.5.0 |
k-srv43 | RockyLinux 8.7 | certbot 2.5.0 |
k-srv44 | RockyLinux 8.7 | certbot 2.8.0 |
k-srv45 | RockyLinux 8.7 | certbot 2.7.4 |
k-srv46 | RockyLinux 8.7 | certbot 2.6.0 |
y-srv02 | RockyLinux 8.6 | certbot 2.6.0 |
ローテート設定
パターン1
certbotをsnapでインストールしてないパターンの設定手順です。
ログファイル数を確認
[root]# ls -al /var/log/letsencrypt/ |wc -l
925
不要ログを削除
不要な古いログ、末尾が121番以降ログを削除。
正規表現が得意でないので、121番号以降を一発で検索できないので分けて行う。
[root]# find /var/log/letsencrypt/ -type f |grep -E "letsencrypt.log.[2-9][0-9][0-9]"| xargs rm -f
[root]# find /var/log/letsencrypt/ -type f |grep -E "letsencrypt.log.1[3-9][0-9]"| xargs rm -f
[root]# find /var/log/letsencrypt/ -type f |grep -E "letsencrypt.log.12[1-9]"| xargs rm -f
[root]# ls -la /var/log/letsencrypt/letsencrypt.log* |wc -l
124
timerが実行するサービスファイルを探す
定期実行はtimerサービスで管理されているので、timerが実行するサービスファイルを探します。
[root]# ls -la /etc/systemd/system/timers.target.wants/
lrwxrwxrwx 1 root root 43 3月 6 2019 certbot-renew.timer -> /usr/lib/systemd/system/certbot-renew.timer
シンボリックリンクが貼られているファイルがあるディレクトリをみる
[root]# ls -la /usr/lib/systemd/system/ |grep cert
-rw-r--r-- 1 root root 284 1月 6 2021 certbot-renew.service
-rw-r--r-- 1 root root 195 1月 6 2021 certbot-renew.timer
サービスファイルを編集
/usr/lib/systemd/system/certbot-renew.serviceのExecStartのコマンドに-max-log-backups 120
を追加します。
[root]# vi /usr/lib/systemd/system/certbot-renew.service
[Service]
EnvironmentFile=/etc/sysconfig/certbot
Type=oneshot
ExecStart=/usr/bin/certbot renew --noninteractive --no-random-sleep-on-renew $PRE_HOOK $POST_HOOK $RENEW_HOOK $DEPLOY_HOOK $CERTBOT_ARGS
↓ ※ここを変更
ExecStart=/usr/bin/certbot renew --noninteractive --max-log-backups 120 --no-random-sleep-on-renew $PRE_HOOK $POST_HOOK $RENEW_HOOK $DEPLOY_HOOK $CERTBOT_ARGS
daemon-reloadでサービスファイルを再読み込みさせる。
※これ忘れがち
[root]# systemctl daemon-reload
パターン2
certbotをsnapでインストールしたから、timerが実行するサービスファイル名が違うのと、サービスファイル内の変数ExecStartのコマンドが少し違うだけです。
timerが実行するサービスファイルを探す
[root]# ls -la /etc/systemd/system/timers.target.wants/
lrwxrwxrwx 1 root root 44 8月 3 2022 snap.certbot.renew.timer -> /etc/systemd/system/snap.certbot.renew.timer
[root]# ls -la /etc/systemd/system/ |grep cert
-rw-r--r-- 1 root root 12288 8月 4 2022 .snap.certbot.renew.timer.swp
-rw-r--r-- 1 root root 479 8月 3 2022 snap.certbot.renew.service
-rw-r--r-- 1 root root 321 3月 29 2023 snap.certbot.renew.timer
-rw-r--r-- 1 root root 302 8月 3 2022 var-lib-snapd-snap-certbot-2192.mount
サービスファイルを編集
同じ様にExecStartのコマンドに-max-log-backups 120
を追加します。
[root]# vi /etc/systemd/system/snap.certbot.renew.service
[Service]
EnvironmentFile=-/etc/environment
ExecStart=/usr/bin/snap run --timer="00:00~24:00/2" certbot.renew
↓ ※ここを変更
ExecStart=/usr/bin/snap run --timer="00:00~24:00/2" certbot.renew --max-log-backups 120
daemon-reloadでサービスファイルを再読み込みさせる。
※これ忘れがち
[root]# systemctl daemon-reload
備考
あとは数日後にログの数が120個までになっているか確認する。
オプション --max-log-backups を付けて即実行
snap run certbot.renew --max-log-backups 120
で確認するが、これはtimerが実行したわけではないので、変数ExecStart内のコマンドの書き方があっているか分からないので、やっぱり数日後に確認するしかない。