
Gmailへのメール転送
いつから始まったのか判らないのですが、先々週くらいから自宅メールサーバーのアカウントから、Gmailへのメール送信ができなくなりました。 最近はサーバーも安定して動作しており、あまりサーバーに触ることは無かったのですが、その分、一旦何か問題が起きると思い起こすのが大変です。 ということで、自分のための備忘録として残しておきます。
まず結論から言うと今回の問題はGoogle側でのセキュリティポリシーの変更でした。
今回の問題は自宅サーバーのメールアカウントからGmail宛てにメールを送る場合、Gmailのサーバーで認証エラーが発生しているというもの。 認証で躓いているので、送信すらできていないためGmailのサーバーからエラーメールが来るということではなく、単に送信できないでキューにメールが溜まるというもの。他のメールサーバーには問題なく送信できているのですがGmailだけがNGでした。
エラーログにはこんな感じのエラーメッセージが残っています。 (一部伏字)
SASL authentication failed; server smtp.gmail.com[XX.XXX.XXX.XXX] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/XXXXX - gsmtp
ここで、今のメール転送のルールを思い起こしてみました。 私の自宅サーバー内のメールの転送はここにあるようにmydnsのサーバーから中継をしています。 メールは中継サーバーとして全部mydnsに送るようにしているので、なぜGmailのメールサーバーから認証エラーが出るのか不思議です。 ここで更に思い起こしてみると、これはSOTA日本支部のメーリングリストをGoogle Groupでやっていたころに設定したのだと思うのですが、Google Groupのメール転送がなかなかうまく動かずGmailとGoogle Group向けのメールだけはmydnsの中継サーバーを経由せず直接Gmailのメールサーバーに転送している設定になっていました。 これは/etc/postfix/transportの設定でなされていました。 (ちなみに、Google Groupの転送不具合はいまだに原因不明で結局Google Groupを使うのは止めてSOTA日本支部はSlackに移行しています。)
このためGmail宛てのみメールサーバーで認証エラーが出ていたようです。 では以前はGmailメールサーバーに直接送れていたのに、なぜ急に送ることができなくなったのかですが、これはGoogleのセキュリティポリシーの変更のようです。
安全性の低いアプリからのメール転送を現在は拒否することになったようです。ここでいう「安全性の低い」というのはGoogleのメールアプリや一般に使われているメールアプリではない特殊な用途のものということのようで、自宅で運用しているような小規模のメールサーバーからの直接のアクセスは拒否するようです。
ただこの拒否が全部拒否ということではなく、きちんと認証すれば受け付けてくれるようです。 このためにはGmailの認証に通常のGmailのアカウントのIDとパスワードではなく、正規にGoogleアカウントから生成したパスワードでログインすれば良いようです。 これが「アプリパスワード」というもので、この作成を行いました。
手順としては、まずGoogleアカウントで「セキュリティ」から2段階認証をONにする必要があります。送られてきたSMSメッセージのコードを入力し、2段階認証をON設定にします。
その後、元のセキュリテイ設定に戻り、今度はアプリパスワードを設定します。
設定するとこのように16桁のアプリパスワードが与えられますのでこれをコピペしておきます。
このアプリパスワードをPostfixに設定します。
/etc/postfix/relay_passwordを開き、下記のように平文で入力(一部伏字)
[smtp.gmail.com]:587 XXX@gmail.com:XXXXXXX16桁アプリパスワード
後はhashで完了
# postmap hash:/etc/postfix/relay_password
/etc/postfix/transportでは下記のように設定
gmail.com smtp:[smtp.gmail.com]:587 googlegroups.com smtp:[smtp.gmail.com]:587 * :
これもhashが必要です
# postmap hash:/etc/postfix/transport
この後、PostfixをリロードでOK
これでGmailとGooglegroups向けは直接Googleのサーバーにアクセスし、他のメールは全部mydnsの中継サーバー経由となります。
尚、一度でも2段階認証をオフにしたら最初からやり直しになります。 2段階認証はアプリパスワードをもらうためだけのものではありません。
Gmail向けのメールもすべてmydnsの中継サーバーを通すのであればTransportファイルで全部通す設定にしてしまえばGoogleの2段階認証は不要ですが、今後に備えて覚えておくことにしました。