SSブログ

Raspberry Pi に Postfix をインストールする手順

2022.09.18 メールのセキュリティ強化に伴う設定変更のため本文を書き直しました。
-----------------------------------------------------------------------------
「猿検知通報装置の製作」等の親機にRaspberry pi を使っている場合はPostfix というメール転送エージェント(MTA)を使用してセキュリティ強化されたメールサーバーに接続ができます。
以下に Raspberry piへのPostfixのインストール方法について述べます。
Postfixに対応した親機のプログラムは各記事内の項目「ソフトウェア」からダウンロードしてください。

Postfixインストールと設定
まずはssmtpのアンインストールとインストール可能なパッケージ一覧の update をしておきます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo apt-get --purge remove ssmtp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ssmpt をアンインストールせずにPostfixインストール後 $ sudo update-alternatives --config mta でデフォルトMTAを選択すればよいという説明も見受けられました。しかし、あまり詳しくない方はアンインストールした方がよいと思います。 また、ssmtpがインストールされていなければその旨のメッセージが出るだけですので、まずはアンインストールを試みてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo apt-get update
~~~~~~~~~~~~~~~~~~~~~~~~~~

Postfixをインストールします。
 既にインストールされている状態で再インストールする際には下記でパッケージの完全削除を行ってください。
$ sudo apt-get --purge autoremove postfix

下記を実行します。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo apt-get install postfix 
~~~~~~~~~~~~~~~~~~~~~~~~~~
メールサーバー設定形式とシステムメール名が問われるのでその設定を行います。
=> 資料参照 (P1)
前者は インターネットサイトを選択します。
後者については表示の説明がよくわからず 1回目のインストールでは自動的に表示されたraspberrypi そのままで設定しましたが、メール送信ができないので再インストールをした際には example.com で設定しました。 この設定とメール送信ができなかった事(- Logを見ると“Host or domain not found ・・・・” の問題でストップしていた)との因果関係の有無はわかりませんが、再インストール後は送信できています。
このドメイン名は適当に自分で決めてよいものなのかどうかわかりませんでしたが、example.com や sample.com などを使った例があったのでとりあえずそれに倣っておきました。

以降の設定確認方法はメールサーバーがgmailかどうかで異なります。

(a) gmaiサーバー使用の場合
gmailは2022年6月以降Googleアカウントのセキュリティが強化されたため「アプリパスワード」なるものを使った認証になり、postfixの設定も変わります。
方法は「PostfixからGmail経由でメールを送信するための設定メモ」という記事によくまとめられていますので参照して通信確認と自動起動まで行ってください。
=> 補足:資料参照 (P2)

(b) gmai以外のサーバー使用の場合
sasl_passwd ファイルにサーバー認証に必要な情報を記述します。
nanoエディタの使い方は検索して見つけてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$sudo nano /etc/postfix/sasl_passwd
~~~~~~~~~~~~~~~~~~~~~~~~~~
でファイルを開き、接続サーバー名:ポート番号 アカウント名: パスワード を記入して保存します。
記入例: (so-netの場合)
---------------------------------------------------------------
mail.so-net.ne.jp:587 xxxxx@xxx.so-net.ne.jp:パスワード
---------------------------------------------------------------

sasl\passwdファイルは 他人にパスワードを読み取られないようchmodコマンドでアクセス権を設定。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo chmod 600 /etc/postfix/sasl_passwd
~~~~~~~~~~~~~~~~~~~~~~~~~~

postmapコマンドでデータベースファイルを作成します。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo postmap /etc/postfix/sasl_passwd
~~~~~~~~~~~~~~~~~~~~~~~~~~


次に main.cf ファイルの編集を行います。
まず、既存ファイルのバックアップを取ります。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo cp -i /etc/postfix/main.cf /etc/postfix/main.cf.bkup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo nano /etc/postfix/main.cf
~~~~~~~~~~~~~~~~~~~~~~~~~~
でmain.cf を開き下記をファイル最後に追加します。
Raspberry piのマウス又はVNC接続したPCのマウスの右クリックでファイルやWebページのテキストを選択・コピーし、Raspberry piのターミナルウィンドウに開いたファイル画面の適当な位置にカーソルを移動してマウス右クリックで貼り付けを行うと間違いが少ないです。なお、貼り付けはエディタのコピーコマンドではうまくできません。
---------------------------------------------------
# Minimum Postfix-specific configurations.
#mydomain_fallback = localhost
relayhost=mail.so-net.ne.jp:587
# Enable SASL authentication in the Postfix SMTP client.
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
# Enable Transport Layer Security (TLS), i.e. SSL.
smtp_use_tls=yes
smtp_tls_security_level=encrypt
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
#smtp_host_lookup = native
tls_random_source=dev:/dev/urandom
---------------------------------------------------
上記 relayhost はso-netサーバーの例です。実際に使うサーバー(gmail以外)のものを記入してください。
また 既に記載されている内容と重複項目がある場合は既に記載されていた方を#でコメントアウトしてください。 => 資料参照 (P3)

Postfix を起動します。
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo systemctl restart postfix
~~~~~~~~~~~~~~~~~~~~~~~~~~

送信機能の確認を行います。
下記はPython3 でのテスト送信スケッチです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('This is a test mail.')
msg['Subject'] = "Test Mail"
msg['From'] = 'aaaa@bbbb'
msg['To'] = 'cccc@dddd'
smtp = smtplib.SMTP()
smtp.connect()
smtp.send_message(msg)
smtp.close()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Python3 IDLEで新規ファイルにコピペし、ToとFromのアドレスを記入してRunしてください。

受信メールを確認してみてください。
メールが届いてない場合は、
~~~~~~~~~~~~~~~~~~~~~~~~~~
$ cat /var/log/mail.log
~~~~~~~~~~~~~~~~~~~~~~~~~~
で状況確認できます。私の場合 mail.log に “Host or domain not found ・・・・” が表示されて何度やっても送信ができませんでした。結局 先述したように再インストールし、その後正常に送信できるようになりました。
なお mail.logですが、 過去の送信に対する記録も表示されているので 送信した時間に対応する部分の記録を見ます。(最新はLogの最後部表示になります)

mail.logに SASL authentication failure: No worthy mechs found のメッセージが出る場合は、
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ sudo apt-get install libsasl2-modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
を実行してモジュールを追加してください。
(引き続き一応 $ sudo systemctl restart postfix も実行してください。)


Postfixの自動起動設定
私の場合特別な設定をしなくても電源を入れた時に自動起動していましたが、自動起動しない場合は参照資料 (P4)の方法を行ってみてください。


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0