« Wanderlust で rss を読む | メイン | MovableType が送ってくるメールの題名の日本語が化けるのを直す »

2005年02月09日

Vine3.1 + postfix で SMTP AUTHする。 [ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]
[ カテゴリ : ★postfix ]

#Vine 4.0 ならもっと簡単
# 詳しくは http://om.pizzica.to/archives/2006/12/vine40_smtp_aut.html

やるからには CRAM-MD5 だろ。
というか、 spec ファイルとか見てると、cyrus-sasl を使って対応バイナリを配布してそうな雰囲気だが、実際は rpm は cyrus-sasl を要求するのに ldd /usr/sbin/postfix すると sasl の libなんざしったこっちゃーない状態。どうなのそれ?


目次:
1:cyrus-sasl 関連のは rpm で入れる
2:postfix は SRPMS から作り直す
3:/usr/lib/sasl/smtpd.conf を手作業で作る
4:saslpasswd -c -u hostname username でパス設定
5:/etc/postfix/main.cf をあれこれ設定

1:cyrus-sasl 関連のは rpm で入れる
# apt-get install cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-md5

devel は運用じゃなくて、postfix の再構築で必要なんじゃないだろうか。よくわからんが。

2: SRPM から作り直した postfix を入れる
2-1: postfix が入っているならもちろん消す。
# apt-get remove postfix

2-2: SRPM を持ってくる。
$ wget ftp://www.ring.gr.jp/pub/linux/Vine/Vine-3.1/SRPMS/SRPMS/postfix-2.0.20-0vl5.src.rpm
とか、そのへんで適当にどうぞ。

2-3: SRPM を展開する
$ rpm -i postfix-2.0.20-0vl5.src.rpm
これやると、~/rpm/SPECS とか ~/rpm/SOURCES とかにいろいろ出てくる。

2-4: ~/rpm/SPECS/postfix.spec を直す
とりあえず、Release の行は
Release: 0vm5
とか、0vl5 より後っぽいバージョン番号にする。

あと、%build の後にある make makefiles のあたりをいかのような具合に。



make makefiles \
CCARGS="-DMAX_DYNAMIC_MAPS \
-DHAS_LDAP \
-DUSE_SASL_AUTH -I/usr/include \
-DHAS_PCRE -I/usr/include/pcre \
-DHAS_MYSQL -I/usr/include/mysql \
-DHAS_PGSQL -I/usr/include/pgsql" \
AUXLIBS="-L/usr/lib -lsasl"


-DUSE_SASL_AUTH の行を追加してんのと、sasl の LIB 読みにいくようにするのと。

2-5: build に必要な devel rpm を入れる
# apt-get install openldap-devel pcre-devel MySQL-devel postgresql-devel pam-devel db4-devel gdbm-devel

なにが必要なのかわからない人は 2-6 やってみて怒られたら入れるくらいでいいよ、うん。
俺は spec 見て適当に入れたので、入れすぎてるかも(爆)
でも人によっては gcc が入ってなかったりするわけだろうしなー・・・

2-6: rpm rebuild
$ rpm -bb ~/rpm/SPECS/postfix.spec
これで RPM が出来上がるんだから、楽なもんだ。
できあがり場所は ~/rpm/RPMS/i386 とかその辺のはず。
mysql だ ldap だ出来てくるけど、とりあえず、
postfix-2.0.20-0vm5.i386.rpm
みたいのだけで大丈夫。
0vm5 ってのは2-4 で決めた Release 番号になる。

なんだから、openldap-devel だの postgresql-devel だのを入れずに、必要最小限の rpm だけ build という手もありそうなもんだが、面倒なので(devel 入れまくるほうが楽なので)パス。

2-7: rpm install
# rpm -Uvh postfix-2.0.20-0vm5.i386.rpm
とか、そんな具合。当たり前だろ!とか思うかね?
でも、Release 番号でヘンなのを入れると、ここではじかれるんだよねー。
0vl5 -> 0vm5 みたいにやってれば大丈夫なはずだが、最悪 --force でもなんでもどうぞ。

3:/usr/lib/sasl/smtpd.conf を手作業で作る
中味はたった1行
pwcheck_method:sasldb
だけ。以上。

4:saslpasswd -c -u hostname username でパス設定

重要:初めての saslpasswd のときは失敗するようなので、2回やってみる。

SMTP AUTH のユーザー名は実際の account がある必要はないので、適当に smtpsender とかいうアカウントをでっちあげてしまうのがいいと思う。

# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` smtpsender

ここで、 `` の中は、postfix の main.cf で定められた myhostname をつれてくる呪文なので、そのままでよい。ちなみに、-c が新規ユーザーを追加する create の c で、ユーザーを削除したい場合は、-d になる。

これをやると /etc/sasldb というファイルが出来るので、そいつを postfix で読めるようにする
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb

ちゃんと登録できているかどうかは
# sasldblistusers
である程度解る。

5:/etc/postfix/main.cf をあれこれ設定
最低限、下記2行はいるだろ。
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname

で、あとは、認証通ったらなんの制限を緩和してやりたいかにより設定する。うちでは3項目。
smtpd_helo_restrictions, smtpd_recipient_restrictions, smtpd_sender_restrictions で permit_sasl_authenticated というのを入れある。

こうすると、認証通ってれば
「HELO がおかしかろうがok」
「宛先が誰でどこに relay しようがok」
「sender が誰名義であろうが ok 」という設定にそれぞれなる(はずだ)。
(smtpd_client_restrictions も設定したほうがいいんだろうか。)

main.cf 書き換えたら
# /sbin/service postfix restart
とかして postfix の再起動を忘れないように。


postfix は本当に AUTH CRAM-MD5 とかに対応したかを一応確認する。 これは、つないでみて EHLO の応答を見ればよい。

$ telnet localhost 25

とかやって、繋がったら
EHLO localhost(改行)
とかやると応答がくる。その中で
>250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
みたいな応答があればよし。
どんな応答がこようが
QUIT(改行)
すれば接続は終わる。

投稿者 JK : 2005年02月09日 00:13