メールサーバーからメールが送信できないトラブル-OP25Bの回避-
ー前置きー
長いこと放置していたメールサーバーの問題にメールが送信できないというのがある。
実は運用して5年くらい気づかなかったが半年くらい前に気づいて色々調べた結果op25b問題にぶち当たった。
OP25B問題に関しては以下を参照
OP25Bとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(https://wa3.i-3-i.info/word14981.html)
要するにプロバイダが設定している迷惑メールの対策である。
自宅ではBB.exciteを使用しているが、OP25Bがかかっているためポート25番はふさがっているしリレーホストは月額300円くらいで取得できる有料メールアドレスを取得しないと利用できない模様。
結局のところ一度もメールの送信が成功していないのでOP25B問題なのか設定の記載ミスなのか、原因の切り分けができていないため金銭を投入するのは早計と判断しフリーのメールアドレスからリレーホストを設定し対応にあたった。
ー対応内容(postfix側の設定変更)ー
リレーホスト先を設定するために以下を参考にする。
OP25Bを回避するため Postfixのリレー先を gmailに設定する方法(https://www.walbrix.co.jp/blog/2014-02-gentoo-postfix-relay-gmail.html)
[Postfix]メールのリレー設定あれこれ(http://park1.wakwak.com/~ima/centos_postfix_relay0001.html)
PostfixでYahooメールにリレーする方法(https://kagasu.hatenablog.com/entry/2019/02/10/084418)
gmail、yahooともにフリーのアドレスは取得しているが色々紐付いて厄介なので新たにアドレスを取得。まずは使いなれたyahooで対応を試みる。
上記のサイトに記載の通りmain.cfに以下を追記する。
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/password_maps
smtp_sasl_security_options = noanonymous
次にpassword_mapsファイルを作成し
[smtpサーバー名]:587 ログインアドレス:パスワード
を記載しpostmapコマンドでデータベースを作成
# postmap password_maps
(transport_mapsの記載とtransport ファイルの作成を行うと受信に対しても後述のエラーが影響するため対応は省略)
が、失敗。
ー対応内容(ログの確認からpostqueueを確認)ー
メールが届かないのでmaillogかpostfixのログを確認するとステータスがdeferred つまり一時的に配送できなかったのでリトライ中となっている。
ログもしくは配送できなかったキュー自体のエラーメッセージを以下のコマンドで確認すると
# cat /var/log/mail.log
(私の環境ではmaillogは上記にあったが環境によっては別の場所、別の名前の場合があります)
# postqueue -p
コマンドは以下のサイトを参考にしました。
Postfixで未配信メールの確認(https://open-groove.net/postfix/check-deferred-mail/)
Postfixのキューが詰まった時の対処(https://qiita.com/yudai09/items/88a0a70a214c63fb4817)
SASL authentication failed; cannot authenticate to server smtp.mail.yahoo.co.jp[182.22.109.120]: no mechanism available
上記のエラーが確認できた。直訳すると
「SASL認証が失敗しました。サーバーの認証ができませんsmtp.mail.yahoo.co.jp [182.22.109.120]: 利用可能なメカニズムなし」
とのこと。ログインアドレスとパスワードを記載したpassword_mapsファイルにでたらめを記載してデータベースを再作成しても同じエラーが出たので認証のための要素が足りていないかそもそもできない模様。
エラーメッセージに対して調べてはみたが有力な情報は見つからなかったのでgmailをリレーホストとにして再挑戦。
gmailの場合、SMTP認証に追加してTLS認証も必要なためmain.cfに以下を追記する。
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/ssl/certs/ca-certificates.crt
ー対応内容(gmailの設定)ー
追記後にメールを再送するとエラーメッセージが以下に変わる。
SASL authentication failed; server smtp.gmail.com[74.125.203.109] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/?p=BadCredentials b17sm10685190pfb.18 - gsmtp
直訳すると
「SASL認証が失敗しました。サーバーsmtp.gmail.com [74.125.203.109]は言った:535-5.7.8ユーザー名とパスワードは受け入れられません」
ユーザーとパスワードが受け入れらないと記載があるが要は接続が受け入れられない模様
以下のサイトを参考にしgmail側の設定を変更して安全性の低いアプリを許可する。
PostfixからGmailへリレーする方法と受信したメールがSOFTFAILになる対策(https://mseeeen.msen.jp/how-to-relay-from-postfix-to-gmail/)
ちなみに設定後にメールを送信すると、smtpへログインするアカウントの受信フォルダに外部からの接続に関するセキュリティの連絡が届くので「アクティビティの確認」で「心当たりがある」と回答して接続ができる状態にしておく必要がある。
アクティビティの確認もDDNSではなくグローバルIPで判断されているのでIPが変わるごとにアクティビティの再確認が必要になるので気が向いてたらgmailにログインして受信フォルダをチェックしたい。
ー対応内容(送信元の変更)ー
ここまで来てメーラーからメールを送信し相手にメールが届くところまで完了。
が、届いたメールを見ると送信元がsmtpサーバーにログインしたアカウント、つまりgmailになっている。
リレーホストの設定を記載したサイトにはその辺りの記述がなかったので調べ直すとgmail側の仕様で、gmailのsmtpサーバーを使用すると送信元がgmailに書き換えられる模様。
当たり前だが受信したメールでそのまま返信するとgmailに届くので自分のアドレスに帰ってこない。自分でサーバーを立てる意味がない。
ちょっと調べて以下のサイトのGmailの設定の項目に対応方法が記載してあったのでgmail側の設定を変更する。
Postfixのリレー設定 -Gmail-(http://kulog.org/pc/software/k2071/)
gmailの設定項目から「アカウントとインポート」タブを選択
ページ内の他のメールアドレスを追加から自宅のメールアドレスを入力
登録したいアドレス宛に承認コードが届くのコード入力し登録
最後に登録したアドレスをデフォルトに設定すると送信元が自分のアドレスになる。
設定変更後に送信テストを行う。
ー対応内容(検証結果と残課題)ー
全ての設定を完了し携帯と別のフリーメールに送信すると受信を確認し、受信メールから返信をすると自宅のメールサーバーに帰ってくることを確認した。
セキュリティ的に不備は多そうだが下記のサイトから不正中継のチェックを行い一応チェックは問題がないとしたところでテスト完了とした。
第三者不正中継チェックサイトメモ 2019(https://www.yuulinux.tokyo/2299/)
open relay checker(http://check.jippg.org/)
(余談だがこのメールサーバーを立ち上げたころに比べて不正中継のチェックをするサイトは随分と減ってしまった。当時保存していたサイトは軒並み閉鎖しており今回のも新たに探してきた)
今回の対応の内容は少なく、リンク先の記載以上のことはしなかったが時間はかかってしまった。
使い慣れていないgmailを忌避してyahooメールにこだわったためエラーへの調査と対応に時間をかけていた。yahooメールを早々に諦めてgmailで試せばもっと早く対応できた。
以下の問題点が残っているがとりあえず自宅にメールサーバーを設置し受信と送信ができるところまでは漕ぎつけた。
gmailでデフォルトの送信アドレスを自分のものに変更したが別のアドレスを作成し、作成したアドレスから送信しても今回設定したアドレスになると思われる。
→現状、他のアドレスから送信をする予定はないので必要になったら有料メールアドレスを取得してリレーホストの変更をすることで対応を考えている。
SMTP認証の設定を変更したためか不明ではあるが、現在メーラーから自宅の送信(SMTP)サーバーへの接続に対して保護した状態(SSL/TLS)での接続ができなくなった。
→要調査と修正が必要。現在は平文での接続なのでセキュリティ的に不安が残る
上記の認証に関連しているか不明だがgmailの送信元設定は25ポートに接続している。
→かなり怖い。元々587番か465番にTLSかSSLで接続するのだが全てエラーが出てしまったので25番にパスワードなしで接続している。
ー後書きー
全体的にセキュリティ周りがザルな状態でとりあえず動いた状態なので少しずつ直していきたい。
ただ、サーバーに使用している本体(ノートパソコン)が12年前のものなのでそろそろ別のPCに移行をしたいとも考えている。
移行先のPCは用意できているのでOSの設定とアプリ周りを導入する作業がある。この作業と合わせて設定を修正したいとも考えている。
とりあえず一つ大きな山場は超えたがまだまだやることはたくさんある。
願わくばこの記事が導入に困った人の一助になることと自分への備忘録になることを祈って。












