auひかりを使っていると、どんなプロバイダであっても、[25番ポートブロックOutbound Port25 Blocking]は確実に規制されているようだ。なので自宅サーバーでpostfixなどのMTAを使っている場合は必ず引っかかるということになる。
症状としては
【LAN内でのメール送受信はできる、だが外部となると受信は出来るのだけれど送信ができない】というものだ。
今回は、NTTのひかり回線でプロバイダはOCNを使っていたところから、auひかりに変えたことでメール送信に関するエラーが発生した。
今回のプロバイダはASAHI NETだ。ASAHI NETは、メールの規制は特にしていない、との回答で、auひかり側には確実に規制があるのでポート587を通すことは必須になることがわかった。
http://asahi-net.jp/support/news/060606submissionport.html
前後の比較
回 線 | NTT | au |
---|---|---|
プロバイダ | OCN | ASAHI |
タイプ | マンションタイプ | マンションタイプ |
メール規制 | プロバイダ毎 | auは必須 |
価格 | 通常 5,460円 ただしキャンペーンの適用などの 新規加入は3,717円 |
通常 3,990円 |
現環境では、PostfixでMTAを構築していて、外部への送信を行うのが目的。
もし外部への送信をしない限りではこの設定は不要なので、LAN内へ送信ができないのであれば他の原因を当たる方がベター。
【リレーホストの587ポートへ、Postfixを設定】
このサイトがシンプルに書いてあるがまったくの素人だととっつきにくい。
http://ufuso.jp/wp/?p=3464
このオヤジのサイトはおそらく一番詳しく書かれている。
http://www.aconus.com/~oyaji/mail2/op25b.htm
要は次のプロセスで進めればいい。
・プロバイダ(ここではASAHI NET)が用意しているメールサーバーへリレーしてもらうように記述をする
・プロバイダで配布されたメールアドレスを利用して転送するので、そのIDとパスワードを手元に準備
・SMTP SASLの記述、設定を行う
・メーラーにてメール送信のテストを行う
その前に本当にプロバイダのメール転送サーバーへ587ポートでアクセスできるかどうかをテストしておく必要がある。
ここではASAHI NETが用意しているメールサーバーへアクセスできるかを試す。サーバーのCUI(ターミナル)にて、以下の太字部分を入力してテストを行う。
# telnet mail.asahi-net.or.jp 587
Trying 202.224.39.196...
Connected to mail.asahi-net.or.jp.
220 mail2.asahi-net.or.jp ESMTP Postfix
ehlo localhost
250-mail2.asahi-net.or.jp
250-PIPELINING
250-SIZE
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
250-AUTH=とある250-AUTH=赤い部分がのちに必要になるのでコピーしておく。ここはプロバイダ毎に違うので注意する。現環境でメモした250-AUTH。
PLAIN LOGIN DIGEST-MD5 CRAM-MD5
ちなみに25番ポートだと以下のように受け付けなかった。
# telnet mail.asahi-net.or.jp 25
Trying 202.224.39.196...
telnet: Unable to connect to remote host: Connection timed out
587ポートが受け付けることを確認したら次はPostfixの設定だ。
太字が入力部分。
[root@ /]# vi /etc/postfix/main.cf
…
#iボタンを押してviの入力モードに切り替え、下の4行を最終行に追加する。
#元から入っている似たものがある場合もあるが「smtpd」で始まるものであることがあるので注意。まったく別物だ。
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN, LOGIN, DIGEST-MD5, CRAM-MD5
#↑赤字が先ほどのtelnetで確認した部分。挿入時にはカンマ区切りで記述する。Escボタンを押して:wqで保存と終了。
[root@ /]# echo [mail.asahi-net.or.jp]:587 アカウント@atson.net:パスワード > /etc/postfix/authaccunt
# ↑SMTP認証情報の設定 authaccuntの部分は任意の文字列でかまわない
# アカウントとパスワードはプロバイダから配布されるものなので、通常書面にて郵送されてきているはず。
# mail.asahi-net.or.jpと@atson.netの部分もプロバイダから指定されたものになる。送られてきている書面に記載があるはず。[root@ /]# chmod 640 /etc/postfix/authaccunt
# root以外が参照できないようにパーミッションを変更しておく[root@ ~]# postmap /etc/postfix/authaccunt
# ↑このコマンドでdbが作成される
master.cfにて25番ポートのSMTP-AUTH対応を有効化する。
[root@ /]# vi /etc/postfix/master.cf
#iボタンを押してviの入力モードに切り替え、赤文字の部分の先頭にある#を削除して有効にする。なければ追加。
smtp inet n - - - - smtpd submission inet n - - - - smtpd -o smtpd_etrn_restrictions=reject -o smtpd_client_restrictions=permit_sasl_authenticated,rejectEscボタンを押して:wqで保存と終了。
最後にpostfixを再起動する。
[root@ /]# service postfix restart
これで一応準備は整った。メーラーから外部のフリーメールにでも送信してテストを行う。
もし以下のようなエラーがあるメールが帰って来てしまうようであれば設定がうまくいっていないのでもう一度見直す。
554 5.7.1 Client host rejected: Access denied (in reply to RCPT TO command)
見直すポイント
・smtp_sasl_…などの記述がsmtpd_sasl_…などになっていないか
・記述に全角スペース、全角カンマなど余計なものが入っていないか
・プロバイダから配布された情報に間違いがないか
「アカウント@atson.net:パスワード」の部分が一瞬迷うところかもしれない。atson.netはあくまで例の環境なので、自身のプロバイダから配布されたメールアドレスの後半を記述すること