🦔

Debian サーバの自動セキュリティ更新

2024/08/05に公開

はじめに

表題の通りの備忘録です。

環境

  • debian 12
  • unattended-upgrade 2.9
  • apt-listchanges 3.24
  • postfix 3.7

以下の記事で触れた環境です。
https://zenn.dev/tetr4lab/articles/ad947ade600764

今回の新規導入

以下が未導入でした。

bash
$ sudo apt install unattended-upgrades postfix

(apt-listchangesは導入済みでした。)

自動更新を構成する

unattended-upgrades

https://wiki.debian.org/UnattendedUpgrades

自動更新

自動更新を設定します。

bash
$ sudoedit /etc/apt/apt.conf.d/20auto-upgrades
/etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

詳細設定

定期実行を新規に設定します。

bash
$ sudoedit /etc/apt/apt.conf.d/02periodic
/etc/apt/apt.conf.d/02periodic
// Control parameters for cron jobs by /etc/cron.daily/apt-compat //

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "21";

// Send report mail to root
//     0:  no report             (or null string)
//     1:  progress report       (actually any string)
//     2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
//     3:  + trace on
APT::Periodic::Verbose "2";

これは、公式の例をそのまま使用しています。

メールで報告

レポートをrootへメールするように設定します。

bash
$ sudoedit /etc/apt/apt.conf.d/50unattended-upgrades
/etc/apt/apt.conf.d/50unattended-upgrades
- //Unattended-Upgrade::Mail "";
+ Unattended-Upgrade::Mail "root";
- Unattended-Upgrade::MailReport "on-change";
+ Unattended-Upgrade::MailReport "always";

受領したメールの例

表題 (うまくいったとき)
unattended-upgrades result for <host>: SUCCESS
本文中の行 (更新がないとき)
No packages found that can be upgraded unattended and no pending auto-removals
本文中の行 (更新があったとき)
All upgrades installed

apt-listchanges の設定

bash
$ sudoedit /etc/apt/listchanges.conf

新規と更新の両方を報告するように設定します。

/etc/apt/listchanges.conf
- which=news
+ which=both

設定の確認

Unattended-Upgrade

bash
$ apt-config dump | grep Unattended

APT::Periodic

bash
$ apt-config dump | grep Periodic

timer

bash
$ cat /lib/systemd/system/apt-daily-upgrade.timer

スケジュール

bash
$ systemctl list-timers apt-daily*

ログの確認

bash
$ sudo cat /var/log/unattended-upgrades/unattended-upgrades.log

手動で更新 (debug)

bash
$ sudo unattended-upgrade -d

メールで受け取るレポートを外部へ転送する

SPFやDKIMを設定しないので、相手サーバによっては拒否される可能性があります。

postfix

https://www.postfix.org/documentation.html

ログ

ログの保存先を設定します。

bash
$ sudoedit /etc/postfix/main.cf
/etc/postfix/main.cf
+ # log
+ maillog_file = /var/log/mail.log

リレー

SMTPリレーサーバを設定します。

bash
$ sudoedit /etc/postfix/main.cf
/etc/postfix/main.cf
- relayhost = 
+ relayhost = <relay_host>:587
+ smtp_sasl_auth_enable = yes
+ smtp_sasl_password_maps = hash:/etc/postfix/sasl/relay_password
+ smtp_sasl_mechanism_filter = cram-md5, plain, login

/etc/postfix/sasl/relay_passwordは次で用意します。

アカウント

リレーサーバのアカウントとパスワードを記述します。

bash
$ sudoedit /etc/postfix/sasl/relay_password
/etc/postfix/sasl/relay_password
<relay_host> <user>:<password>

設定を反映します。

bash
$ sudo postmap hash:/etc/postfix/sasl/relay_password

/etc/postfix/sasl/relay_password.dbが生成されるので、ソースは削除可能です。

bash
$ sudo rm /etc/postfix/sasl/relay_password

なお、relay_password.dbよりrelay_passwordが新しい場合は、ログに警告が記載されます。

再起動

bash
$ sudo systemctl restart postfix

root 宛てメールを転送する

こうすることで、メールボックスには何も残りません。

設定

rootを指定アドレスの別名として設定します。

bash
$ sudoedit /etc/aliases
/etc/aliases
# trap decode to catch security attacks
decode:         root

# Person who should get root's mail
root:          <user>@<mail_host>

反映

/etc/aliasesから/etc/aliases.dbを生成します。

bash
$ sudo newaliases

テスト

rootへメールを送信して、転送されることを確認します。

bash
$ echo "test" | mail -s "TEST" root

rootのメールボックスに残らないことを確認します。

bash
$ sudo mail -H -u root

おわりに

以上で、毎日、自動でセキュリティ更新が試行され、実際の更新の有無にかかわらずメールでレポートが届きます。

Discussion