Postfixでのリレー設定方法

Linuxを使って、自宅SMTPサーバを稼動しているのですが、「Debian/Lenny」がリリースされた事をきっかけに、DebianのバージョンアップとMTAを「exim4」から「Postfix」に変更することにしました。Postfixの設定は、情報も多くわかりやすいのですが、特に、認証が必要な外部SMTPサーバへのメールリレー(OP25B対応)について設定方法をまとめておきます。

Postfix設定ファイルへの追加内容

契約しているプロバイダが、「OP25B」を実施しており、サブミッションポートを使用しなければいけないこと、さらにリレー先のSMTPサーバが、「SMTP-AUTH」を実装している事とします。これらに対処するために、Postfixの設定ファイル「/etc/postfix/main.cf」に設定を追加します。TLS が必要な場合はコメントはずします。

# SMTP-AUTH対応SMTPサーバへのリレー設定
relayhost = [smtpauth.XXXXX.ne.jp]:587
#smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous

それぞれのパラメータの意味は、次のとおりです。

relayhost
メールをリレーする相手先のSMTPサーバを指定します。設定には、smtp.XXXXX.comとか、smtp.XXXXX.com:567とか、[smtpauth.XXXXX.com]:587と設定します。ポートを指定するときは、「:」をつけてサーバ名の後ろに付けます。また、DNSでMX検索をせずに指定したサーバに直接アクセスする場合には、サーバ名を「[]」で囲みます。
smtp_sasl_auth_enable
リレー先のSMTPサーバにアクセスするときに、認証が必要かどうかを設定します。「yes」を設定した場合は、アクセス時に、認証手続きを実行します。よくにたパラメータに「smtpd_sasl_auth_enable」があるのですが、「smtpd_」で始まるパラメータは、SMTPサーバとして稼動する場合の設定で使用されるパラメータです。なので「smtpd_sasl_auth_enable」は、自分へのアクセス時に、相手側に認証させるかどうかの設定です。

smtp_sasl_password_maps
リレー先のSMTPサーバへアクセスするときに必要な認証情報が保存されているファイルを指定します。実際にアクセスするファイルには、拡張子「.db」がついているのですが、指定するときには、この拡張子は、付けずに指定します。
smtp_sasl_security_options
認証時に使用する認証方法を指定します。指定できる値は、次のとおりです。

noplaintext
平文パスワードを使う認証方法を許可しません。
noactive
non-dictionary active 攻撃に脆弱な認証方法を許可しません。
nodictionary
passive dictionary 攻撃に脆弱な認証方法を許可しません。
noanonymous
匿名ログインを許可しません。

設定を追加後、postfixを再起動すれば、設定内容が反映されます。

SMTP認証情報ファイルの作成方法

設定パラメータ「smtp_sasl_password_maps」で設定するファイルを作成します。設定する情報は、以下の情報です。

  • 接続先SMTPサーバ名
  • ユーザID
  • パスワード

接続先SMTPサーバ名は、パラメータ「relayhost」で設定した値をそのまま使用します。ポート番号も含みます。ユーザIDとパスワードは、プロバイダから指定された値を使用します。こうれらの情報をファイルに書き出します。書式は、「接続先SMTPサーバ名 ユーザID:パスワード」となります。書き出したファイルから、SMTP認証情報ファイルを作成します。

echo [smtpauth.XXXXX.com]:587 user01%XXXXX.com:XXXXxxX > /etc/postfix/authinfo
chmod 604 /etc/postfix/authinfo
postmap /etc/postfix/authinfo

上記、コマンド実行に、「/etc/postfix/authinfo.db」ファイルが出来ていれば成功です。

設定状況の確認

リレー設定後、メール送信できない場合まずは、/var/log/mail.log を確認します。

送信成功

Feb 22 17:46:33 hostmane postfix/pickup[11816]: CDF921609EF: uid=1001 from=
Feb 22 17:46:33 hostmane postfix/cleanup[11844]: CDF921609EF: message-id=<20170222084633.CDF921609EF@hostmane>
Feb 22 17:46:33 hostmane postfix/qmgr[11819]: CDF921609EF: from=, size=289, nrcpt=1 (queue active)
Feb 22 17:46:36 hostmane postfix/smtp[11846]: CDF921609EF: to=, relay=smtp.gmail.com[64.233.188.108]:587, delay=2.4, delays=0.05/0.06/1.5/0.81, dsn=2.0.0, status=sent (250 2.0.0 OK 1487753196 b73sm1936572pfl.132 - gsmtp)
Feb 22 17:46:36 hostmane postfix/qmgr[11819]: CDF921609EF: removed

送信失敗

Feb 22 17:49:07 hostmane postfix/pickup[11928]: D134C1609EF: uid=1001 from=
Feb 22 17:49:07 hostmane postfix/cleanup[11952]: D134C1609EF: message-id=<20170222084907.D134C1609EF@hostmane>
Feb 22 17:49:07 hostmane postfix/qmgr[11929]: D134C1609EF: from=, size=289, nrcpt=1 (queue active)
Feb 22 17:49:07 hostmane postfix/error[11954]: D134C1609EF: to=, relay=none, delay=0.06, delays=0.03/0.01/0/0.01, dsn=5.0.0, status=bounced ([smtp.gmail.com]:587)
Feb 22 17:49:07 hostmane postfix/cleanup[11952]: DB7E31609F6: message-id=<20170222084907.DB7E31609F6@hostmane>
Feb 22 17:49:07 hostmane postfix/qmgr[11929]: DB7E31609F6: from=<>, size=1966, nrcpt=1 (queue active)
Feb 22 17:49:07 hostmane postfix/bounce[11955]: D134C1609EF: sender non-delivery notification: DB7E31609F6
Feb 22 17:49:07 hostmane postfix/qmgr[11929]: D134C1609EF: removed

telnet コマンドでも確認します。もし、インストールされていなければ、sudo apt-get install inetutils-telnet を実行してインストールします。

正常な場合は、次のようになります。

telnet localhost 25

Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 hostmane ESMTP Postfix (Raspbian)
helo localhost
250 hostmane
mail from: XXXXX@uetyi.com
250 2.1.0 Ok
rcpt to: XXXXXXXX@gmail.com
250 2.1.5 Ok
quit
221 2.0.0 Bye
Connection closed by foreign host.

送信エラーとなる場合は、次のようになります。

telnet localhost 25

Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 hostmane ESMTP Postfix (Raspbian)
helo loclhost
250 hostmane
mail from: XXXXX@uetyi.com
250 2.1.0 Ok
rcpt to: XXXXXXXX@gmail.com
550 5.1.1 : Recipient address rejected: [smtp.gmail.com]:587
quit
221 2.0.0 Bye
Connection closed by foreign host.

エラーの原因で一番多いのは、リレー設定ではなく Postfix 初期設定の変更忘れです。上記エラーが出た場合は、初期設定を変更することで対応できます。設定ファイルを修正してリロードすればよいです。修正箇所は、/etc/postfix/main.cf ファイルの default_transport の設定値で、この値を error から smtp に変更します。

sudo vi /etc/postfix/main.cf
#default_transport = error
default_transport = smtp

sudo /etc/init.d/postfix reload
[ ok ] Reloading postfix configuration (via systemctl): postfix.service.
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする