Solaris で qpopper

 

POP とは

POP は、要求に応じてメールスプールからメールをクライアントに配送する仕組みである。 sendmail を動かしていないマシンでメールを読むために使う。 Thunderbird, Outlook, Becky! などの PC のメールクライアントが対応している。

ここでは qpopper を使う。qpopper は APOP に対応している。

qpopper の保守状況

qpopper の最終版は 4.1.0 (2011 年)で、開発は終了している。 セキュリティ修正が提供されないため、新規に POP/IMAP サーバを構築するときは、 保守が継続している Dovecot(現在の安定版は 2.4 系)を使う。 Dovecot は POP3 と IMAP の両方に対応し、mbox 形式と Maildir 形式を扱える。 既存の qpopper を使い続ける場合も、Dovecot への置き換えを計画する。

qpopper の配布元であった Qualcomm のサイトは閉鎖されている。 ソースは Ring Server などのミラーから取得する。


 

make と install

旧バージョンの qpopper があるときのバックアップ

POP の認証情報が入った /etc/pop.auth と、既存の実行ファイルをバックアップする。

cp /etc/pop.auth /etc/pop.auth.BAK
chmod 600 /etc/pop.auth.BAK
cp /usr/local/sbin/popauth /usr/local/sbin/popauth.BAK
cp /usr/local/sbin/popper /usr/local/sbin/popper.BAK

実行ファイルのオーナーとモードは次のようになっている。popauth は setuid されている。

cd /usr/local/sbin
ls -la pop*
-rws--x--x 1 pop pop .... popauth
-rwxr-xr-x 1 pop pop .... popper

インストールの前に必要な設定

qpopper の管理用に pop というユーザとグループを作る。 ユーザ ID とグループ ID は 110 とする。

groupadd -g 110 pop
useradd -u 110 -g pop -d /tmp -s /bin/sh -c "POP USER" pop

作成後、/etc/passwd と /etc/group に次のエントリができていることを確認する。

/etc/passwd
pop:x:110:110:POP USER:/tmp:/bin/sh

/etc/group
pop::110:

gdbm のインストール

qpopper の認証データベースで使う GNU gdbm を、qpopper より先にインストールする。 現在のバージョンは 1.26 である。

gzip -d gdbm-1.26.tar.gz
tar -xvf gdbm-1.26.tar
cd gdbm-1.26
./configure
make
make install

qpopper のインストール

gzip -d < qpopper-4.1.0.tar.gz | gtar -xvf -
cd qpopper-4.1.0
./configure --enable-specialauth --enable-apop=/etc/pop.auth --with-popuid=pop --with-openssl=/usr
# Solaris 10 で OpenSSL が /usr/sfw にあるときは
# ./configure --enable-specialauth --enable-apop=/etc/pop.auth --with-popuid=pop --with-openssl=/usr/sfw
gmake
gmake install
cd /usr/local/sbin
chown pop:pop popauth
chown pop:pop popper
chmod 4711 popauth
cd /usr/sbin
rm -f popauth popper
ln -s /usr/local/sbin/popauth popauth
ln -s /usr/local/sbin/popper popper
chown pop:pop /etc/pop.auth
chmod 600 /etc/pop.auth

configure の主なオプションは次の通りである。

gdbm を使うかどうかは configure 時に決まる。 既存の pop.auth を別のマシンから移して使うときは、 make 時のオプションを一致させる。オプションが違うと pop.auth が読めない。

インストールが終わると、インストール場所と pop.auth の場所が表示されるので確認する。

Installed popauth as /usr/local/sbin/popauth  with uid pop
POP authentication DB not initialized (exists): /etc/pop.auth

 

設定

/etc/inet/inetd.conf に次のエントリを加える。 /usr/local/sbin/popper の箇所は、popper のインストール先に合わせて変更する。

pop3    stream  tcp     nowait  root    /usr/local/sbin/popper   popper -s

/etc/services に次の1行が入っていることを確認する。

pop3            110/tcp                         # Post Office Protocol - Version 3

TLS を使う(POP3S)ときは、次の1行も確認する。

pop3s           995/tcp                         # POP3 over TLS

POP3 は認証情報とメール本文を平文で流すため、 TLS を使う設定を推奨する。

Solaris 10 以降の場合

inetconv を実行して、inetd.conf のエントリを SMF のサービスに変換する。

inetconv

変換後、サービスの状態を確認する。

inetadm | grep pop3

inetd.conf を再度変更したときは、次のコマンドで再変換する。

inetconv -i /etc/inet/inetd.conf

Solaris 9 あるいはそれ以前の場合

inetd を再起動する。

kill -HUP `pgrep inetd`

 

テスト

POP サーバ上でテストする。

まず、テスト用のメールを送る。hoge の箇所は、送りたい相手先に読み替える。

echo popper test mail | mailx -s subject hoge

次に、POP サーバに接続して、メールを取得できるかを確認する。 APOP で使うパスワードは、サーバが返すバナー内のタイムスタンプと共有パスワードを連結して MD5 でハッシュした値である。メールクライアントがこの計算を行う。

% telnet popserver 110
Trying 133.5.18.yyy...
Connected to popserver.
Escape character is '^]'.
+OK Qpopper (version 4.1.0) at popserver starting.  (<xxxxxxxxxxxxx@popserver>)
APOP hoge 「MD5 で計算した値」
+OK hoge has xxx visible message ...
LIST                <-- メールの一覧の表示
+OK 1 visible messages (xxxx octets)
1 xxxx
.
RETR 1              <-- メールの取得
Received: from xxxxxxxx (xxxxxxxx) by xxxxxxxx (xxxxxx) with internal id xxxxxxx;
<--- ここにメールの本文が表示される --->
QUIT                <-- 接続の終了
+OK Pop server at popserver signing off.
Connection closed by foreign host.

TLS の設定を行ったときは、次のコマンドで接続を確認する。

openssl s_client -connect popserver:995

 

運用

ユーザの POP パスワードを設定する。 これは UNIX のパスワードとは別のパスワードを設定する。

# popauth -user hoge
Changing POP password for hoge.
New password: *************
Retype new password: **************

一般のユーザがパスワードを変更するときは、サーバにログインして popauth を実行する。

hoge@popper[~]% popauth
Changing only APOP password for hoge.
Old password: *************
New password: **************
Retype new password: **************

ユーザの登録を取り消すときは -delete オプションを使う。

# popauth -delete hoge

APOP 認証を設定したユーザは APOP でしか認証できないため、 メールクライアントは APOP に対応しているものを使う。 なお、APOP は MD5 を使う古い認証方式であり、対応するメールクライアントは減っている。 TLS 上での通常のパスワード認証(POP3S)に移行することを検討する。

セッションが正常に終了せず、popper のプロセスが残ることがある。 このときは、そのプロセスを終了させる。

popper は inetd が接続要求のあったときに起動するため、 接続がないときは ps に現れない。 プロセスを終了させても、次の接続要求で inetd が popper を起動する。