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 |
続いて 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アカウントのセキュリティを司るページでアプリパスワードを生成しておく。
生成されたアプリパスワードは決して人様に知られぬよう厳格に取り扱わねばならない。さもなければ瞬く間に重大なインシデントと相成り始末書は免れない。
アプリパスワードを用意したら 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.
というメッセージがログに記録されていることを見届ければ終いである。