当ページではスタイルシートを多用しているため旧式のブラウザでは一部表示結果が想定通りにならない事がございますが、内容をご確認頂く上で支障が無い様に配慮しております。予めご了承くださいませ。

TurboLinux 8 Server + Postfix2.0.13 + Qpopper4.0.5 + Dracd1.11でPOP before SMTP(PbS)を実現する
外出先などからの不特定IPからSMTPさせるためには,spam対策上,SMTP-AuthかPbSなどが必須。
このため今回は,殆どのメーラが対応するPbSを導入することに。

最終更新日 2003/09/28

とりあえず簡単なMEMOとして,本ページを残しておくことにする。
想定する読者は,TurboLinux 8シリーズでPostfixを使ってメールサーバを構築する運用者であるため,かなり限られると思われる。その他の環境の場合には,技術的に参考になるところはあるかもしれないが,基本的には他のページも適宜参照しながら読み進める必要があるだろう。

●前提条件

まず,全体的なパッケージの役割としては,こうなる。
1)SMTPがPostfix。
2)POPがQpopper。
3)Qpopperは認証に成功したときにIPアドレスを記録を担当するのがDracd。
4)またDracが記録したDBファイルを,PostfixがSMTP時にリクエストを受理するかどうかを決める際に参照する。

従って,Dracが記録したDBファイル(今回は/etc/mail/dracd.db)を,Postfixが読める必要がある。

UNIXでは,このような目的に沿ったDBシステムとして,本格的なRDBシステムでは大げさなためdbmなど簡易的なシステムが使われることが多い。db1・db2・db3・db4などがあるが,互換性は一部に無い状態であることに注意が必要となる。

また,Postfixは1.1.12までのバージョンで,Qpopperは4.0.4までのバージョンで,それぞれ脆弱性が見つかっている。(2003/09現在)
このため,以下のTurboLinuxのサイトにあった2.0.13を利用することにした。
ftp://ftp.turbolinux.co.jp/pub/TurboLinux/stable/untested/Server/8/i586/

しかし,ここにあるPostfix2.0.13は,db1形式で書かれているDBファイルしか理解することが出来ない。一方,今回利用するDracdはdb3形式で記録するようである。他のdb3を使うPostfixのrpmを利用すれば良いのだが,入手可能なものの中で,TurboLinux 8 Serverにインストール可能で,かつ現時点でセキュリティーホールの無いものは,結構探したのだが見つからなかった。

仕方が無いのでソースファイル(SRPM)を入手し,設定ファイル(specファイル)を編集しdb3のライブラリにリンクして再コンパイルすることが必要である。
また同じような問題として,POPデーモンであるQpopperが,Dracに対応するようにコンパイルされていて,かつTurboLinux 8 Serverでも動作するものは,結局見つけることが出来なかったため,こちらもソースファイルを入手し,コンパイルし直すことになった。

ちなみに,以下の作業過程で得られたrpmファイルをここに置いておくので,利用できる場合には適宜Downloadして欲しい。


導入手順を以下に示す。作業はすべてrootで行う。

〜〜凡例〜〜
・黒字:作業者が入力する文字を示す
・太字:設定内容を示す

●Postfix+qpopperなので,当然sendmailはアンインストールする。

rpm -qa | grep sendmail
でインストールされているパッケージの名前(とバージョン)を調べる。

logcheckツールが依存している場合は,それもアンインストール。
rpm -e logcheck-*.**
rpm -e sendmail-*.**

●Postfix・dbmを入手(おそらくdb3だけでも良いと思われるが・・・)

ftp://ftp.turbolinux.co.jp/pub/TurboLinux/stable/untested/Server/8/i586/
db3-3.1.17-12.i586.rpm
db3-c++-3.1.17-11.i586.rpm
db3-devel-3.1.17-12.i586.rpm
db3-tcl-3.1.17-12.i586.rpm
db3-utils-3.1.17-12.i586.rpm
db3-docs-3.1.17-12.i586.rpm

db2-2.4.14-9.i586.rpm
db2-devel-2.4.14-9.i586.rpm
db1-1.85-30.i586.rpm
db1-devel-1.85-30.i586.rpm

postfix-2.0.13-1.i586.rpm

↑しかし,このpostfixパッケージは,db3に非対応だった。(db1対応でコンパイルされている)
dracdがdb2・db3・db4に対応しているようなので,Postfixのソースファイルを入手して,
db3対応させることに。

●その前にコンパイルには,以下が必要なので入手。

pkgconfig-0.12.0-1.i586.rpm
pcre-devel-3.7-1.i586.rpm
rpm-build-4.0.2-19.i586.rpm

●Postfixのソースを入手

ftp://ftp.turbolinux.co.jp/pub/TurboLinux/stable/untested/Server/8/SRPMS/
postfix-2.0.13-1.src.rpm

以下を入力して,rpmパッケージをインストールする。
rpm -ivh postfix-2.0.13-1.src.rpm
インストールできたら,ソースファイルが以下のところに展開されるため,ディレクトリを移動しよう。
cd /var/src/rpm/SPECS/

●postfix.specファイルを編集

CCARGS=
AUXLIBS=

となっている個所を探し以下のように変更。

CCARGS="-I/usr/include/db3"
AUXLIBS="-ldb-3"

●Rebuildし,新rpmファイルを作成。

rpmbuild -bb postfix.spec

『exit 0』が返ってくれば正常終了。

cd /var/src/rpm/RPMS/i586
ここに新しく出来たrpmファイルがあるので,
これでdb3対応のPostfixをインストールすることが出来る。
rpm -ivh postfix-2.0.13-1.i586.rpm

ちなみに,できあがったrpmファイルはコチラ。

●Postfixがちゃんとdb3対応になったかどうかを確認。

・まずpostfixの場所を得る
# which postfix
/usr/sbin/postfix

・リンクされているライブラリ一覧を得る
# ldd /usr/sbin/postfix
libdb-3.1.so => /usr/lib/libdb-3.1.so (0x40035000)
libldap.so.2 => /usr/lib/libldap.so.2 (0x400af000)
liblber.so.2 => /usr/lib/liblber.so.2 (0x400d7000)
libpcre.so.0 => /usr/lib/libpcre.so.0 (0x400e1000)
libsasl.so.7 => /usr/lib/libsasl.so.7 (0x400ea000)
libssl.so.0 => /usr/lib/libssl.so.0 (0x400f5000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x40121000)
libnsl.so.1 => /lib/libnsl.so.1 (0x401e4000)
libresolv.so.2 => /lib/libresolv.so.2 (0x401f8000)
libc.so.6 => /lib/libc.so.6 (0x40209000)
libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x40333000)
libdl.so.2 => /lib/libdl.so.2 (0x40339000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4033c000)
libpam.so.0 => /lib/libpam.so.0 (0x40369000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

・/usr/lib/libdb-3.1.soがどのrpmに含まれているか調べる
# rpm -qif /usr/lib/libdb-3.1.so | grep Name
Name : db3 Relocations: /usr

お。db3だな。

●/etc/postfix/main.cfを編集

以下の設定を,最後にでも付け加えておく。
allow_percent_hack = yes
swap_bangpath = yes
smtpd_recipient_restrictions =
permit_mynetworks
check_client_access btree:/etc/mail/dracd
reject

ついでに以下のような設定も。
mailbox_size_limit = 51200000
message_size_limit = 10240000

●dracdを入手

今回入手したものは,db3を使用しているDracである。
http://mland98.rc.kyushu-u.ac.jp/pub/TurboLinux/stable/untested/Server/8/i586/dracd-1.11-6rm.i586.rpm

起動するには
/etc/init.d/dracd start
エラーが起こる場合,portmapがちゃんと動いているか確かめる。

db3_dump /etc/mail/dracd.db』を実行したときに,btreeと認識されていればOK。required・・・などと出てきたらNG。
もしかしたら,/etc/mail/dracd.dbを一旦削除したほうが良いかもしれない。
また,newaliasesも実行したほうがいいかもしれない。

●SMTP before POP3のために,qpopperを導入

Vine2.5のサイトから入手。
qpopper-4.0.5-0vl0.26.i386.rpm

しかしdracdに対応していないバージョンのモノだったため,ソースを入手して
dracd対応させることに。

ちなみにqpopperからdbへのアクセスは,dracdを通じて行うので
Qpopper自体のdbの形式・バージョンは意識しなくてよい。

Vine2.5のソースから,最新のqpopperを入手。
qpopper-4.0.5-0vl0.26.src.rpm

rpm -ivh qpopper-4.0.5-0vl0.26.src.rpm
cd /var/src/rpm/SPECS/

●qpopper.specを編集

BuildPreReq: pam-devel >= 0.59

となっている部分がある。
TurboLinuxでは既にpam-0.72以降が入っているが,これにpam-develパッケージ相当
も同梱されている。従って,pam-develというパッケージは不要なので,以下の
ように書き換えてしまおう。

BuildPreReq: pam >= 0.59

※pamは,最新のパッケージを入手しておく。(これにセキュリティーホールが確認されている)

また,
CFLAGS="$RPM_OPT_FLAGS" ./configure \
--prefix=/usr \
--enable-bulletins=/var/spool/mail/bulletins \
--enable-specialauth \
--with-pam=qpopper \
--with-popuid=pop \
--enable-apop=/etc/pop.auth

となっている部分を以下のように変更(引用部最下2行に注目)

CFLAGS="$RPM_OPT_FLAGS" ./configure \
--prefix=/usr \
--enable-bulletins=/var/spool/mail/bulletins \
--enable-specialauth \
--with-pam=qpopper \
--with-popuid=pop \
--enable-apop=/etc/pop.auth \
--enable-drac

●Rebuildし,新rpmファイルを作成。

rpmbuild -bb qpopper.spec
cd /var/src/rpm/RPMS/i586
rpm -ivh qpopper-4.0.5-0vl0.26.i586.rpm

ちなみに,できあがったrpmファイルはコチラ

●/etc/xinetd.d/qpopperを作成(作成されていれば確認)

=== /etc/xinetd.d/qpopperの内容 =========
service pop-3
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/in.qpopper
server_args = -s
}

=======================================

以下を入力してサービスを再起動し,設定を有効に。
/etc/rc.d/init.d/xinetd restart

●他のマシンから不正中継できるか試験。

例)以下のTELNETは,他のマシンで実行。
# telnet mail.hogehoge.jp 25
Trying mail.hogehoge.jp...
Connected to mail.hogehoge.jp.
Escape character is '^]'.
220 mail.hogehoge.jp ESMTP Postfix (2.0.13) (TurboLinux)
HELO hogehoge.jp
250 mail.hogehoge.jp
MAIL FROM: user@hogehoge.jp
250 Ok
RCPT TO: test@hogehoge2.net
554 <test@hogehoge2.net>: Recipient address rejected: Access denied
quit(ここでやめておけば,送信されない)
221 Bye
Connection closed by foreign host.

554 Recipient address rejected: Access deniedになっているので,不正中継はされてない模様。

●では同じ他のマシンから実際にpopで接続試験をし,データベースにipアドレスが書き込まれるかを確認。

例)以下のTELNETは,他のマシンで実行。
# telnet mail.hogehoge.jp 110
Trying mail.hogehoge.jp...
Connected to mail.hogehoge.jp.
Escape character is '^]'.
+OK Qpopper (version 4.0.5) at mail.hogehoge.jp starting. <447.1064700760@mail.hogehoge.jp>
user ユーザ名
+OK Password required for userName.
pass パスワード
+OK userName has 6 visible messages (0 hidden) in 80200 octets.
quit
+OK Pop server at mail.hogehoge.jp signing off.
Connection closed by foreign host.

これでDracdを通じてIPアドレスが/etc/mail/dracd.dbに書き込まれたハズ。

pop接続試験後,
strings /etc/mail/dracd.db
でIPアドレスが返ってくればOK。

その後,もう一度TELNETを使いSMTPで先ほどと同じことをしゃべる。
先ほどのpopでIPアドレスがDBに存在するので,RCPT TOのリクエストを送ったら,554ではなく『250 Ok』と,送信が許可されるようになるハズ。

RCPT TO: test@hogehoge2.net
250 Ok
quit
221 Bye
Connection closed by foreign host.

●サービス自動起動の設定も忘れずに。

TurboLinuxではserviceboardというツールがあり,turboserviceとすると呼び出すことが出来るので,こういうときに便利である。

参考サイト
http://www.planet-works.com/pukiwiki.php?Postfix%20on%20TurboLinux%208