postfix spop3d dracによるpop before smtpの構築 

失敗に終わったDRACのインストール
なぜうまくいかないのかわからずほったらかしです・・・
pop before smtpはあきらめてimapでもします。

ある方(Kさん)からこのWEBページを見て
postfix+solidpop3d+dracで成功したと連絡をもらいました。
main.cfの書き方が悪かったようです。

連絡いただけた方はlinuxで行ったということですが
dracのインストールプション以外はこのサイトのように
やればいけたとのことです。

あまりデザインよく編集してませんが
あしからずご了承ください・・・

【popのインストール】

popperの選択はかなり迷いました。なかなかPOP3プロトコルとMaildir形式の両方を
実現させるのにデファクトスタンダードと呼べそうなものがなかったので。
まあめちゃめちゃ有名かどうかはさておきPOP3&Maildirをサポートさせるには
solidpop3dしか今のところないようです。mailbox形式だとqpopperでも可能です。
postfixとpopやimapを実現させるにはこういうソフトでどうでしょう。という一覧は
postfixのオフィシャルサイトにはのっているのでご参考までに。
postfixのadd-onソフト一覧はこちら。
今回はsolidpop3dでPOP before SMTPさらにプラスAPOPという環境を構築することにする。
※もし何千・何万というユーザを抱えていてsendmailからpostfixに乗り換えてsolidpop3dを
導入しようというときはMaildir形式とAPOPはちょっとネックになるかもしれません。
Maildirは現在のユーザスプールを/var/mail/usernameから$HOME/Maildir/へ変更してあげなくてはならないし、APOPはユーザがいきなり今までと違う方式で
【準備】
・DRACのダウンロード
ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z
から最新版をダウンロードしておきます。

・solidpop3dのダウンロード
http://www.software-facilities.com/mail-software/solidpop3d.php
から最新版を・・・というか現在ココは一時的に
HPをおいてるみたいで正式なオフィシャルサイトは現在作成中のようです。

【インストール】
まずはdracから

[root@home3 postfix]# mkdir drac;cd drac
[root@home3 drac]# mv ../drac.tar.Z ./
[root@home3 drac]# uncompress < drac.tar.Z |tar xf -
最初は/usr/local/src/の中で解凍したら、こいつカレントにソース全部解凍してくれる・・・
ソースまみれになった・・だから場所を変えてdracディレクトリを作ってその中で解凍しましょ。
[root@home3 drac]# cp -p Makefile Makefile.org

ここでMakefileをINSTALLファイルに書いてあるように編集します。
今回はsolaris8でコンパイルするのでsolarisの部分を参照して書き換えます。
Linuxでする場合はLinuxの項を参照して書き換えます。
また、BerkeleyDBも前もってインストールしておきましょう。
[root@home3 drac]# vi Makefile
[root@home3 drac]# diff Makefile Makefile.org
39c39
< CC = gcc
---
> CC = cc
41c41
< CFLAGS = $(DEFS) -g -I/usr/local/BerkeleyDB.4.0/include
---
> CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-3.1.17/build_unix
44c44
< LDLIBS = -L/usr/local/BerkeleyDB.4.0/lib -lnsl -ldb
---
> LDLIBS = -L/usr/local/src/db/db-3.1.17/build_unix -lnsl -ldb

[root@home3 drac]# make 2>&1|tee make.log
[root@home3 drac]# make install 2>&1|tee make_install.log
これで/usr/local/sbin/rpc.dracdがインストールされる。
あとライブラリと起動ファイルもコピーしておく。

[root@home3 drac]# cp -p libdrac.a /usr/local/lib/
[root@home3 drac]# cp -p dracd-setup /etc/init.d/dracd
デフォルトの所有者もアクセス権もsolarisでは少し違うので調整しおく。
[root@home3 drac]# chown root:sys /etc/init.d/dracd
[root@home3 drac]# chmod 744 /etc/init.d/dracd

これからsolidpop3dをdracサポートにてコンパイルすることになるが
実はqpopperなどをdracサポートでコンパイルするのは簡単だが、今のところ
solidpop3dをdracサポートにするには自分でsolidpop3dのmain.cを書き換えるしか
方法がない。そこで「日経Linux 2000年8月号の150ページ」のパッチを当てる。
そのパッチとはこんな感じのパッチであった。
私はこのパッチの名前を一時的にsolid-drac.patchという名前にしている。
これをsolidpop3dを展開したディレクトリの中におきます。

[root@home3 postfix]# tar zxf solid-pop3d-0.15.tar.gz
[root@home3 postfix]# cd solid-pop3d-0.15
[root@home3 solid-pop3d-0.15]# cp ~nitta/patch/solid-drac.patch ./
[root@home3 solid-pop3d-0.15]# cd src
一応元のmain.cをバックアップしておきます。patch当てるときには勝手に.origという名前で
バックアップはとってくれるのですが。一応念のためということで。

それから今回私はGNUのpatchコマンドを使いました。
もともとsolarisについている/usr/bin/patchで試してみましたが、パッチはあたりません。
もしどうしてもGNUのpatchをシステムにインストールできない(企業でシステムの仕様が変更になるのはまずいなど)時は手でmain.cをパッチファイルを参考に書き換えてもそれほど多くないので
ミスらない限り大丈夫でしょう。
1488行目あたりだったと思います。

[root@home3 src]# /usr/local/bin/patch -p 1 ../solid-drac.patch
これでパッチがあたります。うまくいかない場合は私が使ったsolid-drac.patchをそのまま
使ってみてください。

あとはAPOPとdracを使えるようにsolidpop3dをコンパイルするだけです。
[root@home3 solid-pop3d-0.15]# ./configure --enable-apop --enable-maildir --enable-standalone 2>&1|tee configure.log

・Makefileの編集
[root@home3 solid-pop3d-0.15]# cp -p src/Makefile src/Makefile.org
[root@home3 solid-pop3d-0.15]# vi src/Makefile]
root@home3 solid-pop3d-0.15]# diff src/Makefile src/Makefile.org
92c92
< DEFS = -DDRAC_AUTH -DHAVE_CONFIG_H-DDEFCONFIGFILENAME=\"$(sysconfdir)/spop3d.conf\" \
---
> DEFS = -DHAVE_CONFIG_H -DDEFCONFIGFILENAME=\"$(sysconfdir)/spop3d.conf\" \
94,95c94,95
< LDFLAGS = -L/usr/local/lib #
< LIBS = -ldrac
---
> LDFLAGS =
> LIBS =
・コンパイルとインストール
[root@home3 solid-pop3d-0.15]# make 2>&1|tee make.log
[root@home3 solid-pop3d-0.15]# useradd -d /nonexistent -s /bin/false spop3d
[root@home3 solid-pop3d-0.15]# make install 2>&1|tee make_install.log
/usr/local/share/man/man1/pop_auth.1
/usr/local/share/man/man5/spop3d.conf.5
/usr/local/share/man/man5/dot-spop3d.5
/usr/local/share/man/man8/spop3d.8
/usr/local/bin/pop_auth
/usr/local/sbin/spop3d
がインストールされる。

【設定】
・DRACの設定
[root@home3 src]# echo "255.255.255.255 127.0.0.1" > /etc/mail/dracd.allow

・solidpop3dの設定
[root@home3 solid-pop3d-0.15]# cp -p doc/config.example /usr/local/etc/spop3d.conf
[root@home3 solid-pop3d-0.15]# vi /usr/local/etc/spop3d.conf
/* This example is very stupid. Don't use it as a base for your own
configuration file */
<Global>
AllowRootLogin no
MailDropName Maildir
MailDropType maildir
APOPServerName aroman.mine.nu
#UserBullFile .spop3d-blurp /* It's just an example */
ReadExpire 0
</Global>
#<VirtualHost 192.168.1.1>
# UnreadExpire never
# APOPServerName jakis.tam.host.w.pl
# MailDropName "/var/spool/mail/%s" /* It is a comment */
# MailDropType mailbox
# AutoLogoutTime 5s
# UserOverride yes
# AllowAPOP yes
# ChangeGID true
#</VirtualHost>
・postfixの設定
[root@home3 solid-pop3d-0.15]# vi /etc/postfix/main.cf
以下の設定を追加する
smtpd_recipient_restrictions =
 permit_mynetworks
 check_client_access btree:/etc/mail/dracd
 check_relay_domains

※Kさんからいただいた情報では以前は
permit〜
check_cl〜
check_rel〜
の3行の行頭に空白が入ってないからではないか!
という情報をいただきました。
改良を使うには行頭に空白が必要になることは知らなかった・・・
ということで、お気をつけください!


さらにKさんから追加でいただいた情報としては
check_client_access btree:/etc/mail/dracd
のところですがbtreeなのかhashなのdbmなのか
を調べるには

[10:23am root@home3 postfix]# /usr/local/BerkeleyDB.4.0/bin/db_dump -p /etc/mail/dracd.db
VERSION=3
format=print
type=btree
HEADER=END
DATA=END

とすると形式がどれを使っているのかわかるようです。
Linuxの場合ならhashになるでしょうね。


[root@home3 solid-pop3d-0.15]# /usr/sbin/postfix reload

以上で無事インストールはできてることでしょう。
後は実際にMUAでテストしてください。
1.送信前にpopを行って正常送信確認
2.送信前にpopを行わず送信し、送信失敗
3.1.の後数分間おいてタイムアウトした後に送信し、失敗することを確認
4.dbファイルの確認、/var/log/syslogの確認
など色々試験項目を考えてやってみてください。

堅牢なメールサーバをお楽しみくださいませ(-^〇^-)