Postfixをソースから導入しsmtp.gmail.com経由でメールを送信

OS: Ubuntu Server 18.04
Postfix 3.4.7

Postfixをソースから導入

先ず以てソースコードをダウンロードして展開する。

$ wget -c http://mirror.postfix.jp/postfix-release/official/postfix-3.4.7.tar.gz
$ tar zxvf postfix-3.4.7.tar.gz
$ cd postfix-3.4.7/

続けざまに make を実行してしまうと必要なパッケージが不足している旨、エラーメッセージが通知される。それからsmtp.gmail.comにメールをリレーするにはSMTP認証やSTARTTLSにも対応せねばならぬから、其れ等に纏わるライブラリも併せて導入しておく。

$ sudo apt install libdb-dev m4 libssl-dev libsasl2-dev
エラーメッセージ対応策
No <db.h> include file fjound.
Install the appropriate db*-devel package first.
$ sudo apt install libdb-dev
extract_cfg.sh: 42: extract_cfg.sh: m4: not found$ sudo apt install m4
./mail_params.h:20:10: fatal error:
openssl/opensslv.h: No such file or directory
$ sudo apt install libssl-dev
host smtp.gmail.com[108.177.97.109] said:
530-5.5.1 Authentication Required.
$ sudo apt install libsasl2-dev
表1. make時に表示されるエラーメッセージと対応策

続いて make makefiles で必要となるオプションを記述する。CCARGSにある -DUSE_TLS でSTARTTLSに対応し、-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl がSMTP-AUTHを使用するためのオプションである。

これらの記載無しにビルドを進めてメールを送り付けると終いには host smtp.gmail.com[108.177.97.109] said: 530 5.7.0 Must issue a STARTTLS command first. であるとか host smtp.gmail.com[108.177.97.109] said: 530-5.5.1 Authentication Required. といったエラーメッセージを頂戴することになる。

それから make install を実施するよりも先んじてpostfixユーザとpostdropグループを作成しておかねば postfix-install: Error: "postfix" needs an entry in the passwd file. というエラーメッセージが現れて処理が終了してしまう。

$ sudo useradd -s /bin/false postfix
$ sudo groupadd postdrop
$ make makefiles CCARGS="-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" AUXLIBS="-lssl -lcrypto -lsasl2"
$ make
$ sudo make install

インストールが恙無く完了すれば main.cf の編集へ移る。いっぽうで何らかのエラーに見舞われたらうまい具合に調整して再ビルドに取り組まねばならない。再ビルドの際は make makefiles に先んじて make tidy で前回ビルド時の不要なファイルを除去しておく。また、 make install に代わって make upgrade を用いるのが良さそうな情勢である。

設定ファイルの編集とアプリパスワードの生成

main.cf には此度の動作要件を満たす必要最低限の設定を投入する。

$ sudo vi /etc/postfix/main.cf
alias_maps   = hash:/etc/aliases
home_mailbox = Maildir/
relayhost    = smtp.gmail.com:587

smtp_tls_security_level        = may
smtp_sasl_auth_enable          = yes
smtp_sasl_password_maps        = hash:/etc/postfix/sasl_passwd
smtp_sasl_mechanism_filter     = digest-md5 cram-md login plain
smtp_sasl_tls_security_options = noanonymous

alias_maps はよしなにセットしておかねばPostfix起動後に error: open database /etc/aliases.db: No such file or directory とか warning: dict_nis_init: NIS domain name not set - NIS lookups disabled などのエラーメッセージが現れる。

$ sudo vi /etc/aliases
root:        guro
postmaster:  guro

$ sudo newaliases

2段階認証プロセスをオンにしているならば smtp_sasl_password_maps で指定した /etc/postfix/sasl_passwd の設定へ取り掛かる前にGoogleアカウントのセキュリティを司るページでアプリパスワードを生成しておく。

図1. 「アプリパスワード」を選択
図2. アプリパスワード設定画面
図3. 「アプリを選択」→「メール」
図4. 「デバイスを選択」→「その他(名前を入力)」
図5. デバイス名を入力し「生成」をクリック

生成されたアプリパスワードは決して人様に知られぬよう厳格に取り扱わねばならない。さもなければ瞬く間に重大なインシデントと相成り始末書は免れない。

図6. アプリパスワードをコピーして「完了」をクリック

アプリパスワードを用意したら sasl_passwd ファイルを作成する。2段階認証プロセスをオンにしていなければ通常のパスワードで宜しい。

$ sudo vi /etc/postfix/sasl_passwd
smtp.gmail.com:587      www7390uo:yufpcclzluerkvsf

作成を終えたら postmap を実行してデータベースファイルの作成・更新を忘れないよう肝に銘じておく。これを怠ると内容が反映されないから、意図した動作とは異なる結果に慌てることになる。ほんとうにあわてた。それからファイルのパーミッションを600にしてrootユーザ以外の読み書きを制限しておく。

$ sudo postmap /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd*
$ ls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root    43 Oct 12 12:01 /etc/postfix/sasl_passwd
-rw------- 1 root root 12288 Oct 12 12:02 /etc/postfix/sasl_passwd.db

あとは設定に間違いがないかチェックして、内容に差し障りがないようであればPostfixを起動するだけである。

$ sudo postfix check
$ sudo postfix start

メール送信テスト

事前に組み上げておいたSMTPコマンドで以ってテストメールを投げつける。

$ telnet localhost 25
ehlo localhost
mail from: <guro>
rcpt to: <www7390uo@gmail.com>
data
From: guro
To: www7390uo@gmail.com
Subject: test

test
.
quit

恙無くメールが送信できている模様である。

図7. テストメールを受信した様子

アプリパスワードが不要となれば Googleアカウントのセキュリティを司るページ から削除をする。メールを送信した際に SASL authentication failed; server smtp.gmail.com[64.233.189.109] said: 535-5.7.8 Username and Password not accepted. というメッセージがログに記録されていることを見届ければ終いである。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください