努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:mail:mail-017

Postfixに宛先ドメイン別リレーさせる

2024/01/05
VPSで動かしていたメール送信プログラムをローカルサーバで実行させた時にGoogleのSMTPに拒否されたのでその対処を行ったときの記録。

概要

S社のVPSで動作させていたプログラムでは以下の種類のメールを送信していた。

  • キャリアメール宛
  • yahooメール宛
  • gmail宛

部屋の環境はプロバイダG社の回線を使っておりメール送信に際してはG社で指定するSMTPサーバ経由で送信を行っている。
このプログラムを部屋のローカルサーバで稼働させたところ、gmail宛のメールがSMTPでアクセス拒否されてしまった。

調べたところ、gmail側がG社ネットワークからの接続をほとんど拒否している状態らしい。※SPAM発信元として利用されまくったせいかもなぁ…

できるだけ既存の送信経路を変更したくない。
gmail宛メールのみVPSのPostfixにリレーして対応する。

変更前 変更後

前提

  • 各Postfixのmain.cf内パラメタmydomainで同じドメインを設定済みである ※例: mydomain = hoge.jp
  • 指定ドメイン(hoge.jp)のDNS定義には最低限SPFレコードを追加しローカルサーバ(Router)、VPS、を送信許可のあるホストとして登録済みである

設定

説明中にブラケットで囲んだ表記が出てくる。
例えば “[VPSのIPアドレス]” とあった場合、IPアドレスが8.8.8.8だとすると “[8.8.8.8]“の意となる。
例えば ”[xxxのアドレス]” とあった場合、アドレスがmail.hoge.jpだとすると “[mail.hoge.jp]“の意となる。

VPSのPostfix

main.cf

main.cf内パラメタmynetworksにローカルサーバ(Router)のIPアドレスを追加する。

mynetworks = 127.0.0.0/8, IPアドレス/32

mynetworksに登録されたネットワークからは認証等無しに接続できる。もし怖いならパラメタsmtpdシリーズの説明を調べてID/PASSを設定する事も可能。※ちょっと面倒。

ローカルサーバのPostfix

main.cf

transport_mapsでリレー先を選択させるので、main.cf内のパラメタrelayhostの指定をコメントアウトする。
元々はG社指定SMTPサーバをパラメタrelayhostで指定していた。

次に以下の指定を追記する。

transport_maps = hash:/usr/local/etc/postfix/transport
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/relay_passwd
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
inet_protocols = ipv4
transport_maps

パラメタtransport_mapsは宛先ドメイン毎にリレー先を指定するマップになる。
/usr/local/etc/postfix/transportにファイルを作る。

localhost      :
gmail.com  smtp:[VPSのIPアドレス]
*          smtp:[G社指定SMTPサーバアドレス]:G社指定のポート番号

この例は、宛先がローカル無いならリレーせず、gmail.comドメイン宛ならVPSへリレーし、それら以外はG社指定SMTPサーバへリレーする。

postmapコマンドで/usr/local/etc/postfix/transport.dbを生成する。
main.cfで/usr/local/etc/postfix/transportと記載しているが実際に使用するのは/usr/local/etc/postfix/transport.dbになる。

postmap /usr/local/etc/postfix/transport
smtp_sasl_password_maps

うちの環境ではパラメタsmtp_sasl_password_mapsの指定も必要だった。 これは、G社指定SMTPサーバはユーザ認証を必要としている為、/usr/local/etc/postfix/relay_passwdを作成し指定する必要がある。

[G社指定SMTPサーバのアドレス]:G社指定のポート番号   ユーザID:パスワード

postmapコマンドで/usr/local/etc/postfix/relay_passwd.dbを生成する。
main.cfで/usr/local/etc/postfix/relay_passwdと記載しているが実際に使用するのは/usr/local/etc/postfix/relay_passwd.dbになる。

postmap /usr/local/etc/postfix/relay_passwd
inet_protocols

この指定は状況による。
SPFレコードでipv4のアドレスを設定していた場合、環境によってはipv6で通信が行われSMTPサーバからキックアウトされてしまう。

このパラメタを明示的に設定する。

inet_protocols = all

もしダメであればipv4を明示する。

inet_protocols = ipv4
documents/mail/mail-017.txt · 最終更新: 2024/01/08 07:15 by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki