postfix、qpopper、dracdの組み合わせで、POP before SMTPが動くサーバを立てるためのメモ。
qpopperはinetdから呼び出したい。また、dracdを動かすにはrpcbindが動いてないとダメ。postfixはブート時に自動で走るようにしておく。
まず、/etc/rc.confの設定。
sendmail_enable=”YES”
rpcbind_enable=”YES”
rpcbind_flags=”-s”
dracd_enable=”YES”
dracd_flags=”-i -e 10 /usr/local/etc/dracd.db”
inetd_enable=”YES”
としておく。
dracd_flagsは、dracdが走る時のパラメータ。dracd.dbの在処までは明示しなくてもいいかもしれないが、一応念のため渡しておく。
hosts.allowのrpcbindの分は、
rpcbind : ALL : deny
rpcbind : localhost : allow
とする。
postfixはソースから拾ってきてインストール。特にオプションを指定しなくてもよい。ソースから入れると、設定ファイルは/etc/postfix/main.cfになる(portsから入れると/usr/local/etc/postfix/main.cf。両方あって紛らわしい時は一方を削除しておく)。
main.cfのうち、pop before smtpに関係したところを次のように設定。mynetworksの設定が緩すぎると、研究室内のクライアントが接続しても、通常の認証扱いでdracd.dbが変わらなかったりする。
mynetworks = サーバのIP/32
alias_database = hash:/etc/aliases
smtpd_recipient_restrictions = permit_mynetworks,check_client_access,btree:/usr/local/etc/dracd,check_relay_domains,reject
mynetworks_style = host
smtpd_recipient_restrictionsで指定したdracd.dbの在処が、dracd起動オプションと同じであることを確認。
/etc/aliasesを指定すると、/etc/aliases.dbを見ているっぽい。もし無ければ、rootでnewaliasesを実行するとデータベースが更新される。
mynetworksは、研究室内は無条件で使わせるといった場合はIPの範囲指定でもいいけど、そうでないなら、サーバのIPだけにしてpopからdracdに登録させて使う方が良さそう。
qpopperをdracを使うようにインストールするには、先にdracが入ってないとだめ。
dracはソースから入れるとMakefileの変更などが面倒くさいので、portsから入れる。
cd /usr/ports/mail/drac
make install
とやって、
/usr/local/sbin/rpc.dracd
/usr/local/libdrac.a
ができていればよい。起動スクリプトの/usr/local/etc/rc.d/dracdがインストール時に作られる。
/usr/local/etc/dradc.allowを設定。dracd-allow.sampleそのままコピーでよいが、
255.255.255.255 127.0.0.1
も追加しておいた。
dracdの起動は、
/usr/local/sbin/rpc.dracd -i -e 10 /usr/local/etc/dracd.db
dracdの動作確認は、
/usr/ports/mail/drac/work/testing 127.0.0.1 111.222.333.444
などと叩いてから、
makemap -u btree /usr/local/etc/dracd.db
して、登録されていれば正常動作している。
ただし、このチェックは一通りインストールして、一度リブートして、rc.confの変更が反映されてから確認した方が良さそう。
qpopperのコンパイルは、ソースを拾ってきて展開後
./configure –enable-apop=/etc/pop.auth –enable-popuid=pop –with-drac=/usr/local/lib
make install
でよい。
この設定だと、apopの認証ファイルは/etc/pop.authになる。
もし、gdbmが無いと言われる時は、インストールしてなければ入れる。既に入っているなら
ln -s /usr/local/lib/libgdbm.a /usr/lib/libgdbm.a
などとやって、見えるようにしてやる。
./configure時のメッセージで。
Compiling in DRAC support
checking for dracauth in -ldrac… yes
と出ていることを確認。
コンパイル終了後、エラーが出る場合は、Makefileと、popper/Makefileをエディタで開いて、後の方にある、
@${INSTALL} -s -m 0755 -o root popper ${installdir}/popper
@echo “Installed popper as ${installdir}/popper”
の@を取り除く。他の部分も同様に取り除く。
/usr/local/sbinの下にpopperとpopauthができる。
/etc/inetd.confの設定。
pop3 stream tcp nowait root /usr/local/sbin/popper popper -p2 -s -R
変更したらinetdにHUPを送る。
qpopperのオプションの意味は、
-d
Configure時に–enable-debugging を指定しておくと、デバッグログをsyslogに出せる。
-p 0|1|2|3|4
プレーンテキスト(plainパスワードの扱いを設定する。
0 (defaults) :「APOPデータベースに存在しないユーザ」のみ、通常のパスワード(平文)による認証を許す
1 : すべてのユーザ(APOPデータベースに存在しないユーザも)において、通常のパスワード(平文)による認証を許す
2 : 「APOPデータベースの中に存在するユーザ」であっても、通常のパスワード(平文)による認証を許す
3 : Loopbackアドレス(127.0.0.1)からの接続に関してのみ、通常のパスワード(平文)による認証を許す
4 : TSL/SSLによる通信の場合のみ、通常のパスワード(平文)による認証を許す
-R
クライアントIPの逆引き(reverse lookups)をOFFにする。ログファイルに出る、逆引きできませんでしたというあんまり意味のないエラーが出なくなる。
-s
syslogでログを記録する。
-T
クライアントからコマンドが到着するまでサーバが待つ時間(秒)を設定。デフォルト120秒。
popperの場所はインストールの方法によって異なるので注意。
実は最初、/usr/sbin/popperになってて、そっちはシンボリックリンクではなく別のpopperだったため、dracが動かなくて半日嵌った(泣)。
/etc/hosts.allowは、
popper : ALL : allow
と、とりあえず制限はしない方針で。
apop認証のユーザー名とパスワードは、とりあえずrootで
/usr/local/sbin/popauth -user ユーザー名 パスワード
とやると追加される。
rc.confをいじってるので、動作が不穏なら論よりboot。
メールクライアントからつないで、/usr/local/etc/dracd.dbにIPが登録されることを確認する。さらに、外部のアドレス宛にメールを送信してみて、送られていればOK。