🖥

VPNサーバ構築(5) Raspberry Piのパッケージの自動更新とメール通知設定

2021/08/13に公開

初期設定の流れ

初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)

  • 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。

https://zenn.dev/kumatani/articles/vpn-2-settingupraspberrypi

https://zenn.dev/kumatani/articles/vpn-3-settingupraspberrypi-2

  • 2段階目ではインターネットに接続し、ファイアフォールの設定やパッケージの自動更新設定、メール通知設定、LINE通知設定などを行う。

https://zenn.dev/kumatani/articles/vpn-4-settingupraspberrypi-3

前回の記事で第2段階目のraspi-configによる設定、NTP設定、Swapの無効化とファイアフォール設定は完了しているため、本記事では第2段階目の続きとして、パッケージの自動更新とメール通知設定を行う。

パッケージの自動更新の設定

自動更新機能パッケージのインストールと再設定

下記コマンドを実行し、自動更新機能のパッケージをインストールする。

sudo apt install unattended-upgrades

また下記のコマンドでパッケージの再設定を行う。対話形式のため、"Yes"や"ok"で完了する。

sudo dpkg-reconfigure -plow unattended-upgrades

アップデート対象の設定

インストールしただけではDebian用の設定となっているため、Raspberry Pi OSに合わせた設定を行う。下記コマンドで設定ファイルを開く。

sudo vim /etc/apt/apt.conf.d/50unattended-upgrades

基本"sudo apt update"で出てくる全てのパッケージを自動更新するため、下記のように修正する。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
        "o=*,a=*";
};

もしアップデートしたくないパッケージがある場合は、下記の欄にパッケージ名を記入することで対象から除外できる。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Package-Blacklist {
}

自動再起動の設定

Linuxカーネルなどが更新された場合、適用するにはRaspberry Piの再起動が必要であるが、デフォルトの設定では自動的には再起動されない。そこで下記の設定をし、自動で再起動をするようにする。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "true";

また、下記の設定でユーザがログインしていても強制的に再起動したり、再起動する時間を設定することが可能である。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

不要になったパッケージの自動削除

下記のように設定することで、"sudo apt autoremove"を実行するのと同じように、不要パッケージを自動削除できる。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

メールサーバ Postfix のインストールと設定

Postfixはメール転送エージェントで、Raspberry Piからメールを送信するために使用する。Postfix自体がメールサーバとなるわけではなく、PostfixはメールサービスのメールサーバとRaspberry Piを繋ぐメールリレー用として使用する。

本手順はメールサービスのGmailとOutlookで動作が確認できている。今回はGmailを使用する手順を中心に記載する。

アプリパスワードの発行

GmailやOutlookでは外部のサービスからメールサーバにログインする際には通常のログインパスワードとは異なるアプリパスワードというものが必要になる。

  • Gmailでは、Googleアカウントの"セキュリティ"からアプリパスワードを発行できる。
  • Outlookでは、Microsoftアカウントの"セキュリティ"-"高度なセキュリティ オプション"からアプリパスワードを発行できる。

いずれもアプリパスワードは発行したその時しか表示されないため、管理には注意が必要である。


図1 発行したアプリパスワード Gmail(左)、Outlook(右)

Postfixのインストール

下記コマンドでPostfixをインストールする。また使用するメールサービスによってはTLSを使用するために"libsasl2-modules"も必要になるため、一応入れておく。

sudo apt install postfix libsasl2-modules

メールサーバの設定形式を聞かれたら、"No configration"を選択する。


図2 Postfixインストール時に表示される設定画面

Postfixの設定

設定ファイル(main.cf)を用意し、Postfixの設定を行う。

sudo cp /etc/postfix/main.cf.proto /etc/postfix/main.cf
sudo vim /etc/postfix/main.cf

まず外部からのメール中継要求を受け付けないために、下記を設定する。

/etc/postfix/main.cf
inet_interfaces = loopback-only

次に中継サーバを設定する。Gmailの送信サーバは"smtp.gmail.com"でポートは587番、Outlookの送信サーバは"smtp-mail.outlook.com"でポートは587番である。

/etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587

その他の項目は下記のように設定する。

/etc/postfix/main.cf
mydomain = gmail.com
myorigin = $mydomain
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =

ファイルの末尾にSMTP認証やTLSに関する設定を追記する。

/etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Gmailの場合は上記の設定のみでメール送信ができたが、Outlookでは下記のようなエラーが発生して送信できなかった。原因は差出人アドレスと認証アドレスが一致しないことによってSMTPサーバがメッセージを拒否しているらしい。

/var/log/mail.log
554 5.2.252 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message.

そこでOutlookでは下記のような設定を追記し、SMTPメールトラフィックの送信者アドレスを書き換えることで、上記エラーを回避する。

/etc/postfix/main.cf
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

書き換え先のアドレスを指定する下記2つのファイルも必要となる。

sudo vim /etc/postfix/sender_canonical_maps
/etc/postfix/sender_canonical_maps
/.+/    example@outlook.jp
sudo vim /etc/postfix/header_check
/etc/postfix/header_check
/From:.*/ REPLACE From: example@outlook.jp

メール認証の設定

Gmailにメールを送信してもらうためにアカウント認証情報が必要となるため、sasl_passwdというファイルを作成し、

sudo vim /etc/postfix/sasl/sasl_passwd

下記のようにアカウント情報を保存する。ここでのパスワードは先に発行しておいたアプリパスワードである。この例ではアカウント名がexample@gmail.comで、パスワードがpasseordの場合を示している。

/etc/postfix/sasl/sasl_passwd
[smtp.gmail.com]:587 example@gmail.com:password

このファイルをpostmapというコマンドでPostfixが扱える形式に変換する。

sudo postmap /etc/postfix/sasl/sasl_passwd

これにより/etc/postfix/sasl/sasl_passwd.dbが生成される。このdbファイルは暗号化されていないため、取り扱いには注意する。元のファイルは不要であるため削除する。

sudo rm /etc/postfix/sasl/sasl_passwd

Postfixの設定を確認

下記のコマンドで設定が正しいことを確認する。

sudo postfix check

下記のエラーは無視しても送信には問題なかった。

postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out

設定の反映と動作確認

Postfixを再起動し、設定を反映する。

sudo systemctl restart postfix

Postfixはsendmailコマンドと互換があるため、下記のように実行することでメールの送信ができる。

sendmail abc@gmail.com
To: abc@gmail.com
Subject: Test
Hello!
.

宛先のメールアドレスを引数にsendmailコマンドを実行すると、入力待ちになるため、To:であて先のメールアドレスを再度入力し、Subject:でタイトル、その次の行から本文を入力する。最後にピリオドのみ(.)を入力しEnterを押すことで送信される。

パッケージアップデートのメール通知設定

パッケージのアップデートがあった際に、メールで結果を受け取るように設定する。自動更新機能の設定ファイルを以下のように設定する。

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Mail "abc@gmail.com";
Unattended-Upgrade::MailOnlyOnError "false";

1行目ではあて先のメールアドレスを設定し、2行目では常に結果を受け取る(false)かエラーが出たときだけメールを受け取る(true)かを設定する。

またこの機能を使用するには、mailxコマンドでメールが送信できる必要があるため、bsd-mailxパッケージをインストールする。

sudo apt install bsd-mailx

下記コマンドで動作テストができる。これは実際にパッケージはダウンロードするのものの、アップデートは行わない。

sudo unattended-upgrade -d --dry-run

参考

https://www.mikan-tech.net/entry/raspi-unattended-upgrades
https://www.mikan-tech.net/entry/raspi-postfix-gmail
https://www.kagoya.jp/howto/webhomepage/postfix/
https://qastack.jp/server/147921/forcing-the-from-address-when-postfix-relays-over-smtp
https://sukiburo.jp/mail-server-raspberry-pi2/#i-6

Discussion