🦔
Debian サーバの自動セキュリティ更新
はじめに
表題の通りの備忘録です。
環境
- debian 12
- unattended-upgrade 2.9
- apt-listchanges 3.24
- postfix 3.7
以下の記事で触れた環境です。
今回の新規導入
以下が未導入でした。
bash
$ sudo apt install unattended-upgrades postfix
(apt-listchanges
は導入済みでした。)
自動更新を構成する
unattended-upgrades
自動更新
自動更新を設定します。
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
ログ
ログの保存先を設定します。
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