前回メール送信のための設定をしたものの、多くの方は実際にはメールの送信が出来なかったかと思います。
これは、OP25Bというインターネットプロバイダの制限のせいです。
この記事ではOP25Bとその回避方法を説明したいと思います。
この記事で行うこと
1. OP25Bとは
OP25BはOutbound Port 25 Blockingの略になります。
名前の通り、外向けの25番ポートをブロックするという事です。
内向きの方はブロックされないので25番ポートでメールを受信することは出来ます。
しかし、送信することは出来ません。(同一プロバイダ内であれば送信出来る事はあるようですが……)
これは迷惑メールを勝手に送信する人が増えたので、勝手にメールを送れないようにするために実施されたものとなります。
ちなみに、固定IPを契約している方など一部の方にはこれは適用されません。まあ、固定IPから迷惑メールを送っていたらすぐに誰の仕業か分かるからですね。
2. OP25Bの対処方法
OP25Bは25番ポートのみを規制するものです。
なので、25番以外のポートでインターネットプロバイダの外にあるメールサーバ(或いはインターネットプロバイダが提供しているメールサーバ)にメールを一旦渡して中継して貰えば良いのです。
SMTPでメールクライアントから接続出来るメールサービスであれば大抵はリレーすることが出来ます。
この際は自分のアカウントで認証を行うことになるので、当然ここで迷惑メールなんかを送ればアカウントがBANされることになるので注意してください。
また、中継する場合はSPFの設定を削除するか中継サーバに設定を変更する必要があります。
中継サービスを通す場合はそのサービスのサポート等でどのように記述すれば良いか確認できますが、以下ヤフーメールの例など中継がメインではないサービスの場合はSPFの設定自体を削除することを推奨します。
3. OP25B対処の具体例(ヤフーメールの場合)
ヤフーメールはフリーメールとしては珍しく、提供されるメールアドレス以外からのメールを受け付けてくれます。(Gmail等ではメールをリレーすると送信元がGmailのアカウントに書き換わってしまいます)
その代わりヤフーアカウントの連絡先アドレス、つまり広告の配送先に指定する必要がるという形になります。
今回はこの機能を使ってメールアドレスを設定したいと思います。
3-1. ヤフーメール側の設定
以下のヤフーのヘルプを確認して設定を行います。
外部メールの設定:https://support.yahoo-net.jp/PccMail/s/article/H000007305
メールソフトで送受信するには(Yahoo!メールアドレスの場合):https://support.yahoo-net.jp/PccMail/s/article/H000007321
「メールソフトで送受信するには」の「メールソフトやモバイル端末での設定」は不要です。
(普段は後から参照できなくなる事を防ぐために外部URL貼り付けは避けるのですが、今回は私企業のサービスを使うのでそもそもこのURLが無効化してたら、この方法は使えなくなっているだろうということで……)
3-2. main.cfの設定
メールサーバから外部にメールを送信する際に、必ずヤフーメールを中継するように設定を行います。
/etc/postfix/main.cf
を編集します。
編集する箇所は以下です。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。両方無い行は参考のために記載しているものです。
# The relayhost parameter specifies the default host to send mail to
# when no entry is matched in the optional transport(5) table. When
# no relayhost is given, mail is routed directly to the destination.
#
# On an intranet, specify the organizational domain name. If your
# internal DNS uses no MX records, specify the name of the intranet
# gateway host instead.
#
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
+ relayhost = [smtp.mail.yahoo.co.jp]:465
+ smtp_sasl_auth_enable = yes
+ smtp_sasl_password_maps = hash:/etc/postfix/smtp-pass
+ smtp_sasl_security_options = noanonymous
relayhost
: 中継してもらうメールサーバとポート番号を入力します。サーバ名は[]で括ります。smtp_sasl_auth_enable = yes
: SASL認証が必要であることを示します。認証が不要なメールサーバ(オープンリレー)は今時あり得ないのでどのサーバでも必須のはずです。smtp_sasl_password_maps = hash:/etc/postfix/smtp-pass
: 接続時に使うパスワードファイルの場所です。ファイルは後で作ります。smtp_sasl_security_options = noanonymous
: 認証する際のオプション設定です。デフォルトではnoplaintext
という平文パスワードを許さないというものもありますが、Dovecotの似たような設定と違い、こちらは接続が暗号化されていようがいなかろうが平文は許さないという融通が利かないものです。このため、noplaintext
は外してnoanonimous
という匿名認証を許さない設定だけをつけています。
また、以下のようにセキュリティの設定も行います。
# Use TLS if this is supported by the remote SMTP server, otherwise use
# plaintext (opportunistic TLS outbound).
#
+ smtp_tls_wrappermode = yes
- smtp_tls_security_level = may
+ smtp_tls_security_level = encrypt
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
smtp_tls_wrappermode = yes
: SMTPSを有効化する(決め打ちでTLS接続を使う)設定です。普通のメールサーバではSTARTTLSと言ってまずは平文でTLSで繋ぎません?というやり取りを行いますが、ヤフーメールのサーバではSMTPSと言ってTLSで最初から繋ぐ設定のためこの設定を有効化する必要があります。smtp_tls_security_level = encrypt
: こちらからSMTP接続をしに行く際に必ずTLS接続を行うというものです。元々の設定であるmay
は相手がTLS接続に対応するときのみTLS接続を使うと言うものです。SMTPSは常にTLS接続が有効である必要があるため、encrypt
の設定である必要があります。ただ、STARTTLS対応サーバに繋ぐ時でも認証情報の不用意な流出を避けるためにはencrypt
にしておくべきでしょう。
3-3. アカウントの設定
中継サーバに接続する際のアカウントとパスワードを設定したファイルを作成します。
新しく /etc/postfix/smtp-pass
と言うファイルを設定してください。(ファイル名は先ほど smtp_sasl_password_maps
で設定したものとなります)
ファイルの内容は以下となります。<>内は環境によって書き換えてください。
[smtp.mail.yahoo.co.jp]:465 <ユーザ名>:<パスワード>
[smtp.gmail.com]:587
の部分は先ほどの relayhost
の設定と合わせます。
また、パスワードが平文で書いてあるファイルなのでroot以外が見れないようファイル権限を変えておきます。
[root@localhost ~]# chmod 600 /etc/postfix/smtp-pass
そして、このファイルからPostfixが読み取れるようなパスワードのデータベースを生成します。
[root@localhost ~]# postmap hash:/etc/postfix/smtp-pass
postmap
: Postfixが読み取れるようなデータベースを作成するためのコマンドです。hash:
: ハッシュ形式のデータベースを作成するという意味合いになります。/etc/postfix/smtp-pass
: 元となるファイルを指定します。
これによって、 /etc/postfix/smtp-pass.db
というデータベースファイルが作成されます。
Postfixはこのデータベースファイルだけを読み取るので、もしパスワードが変わるなどでファイルの内容を変える場合は、 postmap
も忘れずに実行するようにしてください。
4. 送信確認
再度外部にメールを送信してみます。
今度は問題なくメールが届くはずです。
まとめ
これによって一般のご家庭の自宅サーバからでも外部にメールを送れるようになりました。(ヤフーの広告メールが届いたり、メールアドレスを増やすにはヤフー側の設定も触る必要があるなど多少不便はありますが……)
一通りメールの送受信ができるようにはなりましたが、まだ迷惑メールフィルタや件名などの条件によるメール振り分けの機能などなるべく欲しい機能がありますので、これらの構築を行いたいと思います。