VPNサーバ構築(5) Raspberry Piのパッケージの自動更新とメール通知設定
初期設定の流れ
初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)
- 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。
- 2段階目ではインターネットに接続し、ファイアフォールの設定やパッケージの自動更新設定、メール通知設定、LINE通知設定などを行う。
前回の記事で第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"で出てくる全てのパッケージを自動更新するため、下記のように修正する。
Unattended-Upgrade::Origins-Pattern {
"o=*,a=*";
};
もしアップデートしたくないパッケージがある場合は、下記の欄にパッケージ名を記入することで対象から除外できる。
Unattended-Upgrade::Package-Blacklist {
}
自動再起動の設定
Linuxカーネルなどが更新された場合、適用するにはRaspberry Piの再起動が必要であるが、デフォルトの設定では自動的には再起動されない。そこで下記の設定をし、自動で再起動をするようにする。
Unattended-Upgrade::Automatic-Reboot "true";
また、下記の設定でユーザがログインしていても強制的に再起動したり、再起動する時間を設定することが可能である。
Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
不要になったパッケージの自動削除
下記のように設定することで、"sudo apt autoremove"を実行するのと同じように、不要パッケージを自動削除できる。
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
まず外部からのメール中継要求を受け付けないために、下記を設定する。
inet_interfaces = loopback-only
次に中継サーバを設定する。Gmailの送信サーバは"smtp.gmail.com"でポートは587番、Outlookの送信サーバは"smtp-mail.outlook.com"でポートは587番である。
relayhost = [smtp.gmail.com]:587
その他の項目は下記のように設定する。
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に関する設定を追記する。
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サーバがメッセージを拒否しているらしい。
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メールトラフィックの送信者アドレスを書き換えることで、上記エラーを回避する。
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
/.+/ example@outlook.jp
sudo vim /etc/postfix/header_check
/From:.*/ REPLACE From: example@outlook.jp
メール認証の設定
Gmailにメールを送信してもらうためにアカウント認証情報が必要となるため、sasl_passwdというファイルを作成し、
sudo vim /etc/postfix/sasl/sasl_passwd
下記のようにアカウント情報を保存する。ここでのパスワードは先に発行しておいたアプリパスワードである。この例ではアカウント名がexample@gmail.comで、パスワードがpasseordの場合を示している。
[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を押すことで送信される。
パッケージアップデートのメール通知設定
パッケージのアップデートがあった際に、メールで結果を受け取るように設定する。自動更新機能の設定ファイルを以下のように設定する。
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
参考
Discussion