2011/01/29 CentOS5.5





SMTP-AUTHを使って上位メールサーバへ転送する

他のパターンはPostfixでメールサーバを構築する(解説)も参照してください。

インターネットへメールを自由に送信するのも規制がかかっています。
不正中継対策として、OB25Pを採用しているISPも多いです。
あるいは独自ドメインのメールを、ISPサーバを経由して送らねばならないこともあります。
そのため、SMTP-AUTHで送信元の身元を確認します。

この場合は、PostfixをSMTP-AUTHクライアントとして、ISPメールサーバへパスワードを送って認証します。


条件
 ISPのサーバが不正中継対策として、OB25PやSMTP-AUTHを採用している場合。
 PostfixサーバにSMTP-AUTHに使用するユーザIDとパスワードを設定しておきます。
 その他の点は「上位メールサーバへ一律転送するメールサーバ」と共通です。
 


「上位メールサーバへ一律転送するメールサーバ」までの設定が終了しているものとします。


Cyrusをインストールする
Postfixを設定する
SMTP-AUTHで使用するパスワードを記述する
Telnetでメールの転送を確かめる


Cyrusをインストールする
まずはPostfixにSMTP-AUTHクライアントとしてCyrusをインストールします。
#yum install cyrus-sasl cyrus-sasl-md5 cyrus-sasl-plain

としてインストールします。リポジトリへ接続できることが条件です。


Postfixを設定する
Postfixにsaslを使用することを伝えます。

master.cfに、以下の行を追加します。

submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject




ISPのSMTP-AUTHではポート587番が採用されていることが多いです。
main.cfのrelayhostを以下のように編集します。ポート番号も不可します。
通常のメールサーバとは異なり、認証用のSMTPサーバを指定するISPもあります。

relayhost = [auth.hogehoge.net]:578

末尾にSMTP-AUTHのための設定を追加します。

MD5認証を採用しているISPの場合

smtp_sasl_auth_enable  = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp-auth-passwd
smtp_sasl_mechanism_filter = cram-md5, plain, login

上から順に
sasl-authを有効
SMTP-AUTHに使うユーザ名とパスワードを指定するファイル。ファイル名は何でもいいです。
SMTP-AUTHの認証方法を試す順番

ですが、このMD5認証がクセ者です。
MD5認証はちょっと複雑なため、一部のメールソフトは実装していません。
そのためISP側もユーザサポートが面倒になるので、初めからMD5を使用せずplaintextで運用していることが多いです。


MD5認証を採用していないISPの場合

smtp_sasl_auth_enable  = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp-auth-passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter =  plain, login



smtp_sasl_security_optionsはデフォルトで「noanonymous,noplaintext」なので、plaintextの使用を禁止しています。
まずnoplaintextを記述しないことで、plaintextの使用を許可します。
そして認証方式の順番に、MD5を含めていません。


SMTP-AUTHで使用するパスワードを記述する
smtp_sasl_password_maps で記述したファイルを作成します。
中にSMTP-AUTHで使用するユーザIDとパスワードを記述します。

#vi smtp-auth-passwd

[auth.hogehoge.net]:587     user:passwdxxx

ハッシュ化することで、Postfixが読み込めるように変換します。

#postmap smtp-auth-passwd

Postfixを再起動して設定情報を読み込ませます。大きく設定した場合はreloadではダメな場合があります。

#service postfix restart

必ず、ハッシュ化してから再読み込みさせましょう。
起動させた後でパスワードをハッシュ化させても効果ありません。


Telnetでメールの転送を確かめる
TelnetでSMTPの挙動を確認します。

メールサーバ上でメールのログを監視します。
#tail -f /var/log/maillog

「telnet localhost 25」として直接SMTPサービスにログインし、SMTPコマンドを実行します。

太字部分が入力内容です。
宛先のメールは、外部のインターネットメールを使用します。

220 localhost.localdomain ESMTP Postfix
helo localhost
250 localhost.localdomain
mail from: user1@example.local
250 2.1.0 Ok
rcpt to: user@hogehoge.net
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
helo postfix
.
250 2.0.0 Ok: queued as 0625633CC90
quit
221 2.0.0 Bye

tailで監視している/var/log/maillogの内容で

Jan 29 19:28:37 localhost postfix/smtp[3587]: 364CB33CC90: to=<user@hogehoge.net>, relay=auth.hogehoge.net[xxx.xxx.xxx.xxx]:587, delay=0.5, delays=0.39/0/0.06/0.05, dsn=2.0.0, status=sent (250 2.0.0 x0eCtqSy011047 Message accepted for delivery)

という内容が出れば成功です。
認証が失敗する、という類のエラーが出るときはパスワードファイルの記述に細かいミスがないか確認し、リロードします。
あるいはmain.cfの認証方式のオプションでつづり間違いをしている可能性もあります。
認証が実行されない場合は、ISPの認証方式と認証サーバ名、main.cfの認証方式の指定などを確認しましょう。






prev.gif