通常Postfixから外部ドメインにメールが送信される場合、直接相手メールサーバのSMTPポート(25番)に接続してメール配送しようとします。
しかし、自宅に建てたサーバだとプロバイダのOP25B対策などによってメールが送れないことが発生します。
そこで、Postfixから外部ドメインにメールが送信されるときは、プロバイダが用意しているメールサーバやGmailを経由して外部に送信するように設定したいと思います。
目次
OP25Bとは
プロバイダ側の制御によって、外部に向かうSMTPポート(25番)の通信が遮断されています。
インターネットサービスプロバイダ(ISP)の悪意ある顧客が自前のメールサーバからスパム(いわゆる迷惑メール)を送信したり、SMTP拡大型のウイルスに感染したPCからウイルスメールが送信されることなどを防止するために、ISP側で許可した特定のサーバ以外のSMTP(通常使用されるTCPポートの25番)の送信をブロックするという対策方法である。
では、どうやって回避するのか
SMTPポート(25番)の通信は遮断されておりますが、SUBMISSIONポート(587番)やSMTPS-AUTHポート(465番)は遮断されておらず
なおかつ、後者のポートはユーザ認証がなければメール送信を受け付けない設定になっているためメールを送信する事前にユーザアカウントの認証を取れば問題なく送れます。
実際の設定を行う前にプロバイダなどから提供されている以下の情報を手元に集めておいて下さい。
- SMTPサーバのホスト名・・・※1
- メールアドレス・・・※2
- メールアカウント名(基本的にはメールアドレスと同じであることがほとんどです)・・・※3
- メールアカウントのパスワード・・・※4
- SSL/TLS認証が必須であるか・・・※5
実際の設定を見ていこう
まず初めにSMTP認証で平文以外を使えるようにライブラリをインストールします
1 2 |
yum install cyrus-sasl.x86_64 cyrus-sasl-devel.x86_64 cyrus-sasl-lib.x86_64 cyrus-sasl-md5.x86_64 cyrus-sasl-plain.x86_64 |
使用するメールアカウント情報を保存します
1 2 3 |
# vi /etc/postfix/relay_password [{※1}]:587 {※3}:{※4} |
{※1}、{※3}、{※4}をそれぞれ、置き換えてください
送信されるメールアドレスを変更するための情報を保存します
1 2 3 |
# vi /etc/postfix/sender_maps /^.*$/ {※2} |
{※2}を置き換えてください
Postfixに設定を行います
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# vi /etc/postfix/main.cf ## mydestinationは、空に変更 mydestination = ## relayhostは、SMTPサーバ relayhost = [{※1}]:587 ## SSL/TLS認証が必須なら"yes"、不要なら"no" smtp_use_tls = {yes/no} ・・・※5 ## SMTP認証を行うための設定 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/relay_password smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = login, cram-md5, plain ## 送信されるメールアドレスを変更するための設定 local_header_rewrite_clients = permit_mynetworks sender_canonical_classes = envelope_sender sender_canonical_maps = regexp:/etc/postfix/sender_maps |
{※1}を置き換えてください
メールアカウント情報をハッシュ化します
1 2 |
# postmap /etc/postfix/relay_password |
Postfixを再起動
1 2 |
service postfix restart |
テストメール
1 2 |
# echo "testmail" | mail -s "testmail" "{自分のメールアドレス}" |