.





2005/01/27
MacOSX(Postfix)でSMTP Authクライアントをやってみる。その2
カテゴリ : Mac / MacOSX
執筆者: itoh (12:33 am)
で、昨日の続き。要するに何がしたいのかと言うと。


1・携帯系のプロバイダは自宅サーバのIPからのメールを受け付けない。
2・なので、自宅サーバから上流のプロバイダ(私の場合はYahooBB)にSMTPでリレーする必要がある。
3・しかし、単純にSMTPでリレーさせるわけがない。
4・POP before SMTPでの認証はOutlookなどのメールクライアントソフトでは有効だが、SMTPリレーさせる場合には無効なようだ。
5・ならば、Postfixをクライアントに見立てて、SMTP AuthでYahooBBのSMTPサーバに認証してもらってリレーさせよう。


実は、「まぁ、今のところ不都合はauに送るときだけだし、知り合いにauメールを使ってるのはいないから良いか」と、放置すること1年近く。最近、「YahooBBでSMTP Auth使えばリレーできるよ」という情報を得てようやく重い腰を上げたのだった。



で、とりあえずMacOSX PantherのPostfixにはSMTP Authをデフォルトでは使えない。というのは、
引用:
MacOSXのPostfixには、SASLライブラリは標準で組み込んであります。しかし、残念ながらパスワードデータベースを作成するためのコマンドが用意されていないため、標準の状態ではSMTP Authを設定できません。

と、手元の大津真著;MacOSX10.3 UNIX的徹底活用講座には書いてある。


なんじゃそりゃ?


と、言う感じだが、まぁしょうがない。SASLライブラリとは、ようするに暗号化ライブラリでさまざまな暗号法を持っているようだ。
http://www.asi.co.jp/techinfo/unix/smtp-auth.html


で、今思ったのだが、MacOSX10.3がそんな変な仕様なのはもしかして、MacOSXがクライアントとしてリレーをするためにSASLを使うなら使えるのではないかと。外からSMTP Authで認証して使うと言う場合はあと付けでSASLを完全にインストールする必要があるのではないかと。


まぁ、とりあえず私はfinkでSASL2を入れてしまったのでもうどっちでもいいのだが。これ読んで試してみる人がいればまずデフォルトの状態でやってみてもいいかもしれない。


長々と、書いて来たが実際にやるのはちょっとだけ。まず、SASL2をインストール。私はfinkでお手軽にやった。次に、SMTP AuthでYahooBBのSMTPにリレーさせるのはauだけなので、/etc/postfix/transportにその旨を記述。その後、データベース化させておく。あ、main.cfでtransport_mapsを使う設定にすることも忘れず。

ちなみに、自分は面倒なので以下の作業を全部ルートになってやった。
引用:

# emacs /etc/postfix/main.cf
--- main.cf ---
transport_maps = hash:/private/etc/postfix/transport
-----------------
# emacs /etc/postfix/transport
--- transport ---
ezweb.ne.jp :[ybbsmtp.mail.yahoo.co.jp]
------------------
# postmap /etc/postfix/transport



まだ、ezwebのサブドメイン入りメールアドレスを使う人に出したいのなら.ezweb.ne.jpの行も必要。

次に、ybbsmtp.mail.yahoo.co.jp にSMTP Auth認証(頭痛が痛いみたいな表現だな)をパスするためのID:passwordのセットを作る。

引用:

# emacs /etc/postfix/saslpass
--- saslpass ---
ybbsmtp.mail.yahoo.co.jp yahoo_id:yahoo_pass
------------------
# postmap /etc/postfix/saslpass


これで、ID:passwordのセットはできた。
次に、saslを使うようにPostfixに教えてやる。
引用:

# emacs /etc/postfix/main.cf
--- main.cf ---
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =
------------------
# /usr/sbin/postfix reload


main.cfに加えた3行は、
1行目:saslを使いますよという宣言
2行目:認証先のSMTPサーバとそのID/passwordの記述先
3行目:saslで使う暗号化方法
3行目でつまづいた。これは、自分がクライアントとして使うので、接続先の仕様にあわせる必要がある。そこがわからないで、noplaintextとかやっていた。YahooBBのSMTP Authは正にその逆で「平文で」ID/passwordをやりとりしている。(それもどうかと思うが)

これまでのことは、実は全部
/usr/share/doc/postfix/SASL_README
に書いてあった。それも「Enabling SASL authentication in the Postfix SMTP client」とかおもいっきりそのまんまのタイトルで。

で、そこにも注意書きとして
引用:

Note: some SMTP servers support PLAIN or LOGIN authentication only.By default, the Postfix SMTP client does not use authentication methods that send plaintext passwords, and defers delivery with the following error message: Authentication failed: cannot SASL authenticate to server". To enable plaintext authentication specify,
for example:

/etc/postfix/main.cf:
smtp_sasl_security_options =


だって。おお、まさしく同じエラーログがmail.logに出ていたぞ。
自分の場合は、

引用:
Jan 26 23:36:12 SERVERNAME postfix/smtp[21598]: warning: SASL authentication failure: No worthy mechs found
Jan 26 23:36:12 SERVERNAME postfix/smtp[21598]: 0D2D3D57CE: to=<************@ezweb.ne.jp>, relay=ybbsmtp.mail.yahoo.co.jp[210.80.241.31], delay=43596, status=deferred (Authentication failed: cannot SASL authenticate to server ybbsmtp.mail.yahoo.co.jp[210.80.241.31]: no mechanism available)


だった。
で、まんまドキュメントの言う通りの平文だったので、値なしの設定なのでした。ちなみに、とれるsmtp_sasl_security_optionsのパラメタは
noplaintext, noactive, nodictionary, noanonymous, mutual_auth
で、smtp(8)のマニュアルには

引用:

smtp_sasl_security_options
Zero or more of the following.

noplaintext
Disallow authentication methods that use plaintext passwords.

noactive
Disallow authentication methods that are vulnerable to non-dictionary active attacks.

nodictionary
Disallow authentication methods that are vulnerable to passive dictionary attack.

noanonymous
Disallow anonymous logins.



だそうな。まぁ、いずれの設定値も平文は許してなくて、だから設定値なしでの使用なんでしょう。



ふぅ。
itohさんのブログを読む | コメント (0) | トラックバック数 (1) | 閲覧数 (17629)


 





メインメニュー

カテゴリ一覧

Google Adsense

うぇブログ カレンダー


XoopsCube Ring
Amethyst Blue - BULLETIN


.