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にも対応せねばならぬから其れ等に纏わるライブラリも併せて導入しておかねばやはり make やメール送信時に警告が挙がる。

$ 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

続いて 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. といったエラーメッセージを頂戴することになる。

それからpostfixユーザとpostdropグループを make install を実施するよりも先んじて作成しておかねば 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アカウントのセキュリティを司るページでアプリパスワードを生成しておく。

「アプリパスワード」を選択
「アプリを選択」→「メール」
「デバイスを選択」→「その他(名前を入力)」
デバイス名を入力し「生成」をクリック

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

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

アプリパスワードを用意したら 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

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

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

参考:
Postfix Configuration Parameters
アプリ パスワードでログイン – Gmail ヘルプ

Similar Posts:

コメントを残す

メールアドレスが公開されることはありません。

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